<?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>216302</bug_id>
          
          <creation_ts>2020-09-08 19:11:42 -0700</creation_ts>
          <short_desc>Web Inspector: modernize generated backend protocol code</short_desc>
          <delta_ts>2020-10-16 20:14:35 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=216341</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216342</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216343</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216344</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216345</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216346</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216347</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216348</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216409</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216477</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>179847</blocked>
    
    <blocked>216486</blocked>
    
    <blocked>216675</blocked>
    
    <blocked>217863</blocked>
    
    <blocked>217864</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>bburg</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>philipj</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>timothy</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1686875</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 19:11:42 -0700</bug_when>
    <thetext>- use `Optional&amp;&amp;` and `RefPtr&amp;&amp;` instead of `*`
 - use `Ref&amp;&amp;` instead of `&amp;`
 - parse enum values and pass the enum directly instead of the raw string
 - don&apos;t use out parameters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686895</commentid>
    <comment_count>1</comment_count>
      <attachid>408308</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 20:38:22 -0700</bug_when>
    <thetext>Created attachment 408308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686896</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-08 20:38:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/68547649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686897</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-08 20:39:20 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)

This patch modifies the inspector protocol. Please ensure that any frontend changes appropriately use feature checks for new protocol features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686903</commentid>
    <comment_count>4</comment_count>
      <attachid>408310</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 21:31:37 -0700</bug_when>
    <thetext>Created attachment 408310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686914</commentid>
    <comment_count>5</comment_count>
      <attachid>408313</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 23:36:16 -0700</bug_when>
    <thetext>Created attachment 408313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686915</commentid>
    <comment_count>6</comment_count>
      <attachid>408314</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 23:51:49 -0700</bug_when>
    <thetext>Created attachment 408314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686916</commentid>
    <comment_count>7</comment_count>
      <attachid>408315</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 23:58:23 -0700</bug_when>
    <thetext>Created attachment 408315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686918</commentid>
    <comment_count>8</comment_count>
      <attachid>408316</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 00:03:44 -0700</bug_when>
    <thetext>Created attachment 408316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686921</commentid>
    <comment_count>9</comment_count>
      <attachid>408318</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 00:29:32 -0700</bug_when>
    <thetext>Created attachment 408318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686993</commentid>
    <comment_count>10</comment_count>
      <attachid>408318</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2020-09-09 09:15:30 -0700</bug_when>
    <thetext>Comment on attachment 408318
Patch

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

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:279
&gt; +    T result;

Very nice. But, why is object passed by pointer instead of reference? The error message for !object seems wrong, that case is about the &apos;params&apos; object or whatever being empty. It would be better to handle that case at callers of this, if its not too much extra pain.

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:304
&gt; +    return getPropertyValue&lt;Optional&lt;bool&gt;&gt;(object, name, required, &amp;JSON::Value::asBoolean, &quot;Boolean&quot;);

Uh.. yeah.. this whole area is a mess.

&gt; Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:38
&gt; +using ErrorString = String;

I&apos;ve been wondering if we want to make this flexible enough to return more than just a string in the future. Seems ok for now.

&gt; Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:59
&gt; +        return static_reference_cast&lt;JSON::ArrayOf&lt;T&gt;&gt;(static_reference_cast&lt;JSON::ArrayBase&gt;(array.releaseNonNull()));

Didn&apos;t know this was a thing!

&gt; Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.cpp:151
&gt; +        m_scriptProfilerAgent-&gt;stopTracking();

It would be prudent to at least log any errors returned by the agent calls that happen here.

&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.cpp:62
&gt; +    Protocol::ErrorString errorString;

Nit: move this next to the first assignment.

&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h:66
&gt; +    virtual InjectedScript injectedScriptForEval(Protocol::ErrorString&amp;, Optional&lt;Protocol::Runtime::ExecutionContextId&gt;&amp;&amp;) = 0;

Seems like InjectedScript needs some modernization, too. Can you file &amp; relate bugs for followup modernizations?

&gt; Source/JavaScriptCore/inspector/agents/InspectorConsoleAgent.cpp:200
&gt; +    auto [timestamp, snapshotData] = WTFMove(result.value());

Neat.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:138
&gt; +        ignoreCount = options-&gt;getInteger(Protocol::Debugger::BreakpointOptions::ignoreCountKey).valueOr(0);

Nice!

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:514
&gt; +static bool parseLocation(Protocol::ErrorString&amp; errorString, const JSON::Object&amp; location, JSC::SourceID&amp; sourceID, unsigned&amp; lineNumber, unsigned&amp; columnNumber)

Followup: more modernization possible.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:544
&gt; +    auto protocolBreakpoint = ProtocolBreakpoint::fromPayload(errorString, !!url ? url : urlRegex, !!urlRegex, lineNumber, columnNumber.valueOr(0), WTFMove(options));

Followup: more modernization possible.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:573
&gt; +    return { { protocolBreakpoint-&gt;id(), WTFMove(locations) } };

Nice.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h:145
&gt; +    virtual void internalDisable(bool isBeingDestroyed);

OK

&gt; Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.cpp:59
&gt; +    disable();

MARK: I reviewed from the top to here. (9/9/2020 @ 9:15am)

&gt; Source/WebCore/inspector/agents/worker/WorkerAuditAgent.cpp:-51
&gt; -InjectedScript WorkerAuditAgent::injectedScriptForEval(ErrorString&amp; errorString, const int* executionContextId)

MARK: I reviewed from here to the bottom. (9/9/2020 @ 9:15am)

&gt; Source/WebDriver/Session.cpp:1048
&gt; +        if (!inViewCenterPointX || !inViewCenterPointY) {

So much nicer!

&gt; Source/WebKit/UIProcess/Automation/Automation.json:32
&gt;              &quot;description&quot;: &quot;The coordinate system in which rects, points, and sizes are to be interpreted.&quot;,

Nit: document that &apos;LayoutViewport&apos; is legacy

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:-386
&gt; -    Optional&lt;float&gt; x;

Why did this change from float to double? (Not a problem just curious)

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:430
&gt; +static Inspector::Protocol::Automation::PageLoadStrategy pageLoadStrategyFromParameter(Optional&lt;Inspector::Protocol::Automation::PageLoadStrategy&gt;&amp;&amp; optionalPageLoadStrategy)

Nit: I think this function can be removed and the default value inlined.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1013
&gt; +    case Inspector::Protocol::Automation::CoordinateSystem::Viewport:

Nit: add link to followup bug to remove &apos;LayoutViewport&apos; if you plan to rename the wire value on the client side (safaridriver/webkitgtkdriver).

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:-1675
&gt; -        if (!parsedInteraction)

Ayy, nice to hoist the parsing to earlier.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1914
&gt; +            if (!!pressedCharKeyString)

Is this actually necessary? If pressedCharKeyString is Optional&lt;String&gt; then operator bool() defined on Optional should just work, right?

&gt; Tools/TestWebKitAPI/Tests/WTF/JSONValue.cpp:63
&gt; +        // Integers can be get as doubles.

Nit: grammaro

&gt; Tools/TestWebKitAPI/Tests/WTF/JSONValue.cpp:82
&gt; +        // Doubles can be get as integers.

Nit: grammaro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687079</commentid>
    <comment_count>11</comment_count>
      <attachid>408318</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2020-09-09 11:43:48 -0700</bug_when>
    <thetext>Comment on attachment 408318
Patch

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

r=me, fantastic stamina. Please make remaining bots happy and be around to fix problems when this lands.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:-53
&gt; -{

o_O

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:345
&gt; +

Nit: extra newline

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:68
&gt; +            # fallthrough

Nit. # Fallthrough.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:74
&gt; +        if isinstance(_type, ObjectType) or _type.qualified_name() in [&apos;object&apos;]:

What&apos;s the case where it&apos;s not ObjectType but the qualified_name() is &apos;object&apos;?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:119
&gt; +            # fallthrough

Ditto.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:124
&gt; +            # fallthrough

Ditto (more below)

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:254
&gt; +            # fallthroug

Nit: typo

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:256
&gt; +        if isinstance(_type, EnumType) and _type.is_anonymous:

Can you file a followup bug about modernizing / removing anonymous enums?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:349
&gt; +    def should_move_argument(_type, is_optional):

Nice, this is cleaner.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py:98
&gt; +    void dispatch(long protocol_callId, const String&amp; protocol_method, Ref&lt;JSON::Object&gt;&amp;&amp; protocol_message) final;

Nit: I prefer protocol_requestId.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:212
&gt; +        return self.wrap_with_guard_for_condition(command.condition, &quot;    void %s(long protocl_callId, RefPtr&lt;JSON::Object&gt;&amp;&amp; protocol_parameters);&quot; % command.command_name)

Nit: typo

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:185
&gt; +            elif CppGenerator.should_release_argument(_type, parameter.is_optional):

V. nice

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:263
&gt; +                    parameter_expression = &apos;WTFMove(%s)&apos; % variable_name

This code should use the helpers that you created (should_move, should_dereference, etc.)

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:369
&gt; +                lines.append(&apos;    auto [%s] = WTFMove(result.value());&apos; % &quot;, &quot;.join(result_extraction_names))

Suggestion: destructured_tuple_names?

&gt; Source/WebCore/inspector/InspectorCanvas.cpp:913
&gt;      initialStatePayload-&gt;setContent(getCanvasContentAsDataURL(ignored));

Another followup to modernize getCanvasContentAsDataURL()...

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:537
&gt; +        if (auto range = buildSourceRangeObject(sourceData-&gt;ruleBodyRange, m_parentStyleSheet-&gt;lineEndings()))

Do we expect this to ever fail?

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:696
&gt; +                        auto newStatus = activeIt-&gt;value-&gt;getString(Protocol::CSS::CSSProperty::statusKey);

This section was tricky to follow, but I think it&apos;s correct.

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:1179
&gt; +    auto result = inspectorStyle-&gt;buildObjectForStyle();

NIt: extra newline

&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:495
&gt;          if (!includePseudo || *includePseudo) {

I think this should be includePseudo.value_or(true)

&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:511
&gt;          if (!includeInherited || *includeInherited) {

Ditto above.

&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:1040
&gt; +void InspectorCSSAgent::didRemoveDOMNode(Node&amp; node, Protocol::DOM::NodeId nodeId)

Nice.

&gt; Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:192
&gt;      if (!inspectorCanvas)

Another modernization followup for assertInspectorCanvas() and friends.

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:323
&gt;      setSearchingForNode(ignored, false, nullptr, false);

Another modernization followup for setSearchingForNode().

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:703
&gt; +    Element* element = assertEditableElement(errorString, nodeId);

More modernization followup for assertEditableElement() .

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:707
&gt; +    if (!m_domEditor-&gt;setAttribute(*element, name, value, errorString))

More modernization followup for setAttribute().

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:2017
&gt; +                    if (auto controlledElementId = pushNodePathToFrontend(controlledElement))

Slightly different behavior, but its OK.

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:2754
&gt; +        if (auto nodeId = pushNodePathToFrontend(errorString, node))

Modernization followup: pushNodePathToFrontend()

&gt; Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp:151
&gt; +        if (!setAnimationFrameBreakpoint(errorString, WTFMove(breakpoint)))

Modernization followup: setAnimationFrameBreakpoint &amp; friends.

&gt; Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp:328
&gt; +        m_pauseOnAllURLsBreakpoint = WTFMove(breakpoint);

Nit: newline

&gt; Source/WebCore/inspector/agents/InspectorDOMStorageAgent.cpp:101
&gt; +    RefPtr&lt;StorageArea&gt; storageArea = findStorageArea(errorString, WTFMove(storageId), frame);

Modernization followup: findStorageArea() and friends.

&gt; Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp:-283
&gt; -    static NeverDestroyed&lt;const String&gt; numberType(MAKE_STATIC_STRING_IMPL(&quot;number&quot;));

Eww

&gt; Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp:398
&gt; +        if (!primaryKey)

Thanks for adding error handling!

&gt; Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:210
&gt;  

Nit: extra newline

&gt; Source/WebCore/inspector/agents/InspectorPageAgent.cpp:404
&gt; -    if (reloadFromOrigin)
&gt; +    if (ignoreCache &amp;&amp; *ignoreCache)

Use value_or(false)? In general I don&apos;t like the foo &amp;&amp; *foo pattern. (and its cousins like !foo || !*foo)

&gt; Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp:168
&gt; +        auto instrument = Protocol::Helpers::parseEnumValueFromString&lt;Protocol::Timeline::Instrument&gt;(instrumentString);

Should we auto-parse/convert arrays of enums? (Not necessarily right now)

&gt; Source/WebCore/inspector/agents/page/PageNetworkAgent.cpp:94
&gt; +void PageNetworkAgent::setResourceCachingDisabledInteral(bool disabled)

ERROR: speling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687290</commentid>
    <comment_count>12</comment_count>
      <attachid>408318</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 23:50:07 -0700</bug_when>
    <thetext>Comment on attachment 408318
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:279
&gt;&gt; +    T result;
&gt; 
&gt; Very nice. But, why is object passed by pointer instead of reference? The error message for !object seems wrong, that case is about the &apos;params&apos; object or whatever being empty. It would be better to handle that case at callers of this, if its not too much extra pain.

In this case, `object` actually is the `params` object, which can be `nullptr` if the JSON message is malformed 😅

Doing this in the caller would mean that every `*BackendDispatcher::*` would need to check for whether `params` exists or not and throw an error if that command has a required property.  IMO, this way is much cleaner and avoids duplicated code.

I&apos;ll rename `object` to `params` for clarity.

&gt;&gt; Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.cpp:151
&gt;&gt; +        m_scriptProfilerAgent-&gt;stopTracking();
&gt; 
&gt; It would be prudent to at least log any errors returned by the agent calls that happen here.

Log to where?  Most of the `stop*`/`disable*` commands tend to be very lenient and not result in errors as they are sorta &quot;overused&quot; in order to make sure things really are turned off.  I think logging errors would likely be misleading most of the time.

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.cpp:62
&gt;&gt; +    Protocol::ErrorString errorString;
&gt; 
&gt; Nit: move this next to the first assignment.

I intentionally put these as the first thing in the command handler so that it was kinda &quot;obvious&quot; that we need to remove it.  This would relate to followup(s) for removing `Protocol::ErrorString` as out-parameters in helper methods too.

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h:66
&gt;&gt; +    virtual InjectedScript injectedScriptForEval(Protocol::ErrorString&amp;, Optional&lt;Protocol::Runtime::ExecutionContextId&gt;&amp;&amp;) = 0;
&gt; 
&gt; Seems like InjectedScript needs some modernization, too. Can you file &amp; relate bugs for followup modernizations?

&lt;https://webkit.org/b/216341&gt; Web Inspector: modernize InjectedScript code

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:514
&gt;&gt; +static bool parseLocation(Protocol::ErrorString&amp; errorString, const JSON::Object&amp; location, JSC::SourceID&amp; sourceID, unsigned&amp; lineNumber, unsigned&amp; columnNumber)
&gt; 
&gt; Followup: more modernization possible.

&lt;https://webkit.org/b/216342&gt; Web Inspector: modernize *DebuggerAgent code

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:544
&gt;&gt; +    auto protocolBreakpoint = ProtocolBreakpoint::fromPayload(errorString, !!url ? url : urlRegex, !!urlRegex, lineNumber, columnNumber.valueOr(0), WTFMove(options));
&gt; 
&gt; Followup: more modernization possible.

&lt;https://webkit.org/b/216342&gt; Web Inspector: modernize *DebuggerAgent code

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h:145
&gt;&gt; +    virtual void internalDisable(bool isBeingDestroyed);
&gt; 
&gt; OK

Yeah this is perhaps one of the only downsides to this change, in that we can no longer have other methods that share the same name as commands if they have the same arguments.  IMO that&apos;s not really a downside tho, as I personally believe there should be 1-1 mappings for commands :)

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:74
&gt;&gt; +        if isinstance(_type, ObjectType) or _type.qualified_name() in [&apos;object&apos;]:
&gt; 
&gt; What&apos;s the case where it&apos;s not ObjectType but the qualified_name() is &apos;object&apos;?

I believe that inlined/anonymous objects are a `PrimitiveType` and have a `qualified_name` of `&apos;object&apos;` (e.g. the `data` parameter of the `Debugger.paused` event).

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:256
&gt;&gt; +        if isinstance(_type, EnumType) and _type.is_anonymous:
&gt; 
&gt; Can you file a followup bug about modernizing / removing anonymous enums?

&lt;https://webkit.org/b/216343&gt; Web Inspector: remove anonymous enums from protocol

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:263
&gt;&gt; +                    parameter_expression = &apos;WTFMove(%s)&apos; % variable_name
&gt; 
&gt; This code should use the helpers that you created (should_move, should_dereference, etc.)

I remember trying to also use it for this code too, but not getting it to work right.  The rest of the code that uses those helpers deals with the &quot;final&quot; type of those objects, whereas this code is about actually generating those final types (e.g. in every other case, we always want to `releaseNonNull` an optional object/array, but in this case we just want to `WTFMove` it).  This is because the `BackendDispatcher::get*` always returns an &quot;optional&quot; value (e.g. always `RefPtr` never `Ref`) even for properties that we expect to exist.

&gt;&gt; Source/WebCore/inspector/InspectorCanvas.cpp:913
&gt;&gt;      initialStatePayload-&gt;setContent(getCanvasContentAsDataURL(ignored));
&gt; 
&gt; Another followup to modernize getCanvasContentAsDataURL()...

&lt;https://webkit.org/b/216344&gt; Web Inspector: modernize *CanvasAgent code

&gt;&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:537
&gt;&gt; +        if (auto range = buildSourceRangeObject(sourceData-&gt;ruleBodyRange, m_parentStyleSheet-&gt;lineEndings()))
&gt; 
&gt; Do we expect this to ever fail?

There&apos;s an early `return nullptr;` in that function, so I guess yes?  This was fine before because `set*` allowed for `RefPtr` and (I believe) could handle invalid values.  Now that we expect/require valid values, we should check it just to be sure.

&gt;&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:696
&gt;&gt; +                        auto newStatus = activeIt-&gt;value-&gt;getString(Protocol::CSS::CSSProperty::statusKey);
&gt; 
&gt; This section was tricky to follow, but I think it&apos;s correct.

this entire file is tricky to follow T.T

&gt;&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:495
&gt;&gt;          if (!includePseudo || *includePseudo) {
&gt; 
&gt; I think this should be includePseudo.value_or(true)

i personally don&apos;t like using `valueOr` cause it&apos;s more work than the separate operations

&gt;&gt; Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:192
&gt;&gt;      if (!inspectorCanvas)
&gt; 
&gt; Another modernization followup for assertInspectorCanvas() and friends.

&lt;https://webkit.org/b/216344&gt; Web Inspector: modernize *CanvasAgent code

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:323
&gt;&gt;      setSearchingForNode(ignored, false, nullptr, false);
&gt; 
&gt; Another modernization followup for setSearchingForNode().

&lt;https://webkit.org/b/216345&gt; Web Inspector: modernize *DOMAgent code and related helper classes

FYI this would probably fall under my existing desire to just rebuild the DOM agent
 - &lt;https://webkit.org/b/189687&gt; Web Inspector: preserve DOM.NodeId if a node is removed and re-added
 - &lt;https://webkit.org/b/213499&gt; Web Inspector: allow DOM nodes to be instrumented at any point, regardless of whether the main document has also been instrumented

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:703
&gt;&gt; +    Element* element = assertEditableElement(errorString, nodeId);
&gt; 
&gt; More modernization followup for assertEditableElement() .

ditto

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:707
&gt;&gt; +    if (!m_domEditor-&gt;setAttribute(*element, name, value, errorString))
&gt; 
&gt; More modernization followup for setAttribute().

ditto

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:2754
&gt;&gt; +        if (auto nodeId = pushNodePathToFrontend(errorString, node))
&gt; 
&gt; Modernization followup: pushNodePathToFrontend()

ditto

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp:151
&gt;&gt; +        if (!setAnimationFrameBreakpoint(errorString, WTFMove(breakpoint)))
&gt; 
&gt; Modernization followup: setAnimationFrameBreakpoint &amp; friends.

&lt;https://webkit.org/b/216346&gt; Web Inspector: modernize *DOMDebuggerAgent code

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMStorageAgent.cpp:101
&gt;&gt; +    RefPtr&lt;StorageArea&gt; storageArea = findStorageArea(errorString, WTFMove(storageId), frame);
&gt; 
&gt; Modernization followup: findStorageArea() and friends.

&lt;https://webkit.org/b/216347&gt; Web Inspector: modernize *DOMStorageAgent code

&gt;&gt; Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp:168
&gt;&gt; +        auto instrument = Protocol::Helpers::parseEnumValueFromString&lt;Protocol::Timeline::Instrument&gt;(instrumentString);
&gt; 
&gt; Should we auto-parse/convert arrays of enums? (Not necessarily right now)

yes, we should really be able to auto-parse/auto-convert all the things

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:-386
&gt;&gt; -    Optional&lt;float&gt; x;
&gt; 
&gt; Why did this change from float to double? (Not a problem just curious)

there are no longer template overloads for `getNumber`, so the value must either be an `int` or a `double`

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1013
&gt;&gt; +    case Inspector::Protocol::Automation::CoordinateSystem::Viewport:
&gt; 
&gt; Nit: add link to followup bug to remove &apos;LayoutViewport&apos; if you plan to rename the wire value on the client side (safaridriver/webkitgtkdriver).

&lt;https://webkit.org/b/216348&gt; remove code handling incorrectly named `Automation.CoordinateSystem.LayoutViewport` in favor of the correctly named `Automation.CoordinateSystem.Viewport`

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1914
&gt;&gt; +            if (!!pressedCharKeyString)
&gt; 
&gt; Is this actually necessary? If pressedCharKeyString is Optional&lt;String&gt; then operator bool() defined on Optional should just work, right?

So `getString` doesn&apos;t return `Optional&lt;String&gt;` as `String` is already a tri-state (null vs empty vs value), meaning that we can use just `String` and know whether it exists or not.

Unfortunately, while `String` doesn&apos;t have `operator bool()`, it does have `operator!`, so I&apos;m using that instead.  I could also use `!string.isNull()` if that&apos;d be preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687291</commentid>
    <comment_count>13</comment_count>
      <attachid>408416</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 23:52:31 -0700</bug_when>
    <thetext>Created attachment 408416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687483</commentid>
    <comment_count>14</comment_count>
      <attachid>408416</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-10 11:55:20 -0700</bug_when>
    <thetext>Comment on attachment 408416
Patch

I&apos;m pretty sure the win bot failure is not accurate as it&apos;s complaining about code that should&apos;ve changed in this patch.

e.g.
```
C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\DerivedSources\ForwardingHeaders\JavaScriptCore\InspectorProtocolObjects.h(487,1): error C2664: &apos;void WTF::JSONImpl::ObjectBase::setObject(const WTF::String &amp;,WTF::Ref&lt;WTF::JSONImpl::ObjectBase,WTF::DumbPtrTraits&lt;T&gt;&gt; &amp;&amp;)&apos;: cannot convert argument 2 from &apos;WTF::RefPtr&lt;Inspector::Protocol::Animation::Effect,WTF::DumbPtrTraits&lt;T&gt;&gt;&apos; to &apos;WTF::Ref&lt;WTF::JSONImpl::ObjectBase,WTF::DumbPtrTraits&lt;T&gt;&gt; &amp;&amp;&apos; [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
```
is complaining about the argument being a `RefPtr&lt;Inspector::Protocol::Animation::Effect&gt;`, which in this case is the argument to `Inspector::Protocol::Animation::Animation::setEffect`, but this patch changes that argument to be a `Ref` (the code is autogenerated)

The win bot seems to have issues when changes are made to autogenerated inspector code :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687486</commentid>
    <comment_count>15</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-10 11:57:48 -0700</bug_when>
    <thetext>also, it&apos;s worth mentioning that attachment 408318 didn&apos;t have any issues, and attachment 408416 didn&apos;t change anything near the code that seems to be causing problems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687497</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-10 12:23:23 -0700</bug_when>
    <thetext>Committed r266885: &lt;https://trac.webkit.org/changeset/266885&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408416.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687518</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-09-10 13:25:26 -0700</bug_when>
    <thetext>Committed r266889: &lt;https://trac.webkit.org/changeset/266889&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408308</attachid>
            <date>2020-09-08 20:38:22 -0700</date>
            <delta_ts>2020-09-08 21:31:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908203820.patch</filename>
            <type>text/plain</type>
            <size>1409720</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjkyZmUwZDRkOGM3ZmNjNTdiMWVhNGI3ODI2ZmQzOWMyYzQ0MDIzY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBpbnNwZWN0
b3IgcHJvdG9jb2wgd2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEgc29tZXdoYXQgY29uZnVzaW5n
IHdheToKKyAgICAgICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMgdGhlIGZpcnN0IGFyZ3VtZW50
CisgICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBgVGAgb3IgYGNvbnN0IFQmYAor
ICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNvbnN0IFQqYAorICAgICAgICAg
LSBlbnVtIHBhcmFtZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0eXBlIHJlcXVpcmluZyB0aGUg
YmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAgICAgcHJvY2VzcyBpdCBpbnN0
ZWFkIG9mIGl0IGJlaW5nIHByZXByb2Nlc3NlZAorICAgICAgICAgLSByZXF1aXJlZCByZXR1cm5z
IHdlcmUgYFQmYAorICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5zIHdlcmUgYFQqYAorICAgICAg
ICBUaGlzIGRvZXNuJ3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2aW91cyByZWFkaW5nIG9mIGNv
ZGUgc2luY2UgdGhlIG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICBub3Qgd2VpcmQgKGUu
Zy4gZXJyb3Igc3RyaW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUgYXJlIHJlZmVyZW5jZXMvcG9p
bnRlcnMgdG8gcHJpbWl0aXZlCisgICAgICAgIHR5cGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
Y2xlYW5zIHVwIHRoZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3RvY29sIGNvZGUgdG8gYmU6Cisg
ICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBvciBgUmVmPFQ+JiZgCisgICAg
ICAgICAtIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25hbDxUPiYmYCBvciBgUmVmUHRy
PFQ+JiZgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUgcHJlcHJvY2Vzc2VkIGFuZCBw
YXNzZWQgdG8gdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGlmIHZhbGlkCisgICAgICAg
ICAtIHN5bmNocm9ub3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0ZWQ8WCwgRXJyb3JTdHJpbmc+
YCB1c2luZyB0aGUgc2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAgICAgICAgICB3aGVyZSBgWGAg
aXMgZWl0aGVyIGEgc2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1cGxlYCBvZiBtdWx0aXBsZSBy
ZXR1cm5zCisKKyAgICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIGlzIGBTdHJp
bmdgLCB3aGljaCBpcyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBudWxsU3RyaW5nKClgLAorICAg
ICAgICBgZW1wdHlTdHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgdG8gdXNlIGBPcHRpb25hbDxTdHJpbmc+YC4KKworICAgICAgICBBbHNvIHVzZSBgUHJvdG9j
b2xgIG9iamVjdHMvYHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJsZSB0byBmdXJ0aGVyIHJlbGF0
ZSB0aGUgcHJvdG9jb2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFjdHVhbCBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLmdlbmVyYXRlX2lu
Y2x1ZGVzX2Zyb21fZW50cmllcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHk6CisgICAgICAgIChDcHBHZW5lcmF0b3IuaGVscGVy
c19uYW1lc3BhY2UpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zv
cl90eXBlKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlw
ZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUpOgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCk6
IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFt
ZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5k
X3JldHVybl9kZWNsYXJhdGlvbik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIpOiBBZGRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bSk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJh
dG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iu
c2hvdWxkX3JlbGVhc2VfYXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIpOiBEZWxldGVkLgorICAgICAgICAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9y
bWFsX2V2ZW50X3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3R5cGVfbWVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19v
dXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0
aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJh
dG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dy
YXBwZXJfZm9yX3JldHVybl90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5z
aG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2Vu
ZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKToKKyAgICAg
ICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5k
KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKENwcEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xh
cmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKToK
KyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKToKKyAgICAgICAgKENwcEZy
b250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAg
ICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weToKKyAgICAgICAgKENwcFByb3Rv
Y29sVHlwZXNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVk
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1
ZGVzKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2RvbWFpbik6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX29wZW5fZmll
bGRfbmFtZXMpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0pOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFu
ZCk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZCk6CisgICAgICAgIChPYmpDQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19i
bG9ja19mb3JfY29tbWFuZC5hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kLmlu
X3BhcmFtX2V4cHJlc3Npb24pOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKToKKyAg
ICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfZXZlbnQpOgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6Cisg
ICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW1faW50ZXJuYWwpOgorICAg
ICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9w
YXJhbWV0ZXIpOgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbjoKKyAg
ICAgICAgTm93IHRoYXQgZW51bXMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRv
IGJhY2tlbmQgZGlzcGFjaGVyIGhhbmRsZXJzLCB0aGUKKyAgICAgICAgYGFwcGVhcmFuY2VgIHBh
cmFtZXRlciBvZiBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNlYCBtdXN0IGJlIG1hcmtlZCBgb3B0
aW9uYWxgIGFzCisgICAgICAgIHRoZXJlJ3Mgbm8gd2F5IGZvciBpdCB0byBhY2NlcHQgYW4gZW1w
dHkgc3RyaW5nLCBhcyB0aGF0J3Mgbm90IHBvc3NpYmxlIGZvciBhbiBlbnVtLgorCisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXVkaXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQXVkaXRBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHA6Cisg
ICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgIEVsaWRlZCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBjaGFuZ2VzIGRlc2Ny
aWJlIGFib3ZlLgorCisgICAgICAgICogYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoSW5zcGVjdG9yOjpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAgICAgICAqIGluc3BlY3Rvci9B
c3luY1N0YWNrVHJhY2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6QXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9i
amVjdCBjb25zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRCYXNlOjptYWtlRXZhbENhbGwpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dEJhc2U6OmNoZWNrQ2FsbFJlc3VsdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0QmFzZTo6Y2hlY2tBc3luY0NhbGxSZXN1bHQpOgorICAgICAgICAqIGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHA6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpleGVjdXRlKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHQ6OmZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
amVjdGVkU2NyaXB0OjpnZXRQcmV2aWV3KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHQ6OmdldFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
amVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmpl
Y3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZSBjb25zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gpOgorICAgICAgICAoSW5zcGVjdG9yOjpC
YWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFj
a2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2Jq
ZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KToK
KyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvSW50ZWdlcik6IERlbGV0ZWQuCisgICAgICAgIChJ
bnNwZWN0b3I6OmNhc3RUb051bWJlcik6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkJp
bmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxUPj46OnJ1bnRpbWVDYXN0KToKKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxUPj46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6ZXh0cmFjdEV2ZW50KToKKyAgICAg
ICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6
aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNl
IGBSZWYmJmAgd2hlcmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBv
dXQgcGFyYW1ldGVyCisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2Fu
IGJlIG1vcmUgZWFzaWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24K
KyAgICAgICAgdG8gZXhpc3QuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
bnVtLXZhbHVlcy5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2VudW0tdmFsdWVzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQ6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24t
cmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJl
c3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9u
Lmpzb24tcmVzdWx0OgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8g
YmUgY29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwppbmRleCBkMGI1MWVkYjgwNjA4NjBiN2JiMTNjMDYyYTUwMzExZmE0MjRm
MWRhLi4wZTMxY2E4M2U0ZDFmNWY4NjcyMDc0MjliOGU0MDhjNzEwZjk4MmM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUxIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJv
dG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3dGYvSlNPTlZhbHVlcy5oOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFz
ZTo6c2V0VmFsdWUpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OnNldEFycmF5KToKKyAg
ICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5QmFzZTo6cHVzaFZhbHVlKToKKyAgICAgICAgKFdU
Rjo6SlNPTkltcGw6OkFycmF5QmFzZTo6cHVzaE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheUJhc2U6OnB1c2hBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJh
eU9mOjpBcnJheU9mKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5T2Y6
OmNhc3RlZEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5T2Y6
OmFkZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlPZjo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvSlNPTlZhbHVlcy5jcHA6CisgICAgICAgIChX
VEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNWYWx1ZSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpW
YWx1ZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQXJyYXkp
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OnBhcnNlSlNPTik6CisgICAgICAgIChX
VEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNP
TkltcGw6OlZhbHVlOjphc0RvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpW
YWx1ZTo6YXNJbnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjph
c1N0cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjphc09i
amVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjptZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldEJvb2xlYW4gY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0RG91YmxlIGNvbnN0
KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldEludGVnZXIgY29uc3Qp
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0U3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldE9iamVjdCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRBcnJheSBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRWYWx1ZSBjb25zdCk6CisgICAgICAg
IChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpPYmplY3RCYXNlKToKKyAgICAgICAgKFdURjo6
SlNPTkltcGw6OkFycmF5QmFzZTo6YXNBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpB
cnJheUJhc2U6OndyaXRlSlNPTiBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJh
eUJhc2U6OkFycmF5QmFzZSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6Omdl
dCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6Om1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6b3BlbkFjY2Vzc29y
cyk6IERlbGV0ZWQuCisgICAgICAgIFVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBg
T3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlciBmb3IgYGdldCpgL2BhcypgCisg
ICAgICAgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQg
Y2FuIGJlIGNvbmZpZGVudGx5IGFzc3VtZWQgdG8gZXhpc3QuCisgICAgICAgIFJlbW92ZSB1bnVz
ZWQgb3ZlcmxvYWRzIGFuZCBhbGxvdyBzdWJjbGFzc2VzIHRvIGNhbGwgYGFzKmAgaW5zdGVhZCBv
ZiBgb3BlbkFjY2Vzc29yc2AgYXMKKyAgICAgICAgdGhleSdyZSBlZmZlY3RpdmVseSB0aGUgc2Ft
ZSB0aGluZy4KKwogMjAyMC0wOS0wNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gQ1RGb250SXNTeXN0ZW1VSUZvbnQoKSBpcyBmYXN0
ZXIgdGhhbiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoKS9DVEZvbnRDb3B5Rm9udERl
c2NyaXB0b3IoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA3YTUzNWQ0ZDg0YzNlOWFiZjhiMjVmMGVhYTZkMjhi
ZWUzMjNiOWQuLmI3MTNlMGY4MWZmNjc4ZGI3MTEwNDU4OWUwNWFjN2Y1NTExNDgyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMzggQEAKKzIwMjAtMDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0
ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBl
eHByZXNzZWQgaW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAt
IHRoZSBlcnJvciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1
aXJlZCBwYXJhbWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9u
YWwgcGFyYW1ldGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJz
IHdlcmUgdGhlIHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBw
cmVwcm9jZXNzZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAg
ICAgIC0gb3B0aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJl
YWxseSBtYWtlIGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRl
ciBvZiBhcmd1bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBm
aXJzdCksIGFuZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2
ZQorICAgICAgICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2Vu
ZXJhdGVkIGluc3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJl
ZCBwYXJhbWV0ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBw
YXJhbWV0ZXJzIGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAg
LSBlbnVtIHBhcmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNr
ZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBj
b21tYW5kcyByZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUg
dHlwZXMvcnVsZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmds
ZSByZXR1cm4gb3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAg
IFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxy
ZWFkeSBhIHRyaS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5n
KClgLCBhbmQgc29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9u
YWw8U3RyaW5nPmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBl
ZGVmc2Agd2hlcmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisg
ICAgICAgIEpTT04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1w
bGVtZW50YXRpb24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJj
ZXNPYmplY3QuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3Bw
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yTmV0d29ya0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JO
ZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFn
ZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhl
YXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAq
IGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZU5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlTmV0d29ya0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZVJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVu
dGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJD
b25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJB
dWRpdEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJE
T01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQg
ZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1h
bmRMaW5lQVBJSG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQ
SUhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21K
U09OVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dE
aWFnbm9zdGljRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rv
cnkuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6
CisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
cjo6cGFyc2VNYW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RLZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETVV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNl
SlNPTk9iamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3Jt
YXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxh
eVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFp
clBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVz
ZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4g
b3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNh
biBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3du
CisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3Nv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2lu
dHMgdG8gYmUgY29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0
YzdmOGNiMGY3ODQ4OTlmNTc4ODk0Li5jZjZjYjFkODM2ZjhkY2MwYmJkMzA4ODJjZDMzOTUxMjE3
MThlZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTA5LTA4ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBt
b2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkRyaXZlcjo6Zmlyc3RXaW5kb3dIYW5kbGVJblJlc3VsdCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVy
OjpTZXNzaW9uOjpyZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6Z2V0Q3VycmVudFVSTCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246
OmdldFRpdGxlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxl
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlcyk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246Om5ld1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpz
d2l0Y2hUb1BhcmVudEZyYW1lKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VG9w
bGV2ZWxCcm93c2luZ0NvbnRleHRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
ZnVsbHNjcmVlbldpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0ZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpleHRyYWN0RWxlbWVudElEKToK
KyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpmaW5kRWxlbWVudHMpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpn
ZXRFbGVtZW50VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRU
YWdOYW1lKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6
CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZWxlbWVudENsaWNrKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZWxl
bWVudElzRWRpdGFibGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50Q2xl
YXIpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQYWdlU291cmNlKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNl
c3Npb246OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRO
YW1lZENvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6
CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnRha2VTY3JlZW5zaG90KToKKyAgICAgICAg
KiBTZXNzaW9uSG9zdC5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb25Ib3N0OjpkaXNw
YXRjaE1lc3NhZ2UpOgorICAgICAgICAqIFdlYkRyaXZlclNlcnZpY2UuY3BwOgorICAgICAgICAo
V2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpoYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgYEpT
T05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9u
YWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2Bhcypg
IHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJl
IGNvbmZpZGVudGx5IGtub3duCisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA3LTE1ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV1b
V2ViRHJpdmVyXSBHZW5lcmF0aW5nIFdlYkRyaXZlckF0b21zLmNwcCBpcyByYXJlbHkgZmFpbGlu
ZyBhcyAiSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCBqc21pbiIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hh
bmdlTG9nCmluZGV4IDk5Y2MxYzcwMWIxM2ViOGViZmY0YjgyNDY5OWU1NDgwODBlMDk2Y2QuLjk3
ZDM4MjkzNTRlODcwZDZiNThjN2MwZTg3ODRkYWVjNzBhMzE5OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91
c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJh
dGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIu
anM6CisgICAgICAgIChXSS5DU1NNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZm9yY2VkQXBwZWFyYW5j
ZSk6CisgICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBh
c3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycywgdGhlCisgICAgICAgIGBhcHBlYXJh
bmNlYCBwYXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJr
ZWQgYG9wdGlvbmFsYCBhcworICAgICAgICB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0
IGFuIGVtcHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW4gZW51bS4KKyAg
ICAgICAgQXMgc3VjaCwgcmV3b3JrIHRoZSBmcm9udGVuZCBsb2dpYyBmb3IgaW52b2tpbmcgYFBh
Z2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgdG8gaW5zdGVhZAorICAgICAgICBub3QgcHJvdmlkZSBh
biBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIGF0IGFsbCB3aGVuIHdhbnRpbmcgdG8gInVuc2V0IiBp
dC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmll
dy5qczoKKyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVh
dGVDb25zb2xlU2V0dGluZ3NWaWV3KToKKyAgICAgICAgTm93IHRoYXQgYWxsIGxvZ2dpbmcgY2hh
bm5lbHMgbWF0Y2hpbmcgYSBgQ29uc29sZS5DaGFubmVsU291cmNlYCBhcmUgcmV0dXJuZWQgaW5z
dGVhZCBvZgorICAgICAgICBqdXN0IHRoZSBoYXJkY29kZWQgbGlzdCwgY2hlY2sgZm9yIGEgbWF0
Y2hpbmcgYFdJLlVJU3RyaW5nYCBiZWZvcmUgc2hvd2luZyBhIGA8c2VsZWN0PmAuCisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDFjODc4MDc4MzQzYTMyMzdjZGM3YjgxNDJkOTRjMjU5NzJkYjlkNzcuLmRkM2VjNjA2YjYx
OGIzZmRiZTNjNzI4YjY3ZmJjZjhhNTEzZDhmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMjAtMDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91
c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQgaW4gY29kZSBpbiBhIHNv
bWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJvciBzdHJpbmcgd2FzIHRo
ZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0ZXJzIHdlcmUgYFRg
IG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIGBjb25z
dCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhlIHVuZGVybHlpbmcgdHlw
ZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIHRvCisgICAgICAgICAg
IHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNzZWQKKyAgICAgICAgIC0g
cmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcmV0dXJucyB3
ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtlIGZvciBlYXN5L29idmlv
dXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1bWVudHMgaXMKKyAgICAg
ICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFuZCB0aGF0IHRoZXJlIGFy
ZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAgICB0eXBlcy4KKworICAg
ICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGluc3BlY3RvciBwcm90b2Nv
bCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBgVGAgb3Ig
YFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBgT3B0aW9uYWw8
VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBhcmFtZXRlcnMgYXJlIHBy
ZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBp
ZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyByZXR1cm4gYEV4cGVjdGVk
PFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVsZXMgYWJvdmUKKyAgICAg
ICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4gb3IgYSBgc3RkOjp0dXBs
ZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRo
ZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRyaS1zdGF0ZSBvZiBgbnVs
bFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQgc29tZXRoaW5nIHNldCwg
c28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5nPmAuCisKKyAgICAgICAg
QWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hlcmV2ZXIgcG9zc2libGUg
dG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpTT04gYW5kIHRoZSBhY3R1
YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb246CisgICAgICAgIGBDb29yZGlu
YXRlU3lzdGVtYCBoYXMgYFBhZ2VgIGFuZCBgVmlld3BvcnRgIGVudW0gdmFsdWVzLCBidXQgYFdl
YkF1dG9tYXRpb25TZXNzaW9uYCBjaGVja3MKKyAgICAgICAgZm9yIGAiUGFnZSJgIGFuZCBgIkxh
eW91dFZpZXdwb3J0ImAuIEFkZCBhIGBMYXlvdXRWaWV3cG9ydGAgZW51bSB2YWx1ZSBub3cgdGhh
dCBlbnVtcyBhcmUKKyAgICAgICAgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFj
a2VuZCBkaXNwYWNoZXIgaGFuZGxlcnMgdG8gcHJlc2VydmUgZnVuY3Rpb25hbGl0eS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJB
Z2VudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb25NYWNyb3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0
b21hdGlvblNlc3Npb25NYWMubW06CisgICAgICAgIEVsaWRlZCBiYWNrZW5kIGRpc3BhdGNoZXIg
aGFuZGxlciBjaGFuZ2VzIGRlc2NyaWJlIGFib3ZlLgorCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KToKKyAgICAgICAgYEpTT05g
IGNsYXNzZXMgbm93IHVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxg
IGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNv
IHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNv
bmZpZGVudGx5IGtub3duCisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViSURMXSBSZWFsaWduIG91ciBJ
REwgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzIHdpdGggdGhvc2Ugc3BlY2lmaWVkIGluIFdlYklE
TApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKaW5k
ZXggNmI4NTNjOTMxZjFkY2U5MjUzYmJhYzA2YTk1ZTZhYWM1MjdjZjI1YS4uNzk2OGI5MGE3M2Iy
ODJkZjU5ODIyNTZhNmVkY2IyZDZlNTc0Mzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50VmFsdWUgPSBqc1RvSW5z
cGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXRJbmRleChnbG9iYWxPYmplY3QsIGkp
LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50VmFsdWUpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIGluc3BlY3RvckFy
cmF5LT5wdXNoVmFsdWUoV1RGTW92ZShlbGVtZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBp
bnNwZWN0b3JBcnJheS0+cHVzaFZhbHVlKGVsZW1lbnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBpbnNwZWN0b3JBcnJheTsKICAgICAg
ICAgfQpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBqc1RvSW5z
cGVjdG9yVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICAg
ICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3Qs
IG9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCBuYW1lKSwgbWF4RGVwdGgpOwogICAgICAgICAgICAg
aWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIGluc3BlY3Rvck9iamVjdC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwgV1RGTW92
ZShpbnNwZWN0b3JWYWx1ZSkpOworICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5zZXRWYWx1
ZShuYW1lLnN0cmluZygpLCBpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gaW5zcGVjdG9yT2JqZWN0OwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcAppbmRleCA1
NDUwZTJmM2MwMDljNjAxOGNmOWM1MzBhMDM2YzNkYjdhNjM0NTBlLi5hNTk2Mzk1Y2JlYTc5MWU3
MGJlM2UyMzYyZmU1N2Y0MzgzNGE1OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQg
QXN5bmNTdGFja1RyYWNlOjpkaWRDYW5jZWxBc3luY0NhbGwoKQogICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q2FuY2VsZWQ7CiB9CiAKLVJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4g
QXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CitSZWY8UHJvdG9j
b2w6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IEFzeW5jU3RhY2tUcmFjZTo6YnVpbGRJbnNwZWN0b3JP
YmplY3QoKSBjb25zdAogewogICAgIFJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFj
ZT4gdG9wU3RhY2tUcmFjZTsKICAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0YWNrVHJh
Y2U+IHByZXZpb3VzU3RhY2tUcmFjZTsKQEAgLTEyMCwxMyArMTIwLDEzIEBAIFJlZlB0cjxQcm90
b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rv
ck9iamVjdCgpIGNvCiAgICAgICAgICAgICB0b3BTdGFja1RyYWNlID0gcHJvdG9jb2xPYmplY3Qu
cHRyKCk7CiAKICAgICAgICAgaWYgKHByZXZpb3VzU3RhY2tUcmFjZSkKLSAgICAgICAgICAgIHBy
ZXZpb3VzU3RhY2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5wdHIo
KSk7CisgICAgICAgICAgICBwcmV2aW91c1N0YWNrVHJhY2UtPnNldFBhcmVudFN0YWNrVHJhY2Uo
cHJvdG9jb2xPYmplY3QuY29weVJlZigpKTsKIAogICAgICAgICBwcmV2aW91c1N0YWNrVHJhY2Ug
PSBXVEZNb3ZlKHByb3RvY29sT2JqZWN0KTsKICAgICAgICAgc3RhY2tUcmFjZSA9IHN0YWNrVHJh
Y2UtPm1fcGFyZW50LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiB0b3BTdGFja1RyYWNlOwor
ICAgIHJldHVybiB0b3BTdGFja1RyYWNlLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHZvaWQgQXN5
bmNTdGFja1RyYWNlOjp0cnVuY2F0ZShzaXplX3QgbWF4RGVwdGgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaAppbmRleCA2ZWRlNmM0MjVh
YmNhYTJkNjFlNWJiN2IxYmExOWUzMmU1NzIzYjZjLi40OTlhMWUwNWZkNTk0M2Y5ZmFlZGMzMGUw
YmQzZDIwZTBjNWRkYmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0FzeW5jU3RhY2tUcmFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvQXN5bmNTdGFja1RyYWNlLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZGlkRGlzcGF0Y2hBc3luY0NhbGwoKTsKICAgICB2b2lkIGRpZENhbmNlbEFzeW5jQ2FsbCgpOwog
Ci0gICAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rv
ck9iamVjdCgpIGNvbnN0OworICAgIFJlZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4g
YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKIAogICAgIH5Bc3luY1N0YWNrVHJhY2UoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVz
c2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdl
LmNwcAppbmRleCA1NDJjN2M3YjM3ZWZiMmU0YTc2YTMyYTAwOGQwNjNkYmM4MDVjZGQwLi45MGEx
ZGQ5NjA0NzBhNTRlZDNiMTQ2NmNlY2ZkZWZhODM0OTQ1ODBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcApAQCAtMjYxLDkgKzI2
MSwxMSBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVu
ZERpc3BhdGNoZXImIGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0
LT5hZGRJdGVtKFdURk1vdmUoaW5zcGVjdG9yVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkgPiAxKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
Y29sdW1ucywgImNvbnNvbGUiX3MsIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluc3BlY3Rvck9iamVjdCA9IGluamVj
dGVkU2NyaXB0LndyYXBPYmplY3QoY29sdW1ucywgImNvbnNvbGUiX3MsIHRydWUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JP
YmplY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChtX2FyZ3VtZW50cy0+YXJndW1lbnRBdChpKSwgImNvbnNvbGUiX3MsIGdlbmVyYXRlUHJldmll
dyk7CkBAIC0yNzEsNyArMjczLDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVu
ZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0
b3JWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJ
dGVtKGluc3BlY3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjg0LDcgKzI4Niw3IEBA
IHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0
Y2hlciYgY29uc29sZUZyb250ZW5kRGlzCiAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zcGVj
dG9yVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JWYWx1
ZSkpOworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVj
dG9yVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuY3BwCmluZGV4IGNjODQ5ZjA1MWZhNDA1MThhOWQxYTAzNDI5YmMyYjRkYmNmYjMxMDIu
LjY5MDlhMzM5ZWEyZTNkZTYwMGY1NWZkNmZlNDY4MzY0NjE3MWUwYTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC01Niw3
ICs1Niw3IEBAIEluamVjdGVkU2NyaXB0Ojp+SW5qZWN0ZWRTY3JpcHQoKQogewogfQogCi12b2lk
IEluamVjdGVkU2NyaXB0OjpleGVjdXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhlY3V0ZU9wdGlvbnMmJiBvcHRpb25zLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV4ZWN1dGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhlY3V0ZU9wdGlvbnMmJiBvcHRpb25zLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmpl
Y3QoKSwgImV4ZWN1dGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhh
bmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnVuY3Rpb25TdHJpbmcpOwpA
QCAtNjksNyArNjksNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpleGVjdXRlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cgogICAgIG1ha2VFdmFsQ2Fs
bChlcnJvclN0cmluZywgZnVuY3Rpb24sIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdElu
ZGV4KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBP
cHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZh
bHVhdGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBz
YXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHRPYmplY3QoKSwgImV2YWx1YXRlIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgp
LT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGV4
cHJlc3Npb24pOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0Ojphd2FpdFBy
b21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGJvb2wgcmV0dXJuQnlWYQogICAg
IG1ha2VBc3luY0NhbGwoZnVuY3Rpb24sIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBJ
bmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9u
YWw8Ym9vbD4mIHdhc1Rocm93bikKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9u
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3Rl
ZFNjcmlwdE9iamVjdCgpLCAiY2FsbEZ1bmN0aW9uT24iX3MsIGluc3BlY3RvckVudmlyb25tZW50
KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
b2JqZWN0SWQpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxG
dW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplCiAg
ICAgQVNTRVJUKCFzYXZlZFJlc3VsdEluZGV4KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6
ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1
ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNh
dmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdElu
ZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3Qg
U3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdh
c1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNh
dGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwg
ImV2YWx1YXRlT25DYWxsRnJhbWUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9u
Q2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEZyYW1lcyk7
CkBAIC0xMTksNTIgKzExOSw1NSBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2Fs
bEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlCiAgICAgbWFrZUV2
YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVz
dWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0
cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCkKK3ZvaWQgSW5q
ZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVi
dWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldEZ1bmN0
aW9uRGV0YWlscyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxl
cigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmdW5jdGlvbklkKTsKIAogICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAg
aWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpU
eXBlOjpPYmplY3QpIHsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JT
dHJpbmcpKQorICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOwor
ICAgICAgICBpZiAoIWVycm9yU3RyaW5nKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50
ZXJuYWwgZXJyb3IiX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGlt
ZUNhc3QoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNh
c3QocmVzdWx0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KQogewogICAgIERlcHJlY2F0ZWQ6
OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZnVu
Y3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5k
bGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKIAogICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYg
KCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpUeXBl
OjpPYmplY3QpIHsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJp
bmcpKQorICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAg
ICAgICBpZiAoIWVycm9yU3RyaW5nKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJu
YWwgZXJyb3IiX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNh
c3QoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5kaW5n
VHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3Qo
cmVzdWx0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVj
dElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpCit2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcmV2aWV3KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldFByZXZpZXciX3Ms
IGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiByZXN1bHRWYWx1ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVl
IHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewot
ICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAg
IGVycm9yU3RyaW5nID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJy
b3JTdHJpbmcpCiAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3Vs
dFZhbHVlKSk7CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJv
cGVydGllcywgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJl
dmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGll
cyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVj
dElkLCBib29sIG93blByb3BlcnRpZXMsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKIHsKICAgICBBU1NFUlQoZmV0
Y2hTdGFydCA+PSAwKTsKICAgICBBU1NFUlQoZmV0Y2hDb3VudCA+PSAwKTsKQEAgLTE4MiwxMCAr
MTg1LDEwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICBwcm9wZXJ0aWVzID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0
KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3Bl
cnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RGlz
cGxheWFibGVQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9v
bCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKIHsKICAgICBBU1NFUlQoZmV0Y2hT
dGFydCA+PSAwKTsKICAgICBBU1NFUlQoZmV0Y2hDb3VudCA+PSAwKTsKQEAgLTIwMiwxMCArMjA1
LDEwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHQp
KTsKKyAgICBwcm9wZXJ0aWVzID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50
ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQor
dm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2VuZXJh
dGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJu
YWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKIHsKICAgICBEZXByZWNhdGVkOjpT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldElu
dGVybmFsUHJvcGVydGllcyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxs
SGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0y
MTcsMTEgKzIyMCwxMiBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRp
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBhcnJheSA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNh
c3QoV1RGTW92ZShyZXN1bHQpKTsKLSAgICBwcm9wZXJ0aWVzID0gYXJyYXktPmxlbmd0aCgpID4g
MCA/IGFycmF5IDogbnVsbHB0cjsKKyAgICBhdXRvIGFycmF5ID0gUHJvdG9jb2w6OkJpbmRpbmdU
cmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURl
c2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
IChhcnJheS0+bGVuZ3RoKCkpCisgICAgICAgIHByb3BlcnRpZXMgPSBXVEZNb3ZlKGFycmF5KTsK
IH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK3Zv
aWQgSW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQog
ewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRjaENvdW50ID49
IDApOwpAQCAtMjM4LDEwICsyNDIsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVj
dGlvbkVudHJpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVudHJpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKHJlc3VsdCkpOworICAgIGVudHJpZXMgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+Pjo6cnVudGlt
ZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0
OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxs
QXJndW1lbnRKU09OLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmpl
Y3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJzYXZlUmVzdWx0Il9zLCBpbnNwZWN0b3JFbnZpcm9u
bWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KGNhbGxBcmd1bWVudEpTT04pOwpAQCAtMjUyLDkgKzI1Niw3IEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGNhbGxBcmd1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0SW5kZXgg
PSAwOwotICAgIGlmIChyZXN1bHQtPmFzSW50ZWdlcihyZXN1bHRJbmRleCkgJiYgcmVzdWx0SW5k
ZXggPiAwKQotICAgICAgICBzYXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0SW5kZXg7CisgICAgc2F2
ZWRSZXN1bHRJbmRleCA9IHJlc3VsdC0+YXNJbnRlZ2VyKCk7CiB9CiAKIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBD
YWxsRnJhbWVzKEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzKSBjb25zdApAQCAtMjY5LDggKzI3MSw4
IEBAIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5q
ZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzCiAgICAgICAgIHJldHVybiBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiAKICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHJlc3VsdCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNh
bGxSZXN1bHQudmFsdWUoKSk7Ci0gICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpBcnJheSkKLSAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJl
c3VsdCkpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpCisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1l
Pj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiB9
CkBAIC0yODgsMTEgKzI5MCwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QoSlNDOjpKU1ZhbHVlCiAgICAgaWYgKCFj
YWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0b0luc3BlY3Rv
clZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09iamVjdChyZXN1
bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRl
ZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0
KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAgICBhdXRv
IHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0
T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBQcm90b2NvbDo6
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNh
c3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBKU09OU3RyaW5nKGNv
bnN0IFN0cmluZyYganNvbiwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQ
cmV2aWV3KSBjb25zdApAQCAtMzEwLDExICszMTYsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0cmluZyhjb25zdCBT
dHIKICAgICBpZiAoY2FsbFJlc3VsdC52YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxs
UmVzdWx0LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9
IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7Cisg
ICAgaWYgKCFyZXN1bHRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGlt
ZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVl
LT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCiBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5q
ZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdGFibGUsIEpTQzo6SlNWYWx1ZSBj
b2x1bW5zKSBjb25zdApAQCAtMzMyLDExICszNDIsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUoSlNDOjpKU1ZhbHVl
IHQKICAgICBpZiAoIWNhbGxSZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSkt
PmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1
ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZh
bHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmpl
Y3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnBy
ZXZpZXdWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUpIGNvbnN0CkBAIC0zNDksMTEgKzM2MywxNSBA
QCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+IEluamVjdGVkU2NyaXB0
OjpwcmV2aWV3VmFsdWUoSlNDOjpKU1ZhbAogICAgIGlmICghY2FsbFJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7
Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3Qo
KSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBBU1NF
UlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVl
KCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVz
dWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3Rv
Y29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJl
bGVhc2VOb25OdWxsKCkpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpzZXRFdmVudFZhbHVl
KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuaAppbmRleCBjZGVlNDVmMmQ2YjMzNzdmMWUwNTIzY2ZlNDAxYWUy
OGJjZjJkZjZmLi5kNjNhZWYwMjU5OTY0ODg0NmM2ODM2MTVjYjU2YzY0M2MzODliMWE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCkBA
IC01OSwyMCArNTksMjAgQEAgcHVibGljOgogICAgICAgICBib29sIHNhdmVSZXN1bHQgeyBmYWxz
ZSB9OwogICAgICAgICBWZWN0b3I8SlNDOjpKU1ZhbHVlPiBhcmdzOwogICAgIH07Ci0gICAgdm9p
ZCBleGVjdXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhl
Y3V0ZU9wdGlvbnMmJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgZXhlY3V0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAKLSAgICB2b2lkIGV2YWx1
YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcm
IG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZh
bHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBldmFsdWF0
ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJl
dHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lk
IGF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBBc3luY0NhbGxD
YWxsYmFjayYmKTsKLSAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmLCBK
U0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1
ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmll
dywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCk7Ci0gICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25h
bDxib29sPiYgd2FzVGhyb3duKTsKLSAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsKLSAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhF
cnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVu
Y3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50IGZldGNoU3Rh
cnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOwot
ICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3Bl
cnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0SW50ZXJuYWxQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZp
ZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3Bl
cnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJpZXMo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVj
dEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcyk7Ci0gICAg
dm9pZCBzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRK
U09OLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRl
T25DYWxsRnJhbWUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFt
ZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFs
PGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAg
IHZvaWQgY2FsbEZ1bmN0aW9uT24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3
YXNUaHJvd24pOworICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsKKyAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OkpTVmFsdWUsIFJlZlB0cjxQcm90b2NvbDo6RGVi
dWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRQcmV2aWV3KFBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRQcm9w
ZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJv
b2wgb3duUHJvcGVydGllcywgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdl
bmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlBy
b3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9w
ZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGlu
dCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cmVzdWx0KTsKKyAgICB2b2lkIGdldEludGVybmFsUHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNj
cmlwdG9yPj4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcyk7Cisg
ICAgdm9pZCBzYXZlUmVzdWx0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
Y2FsbEFyZ3VtZW50SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAKICAg
ICBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IHdyYXBD
YWxsRnJhbWVzKEpTQzo6SlNWYWx1ZSkgY29uc3Q7CiAgICAgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IHdyYXBPYmplY3QoSlNDOjpKU1ZhbHVlLCBjb25zdCBTdHJpbmcm
IGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcgPSBmYWxzZSkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5j
cHAKaW5kZXggNzU2OWY1YjVkOTc1ODA4ODI0ZjY0ZWIyZWYwYTQwNmI2NGE0ZDkzOS4uMDkwMTY2
YTkxZmM2NmFkMWNkZTcxODE5NTNjZjQ3NzNmZjY2ZjA4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcApAQCAtMTAw
LDcgKzEwMCw3IEBAIFJlZjxKU09OOjpWYWx1ZT4gSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2Fs
bChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1CiAgICAgcmV0dXJuIHJlc3VsdEpT
T05WYWx1ZS5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6
bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwg
T3B0aW9uYWw8aW50PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0
QmFzZTo6bWFrZUV2YWxDYWxsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERl
cHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4m
IG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewog
ICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmluZywgbWFrZUNhbGwoZnVuY3Rpb24pLCBvdXRf
cmVzdWx0T2JqZWN0LCBvdXRfd2FzVGhyb3duLCBvdXRfc2F2ZWRSZXN1bHRJbmRleCk7CiB9CkBA
IC0xNDMsNyArMTQzLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VBc3luY0NhbGwo
RGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwKICAgICB9CiB9CiAKLXZv
aWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0
X3dhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCit2b2lkIElu
amVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0KFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+
JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1bHRJbmRleCkKIHsK
ICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJv
cjogcmVzdWx0IHZhbHVlIGlzIGVtcHR5Il9zOwpAQCAtMTUxLDQ5ICsxNTEsNDIgQEAgdm9pZCBJ
bmplY3RlZFNjcmlwdEJhc2U6OmNoZWNrQ2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIFJlZlB0cjxKU09OOjoKICAgICB9CiAKICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OlN0cmluZykgewotICAgICAgICByZXN1bHQtPmFzU3RyaW5nKGVycm9y
U3RyaW5nKTsKLSAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAg
ZXJyb3JTdHJpbmcgPSByZXN1bHQtPmFzU3RyaW5nKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRUdXBsZTsKLSAgICBpZiAoIXJlc3Vs
dC0+YXNPYmplY3QocmVzdWx0VHVwbGUpKSB7CisgICAgYXV0byByZXN1bHRUdXBsZSA9IHJlc3Vs
dC0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdFR1cGxlKSB7CiAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGFuIE9iamVjdCJfczsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVj
dDsKLSAgICBpZiAoIXJlc3VsdFR1cGxlLT5nZXRPYmplY3QoInJlc3VsdCJfcywgcmVzdWx0T2Jq
ZWN0KSkgeworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VHVwbGUtPmdldE9iamVjdCgi
cmVzdWx0Il9zKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkgewogICAgICAgICBlcnJvclN0cmlu
ZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlzIG5vdCBhIHBhaXIgb2YgdmFsdWUgYW5kIHdh
c1Rocm93biBmbGFnIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCB3YXNU
aHJvd24gPSBmYWxzZTsKLSAgICBpZiAoIXJlc3VsdFR1cGxlLT5nZXRCb29sZWFuKCJ3YXNUaHJv
d24iX3MsIHdhc1Rocm93bikpIHsKKyAgICBvdXRfd2FzVGhyb3duID0gcmVzdWx0VHVwbGUtPmdl
dEJvb2xlYW4oIndhc1Rocm93biJfcyk7CisgICAgaWYgKCFvdXRfd2FzVGhyb3duKSB7CiAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGEgcGFpciBv
ZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBvdXRfcmVzdWx0T2JqZWN0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKLQotICAgIGlmICh3YXNU
aHJvd24pCi0gICAgICAgIG91dF93YXNUaHJvd24gPSB3YXNUaHJvd247Ci0KLSAgICBpbnQgc2F2
ZWRSZXN1bHRJbmRleDsKLSAgICBpZiAocmVzdWx0VHVwbGUtPmdldEludGVnZXIoInNhdmVkUmVz
dWx0SW5kZXgiX3MsIHNhdmVkUmVzdWx0SW5kZXgpKQotICAgICAgICBvdXRfc2F2ZWRSZXN1bHRJ
bmRleCA9IHNhdmVkUmVzdWx0SW5kZXg7CisgICAgb3V0X3Jlc3VsdE9iamVjdCA9IFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgb3V0X3NhdmVkUmVzdWx0
SW5kZXggPSByZXN1bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcyk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8
SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29uc3QgQXN5bmNDYWxsQ2FsbGJhY2smIGNhbGxiYWNrKQog
ewotICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4gcmVzdWx0T2JqZWN0OwogICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKICAgICBPcHRp
b25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAgICBjaGVja0NhbGxSZXN1bHQoZXJyb3JT
dHJpbmcsIHJlc3VsdCwgcmVzdWx0T2JqZWN0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogCi0gICAgY2FsbGJhY2soZXJyb3JTdHJpbmcsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgd2Fz
VGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICBjYWxsYmFjayhlcnJvclN0cmluZywgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1
bHRJbmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCmluZGV4IDgx
MjNmMWQ2NmU5YjEzYWQ0YWQwZWNiMWEzY2FkMzNmNTk3NmQ1ZDcuLmY0ZTZhMGZlZWE0MTFjZDA1
ODU5ODRiZDc0YWNjNGIyNGFhOGVkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaApAQCAtNDcsOCArNDcsNyBAQCBjbGFz
cyBTY3JpcHRGdW5jdGlvbkNhbGw7CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLXR5cGVkZWYgV1RGOjpGdW5jdGlvbjx2b2lkKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFs
PGJvb2w+JiwgT3B0aW9uYWw8aW50PiYpPiBBc3luY0NhbGxDYWxsYmFjazsKK3VzaW5nIEFzeW5j
Q2FsbENhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmLCBPcHRpb25hbDxib29s
PiYmLCBPcHRpb25hbDxpbnQ+JiYpPjsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5qZWN0
ZWRTY3JpcHRCYXNlIHsKIHB1YmxpYzoKQEAgLTY5LDExICs2OCwxMSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0T2JqZWN0JiBpbmplY3RlZFNjcmlwdE9iamVjdCgp
IGNvbnN0OwogICAgIEV4cGVjdGVkPEpTQzo6SlNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNlcHRp
b24+PiBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJikgY29uc3Q7CiAgICAgUmVmPEpTT046OlZhbHVlPiBtYWtlQ2FsbChEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwmKTsKLSAgICB2b2lkIG1ha2VFdmFsQ2FsbChFcnJvclN0cmlu
ZyYsIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIG1ha2VFdmFs
Q2FsbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVj
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCk7CiAgICAgdm9pZCBtYWtlQXN5bmNDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYsIEFzeW5jQ2FsbENhbGxiYWNrJiYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgY2hlY2tD
YWxsUmVzdWx0KEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25h
bDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAg
ICB2b2lkIGNoZWNrQ2FsbFJlc3VsdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgY2hlY2tBc3luY0NhbGxSZXN1bHQoUmVmUHRy
PEpTT046OlZhbHVlPiByZXN1bHQsIGNvbnN0IEFzeW5jQ2FsbENhbGxiYWNrJik7CiAKICAgICBT
dHJpbmcgbV9uYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDkwYWY3YThmM2EzMzA1NjE2YjQ5
NWU1YjNjYWRmMDUzMzExZTIzNTAuLmZjY2M4ZWYxOTg2ZDg4NmQ3NTYwMGY3MzYxMDBhN2ViMzk2
YjUwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTEwMiwxOSArMTAyLDE5IEBAIGludCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIAogSW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmpl
Y3RlZFNjcmlwdEZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7Ci0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXJzZWRPYmplY3RJZDsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04ob2JqZWN0SWQsIHBhcnNlZE9iamVjdElkKSkKKyAgICBhdXRvIHBhcnNlZE9iamVj
dElkID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCk7CisgICAgaWYgKCFwYXJzZWRP
YmplY3RJZCkKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgaWYgKCFwYXJzZWRPYmplY3RJZC0+YXNP
YmplY3QocmVzdWx0T2JqZWN0KSkKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHBhcnNlZE9iamVj
dElkLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQogICAgICAgICByZXR1cm4g
SW5qZWN0ZWRTY3JpcHQoKTsKIAotICAgIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCA9IDA7Ci0gICAg
aWYgKCFyZXN1bHRPYmplY3QtPmdldEludGVnZXIoImluamVjdGVkU2NyaXB0SWQiX3MsIGluamVj
dGVkU2NyaXB0SWQpKQorICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHRJZCA9IHJlc3VsdE9iamVjdC0+
Z2V0SW50ZWdlcigiaW5qZWN0ZWRTY3JpcHRJZCJfcyk7CisgICAgaWYgKCFpbmplY3RlZFNjcmlw
dElkKQogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIAotICAgIHJldHVybiBtX2lk
VG9JbmplY3RlZFNjcmlwdC5nZXQoaW5qZWN0ZWRTY3JpcHRJZCk7CisgICAgcmV0dXJuIG1faWRU
b0luamVjdGVkU2NyaXB0LmdldCgqaW5qZWN0ZWRTY3JpcHRJZCk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RH
cm91cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKaW5kZXggNjkzZThiMjVjNzM3NzgzNDBl
ODM5NDA0Njc4NmQ5MzE4YThhMDkyNC4uZGJhMTdkNGE2NWE3MGQzNTg1MWM4YzUxOWFkMWVjYmQ1
NzE3NTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKQEAgLTY4LDcgKzY4LDcgQEAg
dm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kRmFpbHVyZShjb25zdCBF
cnJvclN0cmluZyYgZXJyb3IpCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5k
U3VjY2VzcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdlKQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6T2JqZWN0
PiYmIHBhcnRpYWxNZXNzYWdlKQogewogICAgIGlmIChtX2FscmVhZHlTZW50KQogICAgICAgICBy
ZXR1cm47CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogCiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJyb3Jz
LnNpemUoKSk7CiAKLSAgICBsb25nIHJlcXVlc3RJZCA9IDA7CisgICAgaW50IHJlcXVlc3RJZCA9
IDA7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWVzc2FnZU9iamVjdDsKIAogICAgIHsKQEAg
LTExNSw0NiArMTE1LDUwIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgLy8gdGhlIG91dGVyIHJlcXVlc3QncyBpZCBqdXN0
IGJlY2F1c2UgdGhlIGlubmVyIHJlcXVlc3QgaXMgYm9ndXMuCiAgICAgICAgIFNldEZvclNjb3Bl
PE9wdGlvbmFsPGxvbmc+PiBzY29wZWRSZXF1ZXN0SWQobV9jdXJyZW50UmVxdWVzdElkLCBXVEY6
Om51bGxvcHQpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGFyc2VkTWVzc2FnZTsK
LSAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIHBhcnNlZE1lc3Nh
Z2UpKSB7CisgICAgICAgIGF1dG8gcGFyc2VkTWVzc2FnZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04obWVzc2FnZSk7CisgICAgICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihQYXJzZUVycm9yLCAiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04g
Zm9ybWF0Il9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXBhcnNlZE1lc3NhZ2UtPmFzT2Jq
ZWN0KG1lc3NhZ2VPYmplY3QpKSB7CisgICAgICAgIG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNz
YWdlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKICAgICAgICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUg
YSBKU09OaWZpZWQgb2JqZWN0Il9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6
VmFsdWU+IHJlcXVlc3RJZFZhbHVlOwotICAgICAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZh
bHVlKCJpZCJfcywgcmVxdWVzdElkVmFsdWUpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkVmFs
dWUgPSBtZXNzYWdlT2JqZWN0LT5nZXRWYWx1ZSgiaWQiX3MpOworICAgICAgICBpZiAoIXJlcXVl
c3RJZFZhbHVlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1
ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgICAgIHNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIXJlcXVlc3RJZFZhbHVlLT5hc0ludGVnZXIocmVxdWVzdElkKSkgeworICAgICAgICBh
dXRvIHJlcXVlc3RJZEludCA9IHJlcXVlc3RJZFZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAg
aWYgKCFyZXF1ZXN0SWRJbnQpIHsKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52
YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgaW50ZWdlciJf
cyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKKyAgICAgICAgcmVxdWVzdElkID0gKnJlcXVlc3RJZEludDsKICAgICB9
CiAKICAgICB7CiAgICAgICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxlZCByZS1lbnRyYW50bHkgZnJv
bSBhIG5lc3RlZCBydW4gbG9vcCwgc28gcmVzdG9yZSB0aGUgcHJldmlvdXMgaWQuCiAgICAgICAg
IFNldEZvclNjb3BlPE9wdGlvbmFsPGxvbmc+PiBzY29wZWRSZXF1ZXN0SWQobV9jdXJyZW50UmVx
dWVzdElkLCByZXF1ZXN0SWQpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWV0aG9k
VmFsdWU7Ci0gICAgICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoIm1ldGhvZCJfcywg
bWV0aG9kVmFsdWUpKSB7CisgICAgICAgIGF1dG8gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0
LT5nZXRWYWx1ZSgibWV0aG9kIl9zKTsKKyAgICAgICAgaWYgKCFtZXRob2RWYWx1ZSkgewogICAg
ICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHBy
b3BlcnR5IHdhc24ndCBmb3VuZCJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIG1ldGhv
ZFN0cmluZzsKLSAgICAgICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcobWV0aG9kU3RyaW5n
KSkgeworICAgICAgICBhdXRvIG1ldGhvZFN0cmluZyA9IG1ldGhvZFZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICBpZiAoIW1ldGhvZFN0cmluZykgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11
c3QgYmUgc3RyaW5nIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xODQsMTIgKzE4OCwxMiBAQCB2b2lkIEJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB9CiAKIC8vIEZJWE1FOiByZW1v
dmUgdGhpcyBmdW5jdGlvbiB3aGVuIGxlZ2FjeSBJbnNwZWN0b3JPYmplY3Qgc3ltYm9scyBhcmUg
bm8gbG9uZ2VyIG5lZWRlZCA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+Lgotdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHJlc3VsdCkKK3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShs
b25nIHJlcXVlc3RJZCwgUmVmPEpTT046Ok9iamVjdD4mJiByZXN1bHQpCiB7CiAgICAgc2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CiB9CiAKLXZvaWQgQmFj
a2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVz
cG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sKQog
ewogICAgIEFTU0VSVCghbV9wcm90b2NvbEVycm9ycy5zaXplKCkpOwogCkBAIC0yNzAsNzQgKzI3
NCw2NCBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKE9wdGlv
bmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotVCBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kLCBU
IGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5jdGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiBhc01l
dGhvZCwgY29uc3QgY2hhciogdHlwZU5hbWUpCitUIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9w
ZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wg
cmVxdWlyZWQsIHN0ZDo6ZnVuY3Rpb248VChKU09OOjpWYWx1ZSYpPiBjb252ZXJ0ZXIsIGNvbnN0
IGNoYXIqIHR5cGVOYW1lKQogewotICAgIFQgcmVzdWx0KGRlZmF1bHRWYWx1ZSk7Ci0gICAgLy8g
b3V0X29wdGlvbmFsVmFsdWVGb3VuZCBzaWduYWxzIHRvIHRoZSBjYWxsZXIgd2hldGhlciBhbiBv
cHRpb25hbCBwcm9wZXJ0eSB3YXMgZm91bmQuCi0gICAgLy8gaWYgb3V0X29wdGlvbmFsVmFsdWVG
b3VuZCA9PSBudWxscHRyLCB0aGVuIHRoaXMgaXMgYSByZXF1aXJlZCBwcm9wZXJ0eS4KLSAgICBp
ZiAob3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKLSAgICAgICAgKm91dF9vcHRpb25hbFZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBUIHJlc3VsdDsKIAogICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
IGlmICghb3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAg
ICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgbWFrZVN0cmluZygiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBw
YXJhbWV0ZXIgJyIsIG5hbWUsICInIHdpdGggdHlwZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBvYmpl
Y3QtPmZpbmQobmFtZSk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gb2JqZWN0LT5lbmQoKSkgewot
ICAgICAgICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQpCisgICAgICAgIGlmIChyZXF1aXJl
ZCkKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Oklu
dmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0eXBl
ICciLCB0eXBlTmFtZSwgIicgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgaWYgKCFhc01ldGhvZCgqZmluZFJlc3VsdC0+dmFsdWUsIHJlc3Vs
dCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3Jvbmcg
dHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9CisgICAgcmVzdWx0ID0gY29udmVydGVyKGZpbmRSZXN1bHQtPnZhbHVlKTsK
IAotICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQotICAgICAgICAqb3V0X29wdGlvbmFs
VmFsdWVGb3VuZCA9IHRydWU7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBh
cmFtZXRlciAnIiwgbmFtZSwgIicgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyIsIHR5cGVO
YW1lLCAiJy4iKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBjYXN0
VG9JbnRlZ2VyKEpTT046OlZhbHVlJiB2YWx1ZSwgaW50JiByZXN1bHQpIHsgcmV0dXJuIHZhbHVl
LmFzSW50ZWdlcihyZXN1bHQpOyB9Ci1zdGF0aWMgYm9vbCBjYXN0VG9OdW1iZXIoSlNPTjo6VmFs
dWUmIHZhbHVlLCBkb3VibGUmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNEb3VibGUocmVzdWx0
KTsgfQotCi1pbnQgQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlvbmFsPGJv
b2w+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKEpTT046Ok9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3Bl
cnR5VmFsdWU8aW50PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIDAsICZjYXN0VG9JbnRlZ2Vy
LCAiSW50ZWdlciIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGJvb2w+
PihvYmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQm9vbGVhbiwgIkJvb2xl
YW4iKTsKIH0KIAotZG91YmxlIEJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlv
bmFsPGludD4gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0
UHJvcGVydHlWYWx1ZTxkb3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgMCwgJmNhc3RU
b051bWJlciwgIk51bWJlciIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFs
PGludD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNJbnRlZ2VyLCAi
SW50ZWdlciIpOwogfQogCi1TdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09O
OjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQor
T3B0aW9uYWw8ZG91YmxlPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEpTT046Ok9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsICIi
LCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7CisgICAgcmV0dXJuIGdldFByb3Bl
cnR5VmFsdWU8T3B0aW9uYWw8ZG91YmxlPj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046
OlZhbHVlOjphc0RvdWJsZSwgIk51bWJlciIpOwogfQogCi1ib29sIEJhY2tlbmREaXNwYXRjaGVy
OjpnZXRCb29sZWFuKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQpCitTdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09O
OjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewot
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGJvb2w+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3Vu
ZCwgZmFsc2UsICZKU09OOjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOworICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZz4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046
OlZhbHVlOjphc1N0cmluZywgIlN0cmluZyIpOwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitSZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tl
bmREaXNwYXRjaGVyOjpnZXRWYWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJl
ZlB0cjxKU09OOjpPYmplY3Q+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZK
U09OOjpWYWx1ZTo6YXNPYmplY3QsICJPYmplY3QiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZTxSZWZQdHI8SlNPTjo6VmFsdWU+PihvYmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6
VmFsdWU6OmFzVmFsdWUsICJWYWx1ZSIpOwogfQogCi1SZWZQdHI8SlNPTjo6QXJyYXk+IEJhY2tl
bmREaXNwYXRjaGVyOjpnZXRBcnJheShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorUmVmUHRyPEpTT046Ok9iamVjdD4gQmFja2VuZERp
c3BhdGNoZXI6OmdldE9iamVjdChKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0
cjxKU09OOjpBcnJheT4+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046
OlZhbHVlOjphc0FycmF5LCAiQXJyYXkiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxS
ZWZQdHI8SlNPTjo6T2JqZWN0Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVl
Ojphc09iamVjdCwgIk9iamVjdCIpOwogfQogCi1SZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRWYWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKQorUmVmUHRyPEpTT046OkFycmF5PiBCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0QXJyYXkoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNP
Tjo6VmFsdWU+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZKU09OOjpWYWx1
ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRy
PEpTT046OkFycmF5Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0Fy
cmF5LCAiQXJyYXkiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmgKaW5kZXggOTVkOWQ4MTE4OGU3MzVlOGYxYjcwY2MwZGVlZTI2ODJjYjY3MTRm
MC4uMDJjOTZkNzI2MzhjMjIyZjAzMGQxNDkxY2M5YjkyNjJiMDhiZWNiYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaApAQCAtMjksOCArMjksMTAgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNs
dWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTU5LDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzQWN0
aXZlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2VudCA9IHRy
dWU7IH0KIAotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
OworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYpOwogICAgICAg
ICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJik7CiAKICAgICBwcml2YXRlOgpA
QCAtODcsMjggKzg5LDI3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlIHRoYXQgJ3VudXNlZCcgaXMg
YSB3b3JrYXJvdW5kIHNvIHRoZSBjb21waWxlciBjYW4gcGljayB0aGUgcmlnaHQgc2VuZFJlc3Bv
bnNlIGJhc2VkIG9uIGFyaXR5LgogICAgIC8vIFdoZW4gPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc5
ODQ3PiBpcyBmaXhlZCBvciB0aGlzIGNsYXNzIGlzIHJlbmFtZWQgZm9yIHRoZSBKU09OOjpPYmpl
Y3QgY2FzZSwKICAgICAvLyB0aGVuIHRoaXMgYWx0ZXJuYXRlIG1ldGhvZCB3aXRoIGEgZHVtbXkg
cGFyYW1ldGVyIGNhbiBiZSByZW1vdmVkIGluIGZhdm9yIG9mIHRoZSBvbmUgd2l0aG91dCBpdC4K
LSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiByZXN1bHQsIGJvb2wgdW51c2VkKTsKLSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZXN1bHQpOworICAgIHZvaWQgc2VuZFJl
c3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1
bnVzZWQpOworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIHJlc3VsdCk7CiAgICAgdm9pZCBzZW5kUGVuZGluZ0Vycm9ycygpOwogCiAgICAg
dm9pZCByZXBvcnRQcm90b2NvbEVycm9yKENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpOwogICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihPcHRpb25hbDxsb25n
PiByZWxhdGVkUmVxdWVzdElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgV1RGX0lOVEVSTkFMCi0g
ICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogb3V0X29wdGlvbmFsVmFsdWVGb3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rp
b248Ym9vbChKU09OOjpWYWx1ZSYsIFQmKT4sIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKLQotICAg
IGludCBnZXRJbnRlZ2VyKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCk7Ci0gICAgZG91YmxlIGdldERvdWJsZShKU09OOjpPYmplY3QqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFN0cmluZyBnZXRTdHJpbmcoSlNP
Tjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBi
b29sIGdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGdldFZhbHVlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gZ2V0T2JqZWN0KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBnZXRBcnJheShKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOworICAgIE9w
dGlvbmFsPGJvb2w+IGdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sIHJlcXVpcmVkKTsKKyAgICBPcHRpb25hbDxpbnQ+IGdldEludGVnZXIoSlNPTjo6T2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBPcHRpb25hbDxk
b3VibGU+IGdldERvdWJsZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wg
cmVxdWlyZWQpOworICAgIFN0cmluZyBnZXRTdHJpbmcoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGdldFZh
bHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7Cisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZ2V0T2JqZWN0KEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBnZXRB
cnJheShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwog
CiBwcml2YXRlOgogICAgIEJhY2tlbmREaXNwYXRjaGVyKFJlZjxGcm9udGVuZFJvdXRlcj4mJik7
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0UHJvcGVydHlWYWx1ZShKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQsIHN0ZDo6ZnVuY3Rp
b248VChKU09OOjpWYWx1ZSYpPiBjb252ZXJ0ZXIsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKKwog
ICAgIFJlZjxGcm9udGVuZFJvdXRlcj4gbV9mcm9udGVuZFJvdXRlcjsKICAgICBIYXNoTWFwPFN0
cmluZywgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqPiBtX2Rpc3BhdGNoZXJzOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oCmluZGV4IGQ3MDEwYTVjNjJlODYzM2E0ZGQwMWIyYzAwNjA1YmFhY2M5Yzhj
NzkuLjU4NzdlMGQ3NDEwODJmNzExYTVmZmVkNDM1Y2VmYzBmMjEzMTMzNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oCkBAIC0yNywxMiArMjcsMTkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogbmFtZXNwYWNlIFByb3RvY29sIHsKIAordXNpbmcgRXJyb3JTdHJp
bmcgPSBTdHJpbmc7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgRXJyb3JTdHJpbmdP
ciA9IEV4cGVjdGVkPFQsIEVycm9yU3RyaW5nPjsKKwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBCaW5kaW5nVHJhaXRzOwogCiB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1
Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CkBAIC00NCwyOSArNTEsMjMgQEAgdGVtcGxhdGU8
SlNPTjo6VmFsdWU6OlR5cGUgdHlwZT4gc3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJy
YXlPZjxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8SlNPTjo6QXJyYXlPZjxUPj4gcnVudGltZUNh
c3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQorICAgIHN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxUPj4gcnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGFycmF5OwotICAgICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShh
cnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRl
ZCk7Ci0gICAgICAgIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsKKyAg
ICAgICAgYXV0byBhcnJheSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEJpbmRpbmdUcmFp
dHM8SlNPTjo6QXJyYXlPZjxUPj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5Lmdl
dCgpKTsKICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEpTT046OkFycmF5T2Y8VD4pID09
IHNpemVvZihKU09OOjpBcnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTT046OkFycmF5T2Y8VD4qPihzdGF0aWNfY2FzdDxKU09OOjpBcnJheUJh
c2UqPihhcnJheS5nZXQoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEpTT046OkFycmF5T2Y8VD4+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpBcnJheUJhc2U+
KGFycmF5LnJlbGVhc2VOb25OdWxsKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBhc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiAgICAgeworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAg
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFycmF5OwotICAgICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJh
eSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
CisgICAgICAgIGF1dG8gYXJyYXkgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBBU1NFUlQo
YXJyYXkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgp
OyBpKyspCi0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShhcnJheS0+Z2V0KGkpLmdldCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkucHRyKCkp
OworI2VuZGlmCiAgICAgfQogfTsKIApAQCAtODUsNiArODYsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBCaW5kaW5nVHJhaXRzPGludD4gOiBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEpTT046OlZhbHVl
OjpUeXBlOgogCiB9CiAKLXVzaW5nIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzOwotCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0NmQw
YjY5NDMyOGVlMDQxNzY2NTAzZmU1NmY5ZDZjMjI5OTc1N2M2Li5iYzYzNjlhMGMzOWQ5YmI2NDA5
NWY1ZDg3MDQ0ZDYwNzUzY2Q0ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCkBA
IC0xMzYsMjggKzEzNiwyMiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6cHJv
ZmlsZUVuZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJgogCiB2b2lkIEpTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudDo6c3RhcnRDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJy
b3JTdHJpbmcgaWdub3JlZDsKLQogICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAg
bV9wcm9maWxlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSA9IG1fZGVidWdnZXJBZ2VudC0+
YnJlYWtwb2ludHNBY3RpdmUoKTsKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3Bv
aW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0
QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChtX3NjcmlwdFByb2Zp
bGVyQWdlbnQpIHsKLSAgICAgICAgY29uc3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0g
ICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkLCAmaW5j
bHVkZVNhbXBsZXMpOwotICAgIH0KKyAgICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50KQorICAg
ICAgICBtX3NjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7CiB9CiAKIHZv
aWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpzdG9wQ29uc29sZVByb2ZpbGUoKQogewot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0KICAgICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50
KQotICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsK
KyAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKIAogICAgIGlm
IChtX2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2lu
dHNBY3RpdmUoaWdub3JlZCwgbV9wcm9maWxlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSk7
CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUobV9wcm9maWxl
UmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3RD
b25zb2xlQ2xpZW50Ojp0YWtlSGVhcFNuYXBzaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CmluZGV4IGQ0ZGI1NjNlYmQ3NjUzMjY2MDRmNTEyYzMxZTlkYjI4NmQxMDgzZjQuLmE2MGYyNWQ0
MzdmYmU5ZmRmY2U2YmE1OGQzZTgyYzI2ZGQ1NmQ2M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTIzMSw5ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiAgICAgaWYgKG1f
cGF1c2VBZnRlckluaXRpYWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxp
emF0aW9uID0gZmFsc2U7CiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAg
ZW5zdXJlRGVidWdnZXJBZ2VudCgpLmVuYWJsZShpZ25vcmVkKTsKLSAgICAgICAgZW5zdXJlRGVi
dWdnZXJBZ2VudCgpLnBhdXNlKGlnbm9yZWQpOworICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50
KCkuZW5hYmxlKCk7CisgICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5wYXVzZSgpOwogICAg
IH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4
IDViOWE3MTU0MDg1MDg2NDFjYTA2MWFlY2Y4ZjAxMTg0NmY3MTA0NDguLjg2ODZkNjk0MWI3ODQ3
OTk1YjJkZmZkZDY3OGI2NmQzYjQ4MWRkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTU0LDQ0
ICs1NCw0OSBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1h
bmRzLmNsZWFyKCk7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdu
b3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdl
bnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3BlbmRp
bmdJbnNwZWN0RGF0YS5maXJzdCkKLSAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0
YS5maXJzdC5jb3B5UmVmKCksIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5jb3B5UmVmKCkp
OworICAgICAgICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LnJlbGVhc2VOb25O
dWxsKCksIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIGZvciAoYXV0byYgdGVzdENvbW1hbmQgOiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5k
cykKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQodGVzdENvbW1hbmQpOwogCiAgICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xl
YXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
QWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmluaXRpYWxp
emVkKCkKIHsKICAgICBtX2Vudmlyb25tZW50LmZyb250ZW5kSW5pdGlhbGl6ZWQoKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGhpbnRzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChSZWY8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgaGludHMpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkgewotICAgICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+aW5zcGVjdChvYmplY3RUb0luc3BlY3QsIGhpbnRzKTsKKyAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmluc3BlY3QoV1RGTW92ZShvYmplY3QpLCBXVEZNb3ZlKGhpbnRz
KSk7CiAgICAgICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gbnVsbHB0cjsKICAgICAg
ICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25kID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gb2JqZWN0VG9JbnNw
ZWN0OwotICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZCA9IGhpbnRzOworICAgIG1fcGVu
ZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gV1RGTW92ZShvYmplY3QpOworICAgIG1fcGVuZGluZ0lu
c3BlY3REYXRhLnNlY29uZCA9IFdURk1vdmUoaGludHMpOwogfQogCiB2b2lkIEluc3BlY3RvckFn
ZW50OjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2NyaXB0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckFnZW50LmgKaW5kZXggODU4YzY5YWMyZWI4NmRjMTgyOGEyZjNlMTI2NzE1ODA5ZTg5ZjM1YS4u
NTk0Y2VlNzE3NDA2MDU5OWM4OTkzNmQwYzI3MzZhMTUzYWEyNzNkNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5o
CkBAIC00MCwyNiArNDAsMjQgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBCYWNrZW5k
RGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckVudmlyb25tZW50OwogCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JB
Z2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVj
dG9yQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckFnZW50KCkgZmluYWw7Cisg
ICAgfkluc3BlY3RvckFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmRE
aXNwYXRjaGVyKikgZmluYWw7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8v
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0g
ICAgdm9pZCBpbml0aWFsaXplZChFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGRpc2FibGUoKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbml0
aWFsaXplZCgpOwogCiAgICAgLy8gQ29tbWFuZExpbmVBUEkKLSAgICB2b2lkIGluc3BlY3QoUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpbnRzKTsKKyAgICB2b2lkIGluc3BlY3QoUmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGludHMp
OwogCiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2Ny
aXB0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcAppbmRleCAwMGIxZWNjMWFmNDgwNzBl
ZmVkYzc2NmEzYmE2ZmY1YjZmNGJhNzAwLi4yZjlmOGYwNTljYjEzOTEzYWZhMzBmNjQ5NzdlMDMz
YjUzNGM5NDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcApAQCAtNTcsNDEgKzU3LDQx
IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50Ojpz
ZXR1cChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6
c2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBl
eGVjdXRpb25Db250ZXh0SWQpCiB7Ci0gICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBjYWxsaW5nIHNldHVw
IGFnYWluIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKIAotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOwor
ICAgIGlmIChoYXNBY3RpdmVBdWRpdCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Ik11c3QgY2FsbCB0ZWFyZG93biBiZWZvcmUgY2FsbGluZyBzZXR1cCBhZ2FpbiJfcyk7CisKKyAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChl
cnJvclN0cmluZywgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBpbmplY3RlZFNjcmlwdC5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWds
b2JhbE9iamVjdCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV4ZWN1dGlvbiBz
dGF0ZSBvZiBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGV4ZWN1dGlvbiBzdGF0ZSBvZiBpbmplY3Rl
ZCBzY3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfcyk7CiAKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bE9iamVjdCk7CiAKICAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZS5zZXQodm0s
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCkpOwotICAgIGlmICghbV9pbmplY3Rl
ZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxl
IHRvIGNvbnN0cnVjdCBpbmplY3RlZCBXZWJJbnNwZWN0b3JBdWRpdCBvYmplY3QuIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0
VmFsdWUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGNvbnN0cnVj
dCBpbmplY3RlZCBXZWJJbnNwZWN0b3JBdWRpdCBvYmplY3QuIl9zKTsKIAogICAgIHBvcHVsYXRl
QXVkaXRPYmplY3QoZ2xvYmFsT2JqZWN0LCBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1
ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1
bihjb25zdCBTdHJpbmcmIHRlc3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRp
b25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVj
dXRpb25Db250ZXh0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgZnVu
Y3Rpb25TdHJpbmc7CiAgICAgZnVuY3Rpb25TdHJpbmcuYXBwZW5kTGl0ZXJhbCgiKGZ1bmN0aW9u
KFdlYkluc3BlY3RvckF1ZGl0KSB7IFwidXNlIHN0cmljdFwiOyByZXR1cm4gZXZhbChgKCIpOwpA
QCAtMTAzLDYgKzEwMyw4IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zCiAgICAgaWYgKG1faW5q
ZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKQogICAgICAgICBvcHRpb25zLmFyZ3MgPSB7IG1f
aW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlLmdldCgpIH07CiAKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+
IHdhc1Rocm93bjsKICAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAgICBK
U0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1w
b3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKQEAgLTExMywx
NiArMTE1LDIxIEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zCiAgICAgaW5qZWN0ZWRTY3JpcHQu
ZXhlY3V0ZShlcnJvclN0cmluZywgZnVuY3Rpb25TdHJpbmcudG9TdHJpbmcoKSwgV1RGTW92ZShv
cHRpb25zKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogCiAgICAgdW5t
dXRlQ29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93bikgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckF1ZGl0
QWdlbnQ6OnRlYXJkb3duKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckF1ZGl0QWdlbnQ6OnRlYXJkb3duKCkKIHsKLSAgICBp
ZiAoIWhhc0FjdGl2ZUF1ZGl0KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBjYWxs
IHNldHVwIGJlZm9yZSBjYWxsaW5nIHRlYXJkb3duIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghaGFzQWN0aXZlQXVkaXQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNdXN0IGNhbGwgc2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRvd24iX3MpOwogCiAgICAg
bV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUuY2xlYXIoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yQXVkaXRBZ2VudDo6aGFzQWN0aXZlQXVkaXQoKSBjb25z
dApAQCAtMTM5LDcgKzE0Niw3IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVB
dWRpdE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgSlNDOjpW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CiAKLSAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJWZXJzaW9uIiksIEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29s
OjpBdWRpdDo6VkVSU0lPTikpOworICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlNDOjpKU1ZhbHVlKFByb3Rv
Y29sOjpBdWRpdDo6VkVSU0lPTikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckF1ZGl0QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckF1ZGl0QWdlbnQuaAppbmRleCA1YjZkOGFhYjcyMjYzZjE4YWE2NDEwNzg1YzAxYzli
YThjNGQzMGY4Li5iZjUwNmMzNmQyZGZmM2Y2ZmNhNTk5ZjY3ZTU4NTRhMjY4YTdiMWQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
dWRpdEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXVkaXRBZ2VudC5oCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdl
cjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBJbnNwZWN0b3JBdWRpdEFnZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEF1ZGl0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JBdWRpdEFnZW50KTsKQEAgLTUzLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZv
aWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7
CiAKICAgICAvLyBBdWRpdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0dXAo
RXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7Ci0gICAg
dm9pZCBydW4oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRlc3QsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikgZmluYWw7Ci0gICAgdm9pZCB0ZWFy
ZG93bihFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldHVwKE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJv
d24gKi8+PiBydW4oY29uc3QgU3RyaW5nJiB0ZXN0LCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiB0ZWFyZG93bigpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNBY3RpdmVBdWRpdCgp
IGNvbnN0OwogCkBAIC02NCw3ICs2Myw3IEBAIHByb3RlY3RlZDoKIAogICAgIEluamVjdGVkU2Ny
aXB0TWFuYWdlciYgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXI7IH0KIAotICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0g
MDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVj
dChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0
T2JqZWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggMTA1ZmU2ZmM2
YzIyMDhlZjc2MzcxZWFlZGRiZmE0NzMxZmJmYjY1NC4uMTNiNjIzNGQxZjUzMjg1MGUzMDA1Mjc5
NzNjMjE1YjcyZTM2YWUxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC01
Myw4ICs1Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kCiAKIHZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
KQogewotICAgIFN0cmluZyBlcnJvclN0cmluZzsKLSAgICBkaXNhYmxlKGVycm9yU3RyaW5nKTsK
KyAgICBkaXNhYmxlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJk
VmFsdWVzKCkKQEAgLTYzLDEwICs2MiwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
ZGlzY2FyZFZhbHVlcygpCiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUo
KQogewogICAgIGlmIChtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKQEAgLTgwLDE3ICs3OSwyMSBAQCB2b2lk
IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWVzc2FnZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1lc3NhZ2Vz
W2ldLT5hZGRUb0Zyb250ZW5kKCptX2Zyb250ZW5kRGlzcGF0Y2hlciwgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIsIGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgaWYgKCFt
X2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1f
ZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKCkKIHsK
ICAgICBtX2NvbnNvbGVNZXNzYWdlcy5jbGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNz
YWdlQ291bnQgPSAwOwpAQCAtOTksNiArMTAyLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQogCiAgICAgaWYgKG1fZW5hYmxlZCkKICAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lc3NhZ2VzQ2xlYXJlZCgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJh
c0VuYWJsZWQoKSBjb25zdApAQCAtMTA4LDggKzExMyw3IEBAIGJvb2wgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OnJlc2V0KCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGNs
ZWFyTWVzc2FnZXMoaWdub3JlZCk7CisgICAgY2xlYXJNZXNzYWdlcygpOwogCiAgICAgbV90aW1l
cy5jbGVhcigpOwogICAgIG1fY291bnRzLmNsZWFyKCk7CkBAIC0xMTcsMTAgKzEyMSw4IEBAIHZv
aWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpyZXNldCgpCiAKIHZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xlTWVzc2Fn
ZT4gbWVzc2FnZSkKIHsKLSAgICBpZiAobWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VUeXBlOjpD
bGVhcikgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBjbGVhck1lc3Nh
Z2VzKGlnbm9yZWQpOwotICAgIH0KKyAgICBpZiAobWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VU
eXBlOjpDbGVhcikKKyAgICAgICAgY2xlYXJNZXNzYWdlcygpOwogCiAgICAgYWRkQ29uc29sZU1l
c3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiB9CkBAIC0xOTEsMTIgKzE5MywxMiBAQCB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxl
KQogICAgIGlmICghbV9oZWFwQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgZG91YmxlIHRpbWVzdGFtcDsKLSAgICBTdHJpbmcgc25hcHNob3RE
YXRhOwotICAgIG1faGVhcEFnZW50LT5zbmFwc2hvdChpZ25vcmVkLCAmdGltZXN0YW1wLCAmc25h
cHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1faGVhcEFnZW50LT5zbmFwc2hvdCgpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+aGVhcFNuYXBzaG90KHRpbWVzdGFtcCwgc25hcHNob3REYXRhLCB0aXRsZS5pc0VtcHR5
KCkgPyBudWxscHRyIDogJnRpdGxlKTsKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0
YV0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
aGVhcFNuYXBzaG90KHRpbWVzdGFtcCwgc25hcHNob3REYXRhLCB0aXRsZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFN0cmluZyYgbGFiZWwpCkBAIC0yNTYsMTUgKzI1OCwxNSBAQCB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkQ29uc29sZU1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPENv
bnNvbGVNZXNzYWdlPiBjbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6
OmdldExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mIGNoYW5uZWxzKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gSW5z
cGVjdG9yQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoKQogewogICAgIC8vIERlZmF1
bHQgaW1wbGVtZW50YXRpb24gaGFzIG5vIGxvZ2dpbmcgY2hhbm5lbHMuCi0gICAgY2hhbm5lbHMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPjo6Y3JlYXRlKCk7Cisg
ICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVh
dGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVs
TGV2ZWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50
OjpzZXRMb2dnaW5nQ2hhbm5lbExldmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNl
LCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKQogewotICAgIGVycm9yU3RyaW5nID0g
Ik5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9y
dGVkIl9zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5oCmluZGV4IDc4Y2FmMWFkMDhhZTU3YjFlMDc4NWM5YWRkNTE2NzUzNmFmYmYyOTYu
LmVkOGUxZjY5OWE1ZDBjOTFjZDA1NjY5MWE3ZGIyMTk4MGYyMzVkMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5oCkBAIC00Niw3ICs0Niw2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFu
YWdlcjsKIGNsYXNzIEluc3BlY3RvckhlYXBBZ2VudDsKIGNsYXNzIFNjcmlwdEFyZ3VtZW50czsK
IGNsYXNzIFNjcmlwdENhbGxTdGFjazsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ29uc29sZUFnZW50KTsKQEAgLTYx
LDExICs2MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjYXJkVmFsdWVzKCkgZmluYWw7CiAK
ICAgICAvLyBDb25zb2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUo
RXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBmaW5h
bDsKLSAgICB2b2lkIGNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGdldExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExv
Z2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNoYW5uZWwsIGNv
bnN0IFN0cmluZyYgbGV2ZWwpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGVuYWJsZSgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVh
ck1lc3NhZ2VzKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9nZ2luZ0NoYW5u
ZWxzKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0TG9n
Z2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSwgUHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldEhlYXBB
Z2VudChJbnNwZWN0b3JIZWFwQWdlbnQqIGFnZW50KSB7IG1faGVhcEFnZW50ID0gYWdlbnQ7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxM2ZjMmM1M2I1YWM0NjVl
NmUzZDY2YWJlMDU1YzBlZTZkNGRjMDcwLi40MWY0YmE0MjdlYTRmNzlkYzE0NDdmZWE1OTY0YWQ4
MDYzY2JkZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNjQsMjUg
KzY0LDI1IEBAIHN0YXRpYyBib29sIGlzV2ViS2l0SW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpCiAgICAgcmV0dXJuIHNvdXJjZVVSTC5zdGFydHNXaXRoKCJfX0luamVjdGVk
U2NyaXB0XyIpICYmIHNvdXJjZVVSTC5lbmRzV2l0aCgiLmpzIik7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVG
b3JTdHJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJp
bmcpCitzdGF0aWMgT3B0aW9uYWw8SlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFr
cG9pbnRBY3Rpb25UeXBlRm9yU3RyaW5nKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKIHsKLSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5
cGVTdHJpbmcpOworICAgIGF1dG8gdHlwZSA9IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBl
Pih0eXBlU3RyaW5nKTsKICAgICBpZiAoIXR5cGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBt
YWtlU3RyaW5nKCJVbmtub3duIGJyZWFrcG9pbnQgYWN0aW9uIHR5cGU6ICJfcywgdHlwZVN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoICgq
dHlwZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9p
bnRBY3Rpb246OlR5cGU6OkxvZzoKKyAgICBjYXNlIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludEFjdGlvbjo6VHlwZTo6TG9nOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpB
Y3Rpb246OlR5cGU6OkxvZzsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OkV2YWx1YXRlOgorICAgIGNhc2UgUHJvdG9jb2w6
OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZToKICAgICAgICAgcmV0
dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZTsKIAotICAgIGNhc2Ug
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNv
dW5kOgorICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBl
OjpTb3VuZDoKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlOjpT
b3VuZDsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9p
bnRBY3Rpb246OlR5cGU6OlByb2JlOgorICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVh
a3BvaW50QWN0aW9uOjpUeXBlOjpQcm9iZToKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2lu
dDo6QWN0aW9uOjpUeXBlOjpQcm9iZTsKICAgICB9CiAKQEAgLTkxLDMwICs5MSwyOSBAQCBzdGF0
aWMgT3B0aW9uYWw8SlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRBY3Rp
b25UeXBlRm9yU3RyaW5nKEVycgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBU
IHBhcnNlQnJlYWtwb2ludE9wdGlvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkLCBGdW5jdGlvbjxUKGNvbnN0IFN0cmluZyYsIEpT
Qzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmLCBib29sLCBzaXplX3QpPiBjYWxsYmFjaykK
K3N0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlvbnMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zLCBGdW5jdGlvbjxUKGNv
bnN0IFN0cmluZyYsIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmLCBib29sLCBzaXpl
X3QpPiBjYWxsYmFjaykKIHsKICAgICBTdHJpbmcgY29uZGl0aW9uOwogICAgIEpTQzo6QnJlYWtw
b2ludDo6QWN0aW9uc1ZlY3RvciBhY3Rpb25zOwogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFs
c2U7CiAgICAgc2l6ZV90IGlnbm9yZUNvdW50ID0gMDsKIAotICAgIGlmIChvcHRpb25zUGF5bG9h
ZCkgewotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iX3MsIGNv
bmRpdGlvbik7CisgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgICAgY29uZGl0aW9uID0gb3B0aW9u
cy0+Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmNvbmRp
dGlvbktleSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25zUGF5bG9hZDsK
LSAgICAgICAgb3B0aW9uc1BheWxvYWQtPmdldEFycmF5KCJhY3Rpb25zIl9zLCBhY3Rpb25zUGF5
bG9hZCk7CisgICAgICAgIGF1dG8gYWN0aW9uc1BheWxvYWQgPSBvcHRpb25zLT5nZXRBcnJheShQ
cm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRPcHRpb25zOjphY3Rpb25zS2V5KTsKICAgICAg
ICAgaWYgKGF1dG8gY291bnQgPSBhY3Rpb25zUGF5bG9hZCA/IGFjdGlvbnNQYXlsb2FkLT5sZW5n
dGgoKSA6IDApIHsKICAgICAgICAgICAgIGFjdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBhY3Rpb25PYmplY3Q7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhY3Rpb25zUGF5bG9hZC0+Z2V0KGkpLT5hc09iamVjdChhY3Rpb25PYmpl
Y3QpKSB7CisgICAgICAgICAgICAgICAgYXV0byBhY3Rpb25PYmplY3QgPSBhY3Rpb25zUGF5bG9h
ZC0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICghYWN0aW9uT2JqZWN0
KSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9i
amVjdCBpdGVtIGluIGdpdmVuIGFjdGlvbnMiX3M7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgU3RyaW5nIGFjdGlv
blR5cGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QtPmdldFN0cmlu
ZygidHlwZSJfcywgYWN0aW9uVHlwZVN0cmluZykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFj
dGlvblR5cGVTdHJpbmcgPSBhY3Rpb25PYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRBY3Rpb246OnR5cGVLZXkpOworICAgICAgICAgICAgICAgIGlmICghYWN0
aW9uVHlwZVN0cmluZykgewogICAgICAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNz
aW5nIHR5cGUgZm9yIGl0ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJfczsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjUsMzMgKzEyNCwzMyBAQCBz
dGF0aWMgVCBwYXJzZUJyZWFrcG9pbnRPcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcAogCiAgICAgICAgICAgICAgICAgSlNDOjpCcmVha3BvaW50
OjpBY3Rpb24gYWN0aW9uKCphY3Rpb25UeXBlKTsKIAotICAgICAgICAgICAgICAgIGFjdGlvbk9i
amVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9zLCBhY3Rpb24uZGF0YSk7CisgICAgICAgICAgICAgICAg
YWN0aW9uLmRhdGEgPSBhY3Rpb25PYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRBY3Rpb246OmRhdGFLZXkpOwogCiAgICAgICAgICAgICAgICAgLy8gU3BlY2lm
eWluZyBhbiBpZGVudGlmaWVyIGlzIG9wdGlvbmFsLiBUaGV5IGFyZSB1c2VkIHRvIGNvcnJlbGF0
ZSBwcm9iZSBzYW1wbGVzCiAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGZyb250ZW5kIGFjcm9z
cyBtdWx0aXBsZSBiYWNrZW5kIHByb2JlIGFjdGlvbnMgYW5kIHNlZ3JlZ2F0ZSBvYmplY3QgZ3Jv
dXBzLgotICAgICAgICAgICAgICAgIGFjdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigiaWQiX3MsIGFj
dGlvbi5pZCk7CisgICAgICAgICAgICAgICAgYWN0aW9uLmlkID0gYWN0aW9uT2JqZWN0LT5nZXRJ
bnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6aWRLZXkpLnZhbHVl
T3IoSlNDOjpub0JyZWFrcG9pbnRBY3Rpb25JRCk7CiAKICAgICAgICAgICAgICAgICBhY3Rpb25z
LmFwcGVuZChXVEZNb3ZlKGFjdGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgb3B0aW9uc1BheWxvYWQtPmdldEJvb2xlYW4oImF1dG9Db250aW51ZSJfcywgYXV0b0Nv
bnRpbnVlKTsKLSAgICAgICAgb3B0aW9uc1BheWxvYWQtPmdldEludGVnZXIoImlnbm9yZUNvdW50
Il9zLCBpZ25vcmVDb3VudCk7CisgICAgICAgIGF1dG9Db250aW51ZSA9IG9wdGlvbnMtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50T3B0aW9uczo6YXV0b0NvbnRpbnVl
S2V5KS52YWx1ZU9yKGZhbHNlKTsKKyAgICAgICAgaWdub3JlQ291bnQgPSBvcHRpb25zLT5nZXRJ
bnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6Omlnbm9yZUNvdW50
S2V5KS52YWx1ZU9yKDApOwogICAgIH0KIAogICAgIHJldHVybiBjYWxsYmFjayhjb25kaXRpb24s
IFdURk1vdmUoYWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogfQogCi1PcHRp
b25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitPcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9p
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxv
YWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpTb3VyY2VJRCBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9w
dGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQ
YXlsb2FkLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFj
dGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNv
dW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKKyAgICByZXR1cm4gcGFyc2VC
cmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+PihlcnJvclN0cmlu
ZywgV1RGTW92ZShvcHRpb25zKSwgWyZdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpC
cmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNp
emVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CiAgICAg
ICAgIHJldHVybiBQcm90b2NvbEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlciwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGlnbm9y
ZUNvdW50KTsKICAgICB9KTsKIH0KIAotT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
UHJvdG9jb2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFr
cG9pbnQ6OmZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1u
TnVtYmVyLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorT3B0aW9uYWw8SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogewotICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlv
bmFsPFByb3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCwgWyZd
IChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0
aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CisgICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9w
dGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIFdURk1vdmUo
b3B0aW9ucyksIFsmXSAoY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6
QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3Jl
Q291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gewogICAgICAgICByZXR1cm4g
UHJvdG9jb2xCcmVha3BvaW50KHVybCwgaXNSZWdleCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBjb25kaXRpb24sIFdURk1vdmUoYWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQp
OwogICAgIH0pOwogfQpAQCAtMjA3LDkgKzIwNiw5IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6UHJvdG9jb2xCcmVha3BvaW50OjptYXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYK
ICAgICByZXR1cm4gbV91cmwgPT0gc2NyaXB0VVJMOwogfQogCi1SZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9h
ZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIHBh
cnNlQnJlYWtwb2ludE9wdGlvbnM8UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4+KGVycm9yU3RyaW5n
LCBvcHRpb25zUGF5bG9hZCwgW10gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFr
cG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90
IGlnbm9yZUNvdW50KSB7CisgICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8UmVmUHRy
PEpTQzo6QnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbXSAoY29u
c3QgU3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFj
dGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKICAgICAgICAg
cmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6Y3JlYXRlKEpTQzo6bm9CcmVha3BvaW50SUQsIGNvbmRp
dGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAg
fSk7CiB9CkBAIC0yMzQsMTAgKzIzMywxMCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbgogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChE
aXNjb25uZWN0UmVhc29uIHJlYXNvbikKIHsKICAgICBpZiAoZW5hYmxlZCgpKQotICAgICAgICBk
aXNhYmxlKHJlYXNvbiA9PSBEaXNjb25uZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95
ZWQpOworICAgICAgICBpbnRlcm5hbERpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RSZWFzb246
Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZW5hYmxlKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFi
bGUoKQogewogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKQEAgLTI1Nyw3ICsyNTYsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQordm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJv
eWVkKQogewogICAgIGZvciAoYXV0byogbGlzdGVuZXIgOiBjb3B5VG9WZWN0b3IobV9saXN0ZW5l
cnMpKQogICAgICAgICBsaXN0ZW5lci0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwpAQCAtMjc3LDE5
ICsyNzYsMjEgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNC
ZWluZ0Rlc3Ryb3llZCkKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkK
IHsKLSAgICBpZiAoZW5hYmxlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRlYnVnZ2Vy
IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKGVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEZWJ1Z2dlciBk
b21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAotICAgIGVuYWJsZSgpOworICAgIGludGVybmFs
RW5hYmxlKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgZGlzYWJsZShmYWxz
ZSk7CisgICAgaW50ZXJuYWxEaXNhYmxlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
IGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludHNBY3RpdmUoKSBjb25zdApA
QCAtMjk3LDI4ICsyOTgsMzAgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3Bv
aW50c0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVidWdnZXIuYnJlYWtwb2ludHNBY3Rp
dmUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRBc3luY1N0YWNrVHJh
Y2VEZXB0aChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBkZXB0aCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tU
cmFjZURlcHRoKGludCBkZXB0aCkKIHsKICAgICBpZiAobV9hc3luY1N0YWNrVHJhY2VEZXB0aCA9
PSBkZXB0aCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYg
KGRlcHRoIDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5lZ2F0aXZl
IGRlcHRoIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChkZXB0aCA8IDApCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBuZWdhdGl2ZSBkZXB0aCJf
cyk7CiAKICAgICBtX2FzeW5jU3RhY2tUcmFjZURlcHRoID0gZGVwdGg7CiAKICAgICBpZiAoIW1f
YXN5bmNTdGFja1RyYWNlRGVwdGgpCiAgICAgICAgIGNsZWFyQXN5bmNTdGFja1RyYWNlRGF0YSgp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyYsIGJvb2wgYWN0aXZlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2lu
dHNBY3RpdmUoYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSkKICAgICAgICAgbV9kZWJ1
Z2dlci5hY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgZWxzZQogICAgICAgICBtX2RlYnVnZ2Vy
LmRlYWN0aXZhdGVCcmVha3BvaW50cygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojppc1BhdXNlZCgpIGNvbnN0CkBAIC0zNDIsMjAgKzM0NSwy
MCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnVwZGF0ZVBhdXNlUmVhc29uQW5kRGF0
YShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcgogICAgIG1fcGF1c2VEYXRhID0gV1RGTW92ZShk
YXRhKTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWxkQXNzZXJ0UGF1c2VS
ZWFzb24oY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1
aWxkQXNzZXJ0UGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8g
cmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCku
cmVsZWFzZSgpOwogICAgIGlmICghbWVzc2FnZS5pc051bGwoKSkKICAgICAgICAgcmVhc29uLT5z
ZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsK
KyAgICByZXR1cm4gKnJlYXNvbi0+YXNPYmplY3QoKTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBkaXJl
Y3RpdmVUZXh0KQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1
c2VSZWFzb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KQogewogICAgIGF1dG8gcmVhc29u
ID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9sYXRpb25QYXVzZVJlYXNvbjo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldERpcmVjdGl2ZShkaXJlY3RpdmVUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICByZXR1cm4gKnJlYXNv
bi0+YXNPYmplY3QoKTsKIH0KIAogUmVmUHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlNDOjpCcmVha3BvaW50SUQgZGVi
dWdnZXJCcmVha3BvaW50SUQpCkBAIC0zNjgsNyArMzcxLDcgQEAgUmVmUHRyPEpTT046Ok9iamVj
dD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlND
OjpCcmUKICAgICAgICAgICAgICAgICBhdXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludFBhdXNlUmVhc29uOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0
QnJlYWtwb2ludElkKHByb3RvY29sQnJlYWtwb2ludElEKQogICAgICAgICAgICAgICAgICAgICAu
cmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uLT5hc09iamVjdCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzg2LDcgKzM4OSwxMSBAQCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpidWlsZEV4Y2VwdGlvblBhdXNlUmVhc29u
KEpTQzo6SlNWYQogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
ZXhjZXB0aW9uLCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCkt
Pm9wZW5BY2Nlc3NvcnMoKTsKKyAgICBhdXRvIGV4Y2VwdGlvblZhbHVlID0gaW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdChleGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFj
ZU9iamVjdEdyb3VwKTsKKyAgICBpZiAoIWV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBleGNlcHRpb25WYWx1ZS0+YXNPYmplY3QoKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpoYW5kbGVDb25zb2xlQXNzZXJ0KGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKQEAgLTQ5Miw3ICs0OTksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpZERpc3BhdGNoQXN5bmNDYWxsKCkKICAgICAgICAgbV9wZW5kaW5nQXN5bmNDYWxs
cy5yZW1vdmUoaWRlbnRpZmllcik7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlYWtwb2lu
dCYgZGVidWdnZXJCcmVha3BvaW50KQorc3RhdGljIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiBidWlsZERlYnVnZ2VyTG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1
Z2dlckJyZWFrcG9pbnQpCiB7CiAgICAgQVNTRVJUKGRlYnVnZ2VyQnJlYWtwb2ludC5pc1Jlc29s
dmVkKCkpOwogCkBAIC01MDEsNTAgKzUwOCw0OSBAQCBzdGF0aWMgUmVmUHRyPFByb3RvY29sOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlvbihjb25zdCBKU0M6OkJyZQog
ICAgICAgICAuc2V0TGluZU51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQubGluZU51bWJlcigpKQog
ICAgICAgICAucmVsZWFzZSgpOwogICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoZGVidWdn
ZXJCcmVha3BvaW50LmNvbHVtbk51bWJlcigpKTsKLQogICAgIHJldHVybiBsb2NhdGlvbjsKIH0K
IAotc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIEpTQzo6U291cmNlSUQmIHNvdXJjZUlELCB1bnNp
Z25lZCYgbGluZU51bWJlciwgdW5zaWduZWQmIGNvbHVtbk51bWJlcikKK3N0YXRpYyBib29sIHBh
cnNlTG9jYXRpb24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6T2JqZWN0JiBsb2NhdGlvbiwgSlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBs
aW5lTnVtYmVyLCB1bnNpZ25lZCYgY29sdW1uTnVtYmVyKQogewotICAgIGlmICghbG9jYXRpb24u
Z2V0SW50ZWdlcigibGluZU51bWJlciJfcywgbGluZU51bWJlcikpIHsKKyAgICBhdXRvIGxpbmVO
dW1iZXJWYWx1ZSA9IGxvY2F0aW9uLmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2Nh
dGlvbjo6bGluZU51bWJlcktleSk7CisgICAgaWYgKCFsaW5lTnVtYmVyVmFsdWUpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBsaW5lTnVtYmVyIGluIGdp
dmVuIGxvY2F0aW9uIl9zOwogICAgICAgICBzb3VyY2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0cmluZyBzY3JpcHRJRFN0cjsKLSAg
ICBpZiAoIWxvY2F0aW9uLmdldFN0cmluZygic2NyaXB0SWQiX3MsIHNjcmlwdElEU3RyKSkgewor
ICAgIGxpbmVOdW1iZXIgPSAqbGluZU51bWJlclZhbHVlOworCisgICAgYXV0byBzY3JpcHRJRFN0
ciA9IGxvY2F0aW9uLmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpzY3Jp
cHRJZEtleSk7CisgICAgaWYgKCFzY3JpcHRJRFN0cikgewogICAgICAgICBzb3VyY2VJRCA9IEpT
Qzo6bm9Tb3VyY2VJRDsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leGVwY3RlZCBub24tc3Ry
aW5nIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGNv
bHVtbk51bWJlciA9IDA7Ci0gICAgbG9jYXRpb24uZ2V0SW50ZWdlcigiY29sdW1uTnVtYmVyIl9z
LCBjb2x1bW5OdW1iZXIpOworICAgIGNvbHVtbk51bWJlciA9IGxvY2F0aW9uLmdldEludGVnZXIo
UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y29sdW1uTnVtYmVyS2V5KS52YWx1ZU9yKDAp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVn
ZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9uc1BheWxvYWQsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVh
a3BvaW50SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+PiYgb3V0TG9jYXRpb25zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQ
cm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJl
YWtwb2ludEJ5VXJsKGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiB1cmxSZWdleCwgT3B0aW9uYWw8aW50PiYmIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFs
VVJMUmVnZXgpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRWl0aGVyIHVybCBvciB1cmxSZWdl
eCBtdXN0IGJlIHNwZWNpZmllZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXVybCA9PSAhdXJsUmVnZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRWl0aGVy
IHVybCBvciB1cmxSZWdleCBtdXN0IGJlIHNwZWNpZmllZCJfcyk7CiAKLSAgICBhdXRvIHByb3Rv
Y29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJp
bmcsIG9wdGlvbmFsVVJMID8gKm9wdGlvbmFsVVJMIDogKm9wdGlvbmFsVVJMUmVnZXgsICEhb3B0
aW9uYWxVUkxSZWdleCwgbGluZU51bWJlciwgb3B0aW9uYWxDb2x1bW5OdW1iZXIgPyAqb3B0aW9u
YWxDb2x1bW5OdW1iZXIgOiAwLCBvcHRpb25zUGF5bG9hZCk7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90
b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCAhIXVybCA/IHVybCA6IHVy
bFJlZ2V4LCAhIXVybFJlZ2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIudmFsdWVPcigwKSwg
V1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFwcm90b2NvbEJyZWFrcG9pbnQpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAot
ICAgIGlmIChtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNvbnRh
aW5zKHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29s
QnJlYWtwb2ludElELmNvbnRhaW5zKHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxy
ZWFkeSBleGlzdHMuIl9zKTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xC
cmVha3BvaW50SUQuc2V0KHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgKnByb3RvY29sQnJlYWtw
b2ludCk7CiAKLSAgICBvdXRMb2NhdGlvbnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGxvY2F0aW9ucyA9IEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9y
IChhdXRvJiBbc291cmNlSUQsIHNjcmlwdF0gOiBtX3NjcmlwdHMpIHsKICAgICAgICAgU3RyaW5n
IHNjcmlwdFVSTEZvckJyZWFrcG9pbnRzID0gIXNjcmlwdC5zb3VyY2VVUkwuaXNFbXB0eSgpID8g
c2NyaXB0LnNvdXJjZVVSTCA6IHNjcmlwdC51cmw7CkBAIC01NjEsMjkgKzU2NywyOSBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29s
QnJlYWtwb2ludCwgZGVidWdnZXJCcmVha3BvaW50KTsKIAotICAgICAgICBvdXRMb2NhdGlvbnMt
PmFkZEl0ZW0oYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkpOworICAg
ICAgICBsb2NhdGlvbnMtPmFkZEl0ZW0oYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJl
YWtwb2ludCkpOwogICAgIH0KIAotICAgICpvdXRCcmVha3BvaW50SWQgPSBwcm90b2NvbEJyZWFr
cG9pbnQtPmlkKCk7CisgICAgcmV0dXJuIHsgeyBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksIFdU
Rk1vdmUobG9jYXRpb25zKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVj
dCYgbG9jYXRpb24sIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQsIFByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxQcm90b2Nv
bDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgb3V0QWN0dWFsTG9jYXRpb24pCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBS
ZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KFJlZjxKU09OOjpPYmplY3Q+JiYgbG9jYXRpb24sIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEOwogICAgIHVuc2lnbmVkIGxpbmVO
dW1iZXI7CiAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyOwogICAgIGlmICghcGFyc2VMb2NhdGlv
bihlcnJvclN0cmluZywgbG9jYXRpb24sIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291
cmNlSUQpOwotICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVu
IGxvY2F0aW9uIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChzY3JpcHRJdGVy
YXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
TWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zKTsKIAotICAg
IGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9h
ZChlcnJvclN0cmluZywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgb3B0aW9u
c1BheWxvYWQpOworICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3Bv
aW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlciwgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFwcm90b2NvbEJyZWFrcG9pbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIC8vIERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2ludGAgaW4gYG1fcHJv
dG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1c2UgaXQKICAgICAv
LyB3YXMgc2V0IHNwZWNpZmljYWxseSBmb3IgdGhlIGdpdmVuIGBzb3VyY2VJRGAsIHdoaWNoIGlz
IHVuaXF1ZSwgbWVhbmluZyB0aGF0IGl0IHdpbGwgbmV2ZXIKQEAgLTU5MSwyMCArNTk3LDE1IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046CiAKICAgICBhdXRvIGRlYnVnZ2VyQnJlYWtwb2ludCA9
IHByb3RvY29sQnJlYWtwb2ludC0+Y3JlYXRlRGVidWdnZXJCcmVha3BvaW50KG1fbmV4dERlYnVn
Z2VyQnJlYWtwb2ludElEKyssIHNvdXJjZUlEKTsKIAotICAgIGlmICghcmVzb2x2ZUJyZWFrcG9p
bnQoc2NyaXB0SXRlcmF0b3ItPnZhbHVlLCBkZWJ1Z2dlckJyZWFrcG9pbnQpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRv
ci0+dmFsdWUsIGRlYnVnZ2VyQnJlYWtwb2ludCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQ291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAKLSAgICBpZiAoIXNldEJy
ZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJC
cmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNldEJyZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBs
b2NhdGlvbiBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKICAgICBkaWRTZXRCcmVha3BvaW50KCpwcm90
b2NvbEJyZWFrcG9pbnQsIGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAKLSAgICBvdXRBY3R1YWxMb2Nh
dGlvbiA9IGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dlckJyZWFrcG9pbnQpOwotICAgICpv
dXRCcmVha3BvaW50SWQgPSBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCk7CisgICAgcmV0dXJuIHsg
eyBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksIGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dl
ckJyZWFrcG9pbnQpIH0gfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRT
ZXRCcmVha3BvaW50KFByb3RvY29sQnJlYWtwb2ludCYgcHJvdG9jb2xCcmVha3BvaW50LCBKU0M6
OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKQEAgLTYzMCw3ICs2MzEsNyBAQCBib29s
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50JiBk
ZWJ1Z2dlckJyZWFrcG9pbnQpCiAgICAgcmV0dXJuIG1fZGVidWdnZXIuc2V0QnJlYWtwb2ludChk
ZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
bW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiBwcm90b2NvbEJyZWFrcG9pbnRJRCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3RvY29sQnJlYWtw
b2ludElEKQogewogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50
SUQucmVtb3ZlKHByb3RvY29sQnJlYWtwb2ludElEKTsKIApAQCAtNjQxLDI0ICs2NDIsMzQgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5n
JiwgY29uc3QgSW5zcGVjdG9yOjpQcm8KICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2Vy
KG1fZGVidWdnZXIudm0oKSk7CiAgICAgICAgIG1fZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludChk
ZWJ1Z2dlckJyZWFrcG9pbnQpOwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVVbnRpbE5leHRSdW5Mb29wKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVW50aWxOZXh0UnVuTG9vcCgpCiB7Ci0gICAgaWYgKCFh
c3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKKyAg
ICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBhdXRvIHJlc3VtZVJlc3VsdCA9IHJlc3VtZSgp
OworICAgIGlmICghcmVzdW1lUmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
cmVzdW1lUmVzdWx0LmVycm9yKCkpOwogCiAgICAgbV9lbmFibGVQYXVzZVdoZW5JZGxlID0gdHJ1
ZTsKIAogICAgIHJlZ2lzdGVySWRsZUhhbmRsZXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9M
b2NhdGlvbihSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3Ry
aW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgaWYgKG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3Bv
aW50KSB7CiAgICAgICAgIG1fZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludCgqbV9jb250aW51ZVRv
TG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQpOwpAQCAtNjY5LDE5ICs2ODAsMTggQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdAogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CiAgICAgdW5zaWduZWQg
Y29sdW1uTnVtYmVyOwogICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRp
b24sIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRv
IHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChzY3Jp
cHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5jb250
aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdp
dmVuIGxvY2F0aW9uIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9z
KTsKICAgICB9CiAKICAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtw
b2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpOwogICAgIGlmICghcHJvdG9jb2xCcmVha3BvaW50KQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBE
b24ndCBzYXZlIGBwcm90b2NvbEJyZWFrcG9pbnRgIGluIGBtX3Byb3RvY29sQnJlYWtwb2ludEZv
clByb3RvY29sQnJlYWtwb2ludElEYCBiZWNhdXNlIGl0CiAgICAgLy8gaXMgYSB0ZW1wb3Jhcnkg
YnJlYWtwb2ludCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBhcyBzb29uIGFzIGBsb2NhdGlvbmAgaXMg
cmVhY2hlZC4KQEAgLTY5MSw4ICs3MDEsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAg
aWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRlYnVnZ2VyQnJl
YWtwb2ludCkpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQ291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQi
X3MpOwogICAgIH0KIAogICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQp
KSB7CkBAIC03MDEsNyArNzEwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICAv
LyBoaXQgdGhpcyBuZXcgYnJlYWtwb2ludCBvciBub3QuCiAgICAgICAgIG1fZGVidWdnZXIuY29u
dGludWVQcm9ncmFtKCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXN1bWVkKCk7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBtX2Nv
bnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCA9IFdURk1vdmUoZGVidWdnZXJCcmVh
a3BvaW50KTsKQEAgLTcxMCw0MSArNzE5LDQyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAg
ICAvLyBTbyBkb24ndCBpc3N1ZSBhIHJlc3VtZWQgZXZlbnQgdW5sZXNzIHdlIGV4aXQgdGhlIFZN
IHdpdGhvdXQgcGF1c2luZy4KICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
SXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2Vh
cmNoTWF0Y2g+PiYgcmVzdWx0cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OlNj
cmlwdElkJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBj
YXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgSlNDOjpTb3Vy
Y2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgYXV0byBpdCA9IG1f
c2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgPT0gbV9zY3JpcHRzLmVuZCgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBzY3JpcHRJ
ZCI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5k
KHNjcmlwdElkLnRvSW50UHRyKCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNj
cmlwdElkIl9zKTsKIAotICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRp
b25hbElzUmVnZXggOiBmYWxzZTsKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENh
c2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0gICAgcmVzdWx0
cyA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnZhbHVl
LnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgIHJldHVybiBDb250
ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2Us
IHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLnZhbHVlT3IoZmFsc2UpLCBpc1JlZ2V4LnZhbHVlT3IoZmFs
c2UpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2Uo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBTdHJp
bmcqIHNjcmlwdFNvdXJjZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dl
cjo6U2NyaXB0SWQmIHNjcmlwdElkKQogewotICAgIEpTQzo6U291cmNlSUQgc291cmNlSUQgPSBz
Y3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGF1dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzb3Vy
Y2VJRCk7Ci0gICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNv
dXJjZSA9IGl0LT52YWx1ZS5zb3VyY2U7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9
ICJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiOworICAgIGF1dG8gaXQgPSBtX3Nj
cmlwdHMuZmluZChzY3JpcHRJZC50b0ludFB0cigpKTsKKyAgICBpZiAoaXQgPT0gbV9zY3JpcHRz
LmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZv
ciBnaXZlbiBzY3JpcHRJZCIpOworCisgICAgcmV0dXJuIGl0LT52YWx1ZS5zb3VyY2U7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPj4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25JZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmlu
amVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoZnVuY3Rpb25JZCk7Ci0gICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZnVuY3Rpb25JZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlv
bklkIl9zKTsKIAorICAgIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4gZGV0YWlsczsKICAgICBpbmplY3RlZFNjcmlwdC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JT
dHJpbmcsIGZ1bmN0aW9uSWQsIGRldGFpbHMpOworICAgIGlmICghZGV0YWlscykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBkZXRhaWxz
LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2No
ZWR1bGVQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb24gcmVhc29uLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEpCkBAIC03OTIsNTcgKzgw
Miw3NSBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlRm9yU3BlY2lh
bEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50JiBicgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKCkKIHsK
ICAgICBzY2hlZHVsZVBhdXNlQXROZXh0T3Bwb3J0dW5pdHkoRGVidWdnZXJGcm9udGVuZERpc3Bh
dGNoZXI6OlJlYXNvbjo6UGF1c2VPbk5leHRTdGF0ZW1lbnQpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6cmVzdW1lKCkKIHsKLSAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2JqZWN0ICYmICFt
X2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0
IGJlIHBhdXNlZCBvciB3YWl0aW5nIHRvIHBhdXNlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghbV9wYXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2No
ZWR1bGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgYmUgcGF1c2VkIG9y
IHdhaXRpbmcgdG8gcGF1c2UiX3MpOwogCiAgICAgY2FuY2VsUGF1c2VBdE5leHRPcHBvcnR1bml0
eSgpOwogICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7CiAgICAgbV9jb25kaXRpb25U
b0Rpc3BhdGNoUmVzdW1lZCA9IFNob3VsZERpc3BhdGNoUmVzdW1lZDo6V2hlbkNvbnRpbnVlZDsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3Rl
cE5leHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE5leHQoKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9y
U3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9k
ZWJ1Z2dlci5zdGVwTmV4dEV4cHJlc3Npb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE92ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c3RlcE92ZXIoKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0
ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwT3ZlclN0YXRlbWVudCgp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
dGVwSW50byhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50bygpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLnN0ZXBJbnRvU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c3RlcE91dCgpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3Rl
cEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBPdXRPZkZ1bmN0aW9uKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
Z2lzdGVySWRsZUhhbmRsZXIoKQpAQCAtODc3LDg2ICs5MDUsOTggQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRCZWNvbWVJZGxlKCkKIAogICAgIG1fY29uZGl0aW9uVG9EaXNwYXRj
aFJlc3VtZWQgPSBTaG91bGREaXNwYXRjaFJlc3VtZWQ6Ok5vOwogCi0gICAgaWYgKG1fZW5hYmxl
UGF1c2VXaGVuSWRsZSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBw
YXVzZShpZ25vcmVkKTsKLSAgICB9CisgICAgaWYgKG1fZW5hYmxlUGF1c2VXaGVuSWRsZSkKKyAg
ICAgICAgcGF1c2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVz
ZU9uRGVidWdnZXJTdGF0ZW1lbnRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFi
bGVkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkRlYnVnZ2Vy
U3RhdGVtZW50cyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWVu
YWJsZWQpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRz
QnJlYWtwb2ludChudWxscHRyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21Q
YXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50
ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0
aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9kZWJ1Z2dlci5zZXRQ
YXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzQnJlYWtwb2ludChXVEZNb3ZlKGJyZWFrcG9pbnQpKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHN0YXRlU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VP
bkV4Y2VwdGlvbnMoY29uc3QgU3RyaW5nJiBzdGF0ZVN0cmluZywgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50Owog
ICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQ7
CiAKICAgICBpZiAoc3RhdGVTdHJpbmcgPT0gImFsbCIpIHsKLSAgICAgICAgYWxsRXhjZXB0aW9u
c0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywg
b3B0aW9uc1BheWxvYWQpOworICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICAgICAgaWYgKCFhbGxFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAg
fSBlbHNlIGlmIChzdGF0ZVN0cmluZyA9PSAidW5jYXVnaHQiKSB7Ci0gICAgICAgIHVuY2F1Z2h0
RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgICAgICB1bmNhdWdodEV4Y2VwdGlvbnNCcmVh
a3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1v
dmUob3B0aW9ucykpOwogICAgICAgICBpZiAoIXVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdGF0ZVN0cmluZyAhPSAibm9u
ZSIpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHN0YXRlOiAi
X3MsIHN0YXRlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgfSBlbHNlIGlmIChzdGF0ZVN0
cmluZyAhPSAibm9uZSIpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5n
KCJVbmtub3duIHN0YXRlOiAiX3MsIHN0YXRlU3RyaW5nKSk7CiAKICAgICBtX2RlYnVnZ2VyLnNl
dFBhdXNlT25BbGxFeGNlcHRpb25zQnJlYWtwb2ludChXVEZNb3ZlKGFsbEV4Y2VwdGlvbnNCcmVh
a3BvaW50KSk7CiAgICAgbV9kZWJ1Z2dlci5zZXRQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zQnJl
YWtwb2ludChXVEZNb3ZlKHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkFz
c2VydGlvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpT
T046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhib29sIGVuYWJs
ZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9w
YXVzZU9uQXNzZXJ0aW9uc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdn
ZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAg
ICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBtX3BhdXNlT25Bc3NlcnRpb25zQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBh
dXNlT25NaWNyb3Rhc2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoYm9v
bCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFlbmFibGVkKSB7CiAgICAg
ICAgIG1fcGF1c2VPbk1pY3JvdGFza3NCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2ludCA9
IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9h
ZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OwogCiAgICAgbV9wYXVzZU9uTWljcm90YXNrc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9p
bnQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcq
IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJv
b2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0
dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZl
UmVzdWx0LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8sIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJl
c3VsdEluZGV4ICovPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFt
ZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiBjYWxsRnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25h
bDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlW
YWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYg
c2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiAgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNz
ZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKGNhbGxGcmFtZUlkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZl
biBjYWxsRnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBjYWxsRnJhbWVJZCJfcyk7CiAKICAgICBK
U0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1w
b3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKIApAQCAtOTY2
LDI4ICsxMDA2LDMxIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNh
bGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIG11dGVDb25z
b2xlKCk7CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShl
cnJvclN0cmluZywgbV9jdXJyZW50Q2FsbFN0YWNrLmdldCgpLCBjYWxsRnJhbWVJZCwgZXhwcmVz
c2lvbiwKLSAgICAgICAgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBlbXB0eVN0cmluZygp
LCBpbmNsdWRlQ29tbWFuZExpbmVBUEkgJiYgKmluY2x1ZGVDb21tYW5kTGluZUFQSSwgcmV0dXJu
QnlWYWx1ZSAmJiAqcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3ICYmICpnZW5lcmF0ZVBy
ZXZpZXcsIHNhdmVSZXN1bHQgJiYgKnNhdmVSZXN1bHQsCi0gICAgICAgIHJlc3VsdCwgd2FzVGhy
b3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKKyAgICBP
cHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CisKKyAgICBpbmplY3RlZFNjcmlwdC5ldmFs
dWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3RhY2suZ2V0KCksIGNh
bGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LnZhbHVlT3IoZmFsc2UpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVBy
ZXZpZXcudmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSksIHJlc3VsdCwg
d2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAg
ICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQu
cmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJvd24pLCBXVEZNb3ZlKHNhdmVkUmVzdWx0
SW5kZXgpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRC
bGFja2JveFVSTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBi
b29sIHNob3VsZEJsYWNrYm94LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0cmlu
ZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBvcHRpb25hbElzUmVnZXgpCiB7Ci0gICAgaWYg
KHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVVJMIG11c3Qgbm90IGJl
IGVtcHR5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICh1cmwuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVSTCBtdXN0IG5vdCBiZSBlbXB0eSJf
cyk7CiAKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgJiYg
Km9wdGlvbmFsQ2FzZVNlbnNpdGl2ZTsKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVn
ZXggJiYgKm9wdGlvbmFsSXNSZWdleDsKKyAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25h
bENhc2VTZW5zaXRpdmUudmFsdWVPcihmYWxzZSk7CisgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9u
YWxJc1JlZ2V4LnZhbHVlT3IoZmFsc2UpOwogCi0gICAgaWYgKCFjYXNlU2Vuc2l0aXZlICYmICFp
c1JlZ2V4ICYmIGlzV2ViS2l0SW5qZWN0ZWRTY3JpcHQodXJsKSkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJCbGFja2JveGluZyBvZiBpbnRlcm5hbCBzY3JpcHRzIGlzIGNvbnRyb2xsZWQgYnkg
J0RlYnVnZ2VyLnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRzJyJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJ
bmplY3RlZFNjcmlwdCh1cmwpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJsYWNr
Ym94aW5nIG9mIGludGVybmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0
UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMnIl9zKTsKIAogICAgIEJsYWNrYm94Q29uZmlnIGNvbmZp
ZyB7IHVybCwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCB9OwogICAgIGlmIChzaG91bGRCbGFja2Jv
eCkKQEAgLTEwMDQsNiArMTA0Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
U2hvdWxkQmxhY2tib3hVUkwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgICAg
ICAgICBibGFja2JveFR5cGUgPSBKU0M6OkRlYnVnZ2VyOjpCbGFja2JveFR5cGU6OkRlZmVycmVk
OwogICAgICAgICBtX2RlYnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hU
eXBlKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdApAQCAt
MTAzOSwxMCArMTA4NCwxMCBAQCBTdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNl
TWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdAogICAgIHJldHVybiBz
Y3JpcHQuc291cmNlTWFwcGluZ1VSTDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWxkUGF1
c2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKQogewogICAgIGlm
IChzaG91bGRQYXVzZSA9PSBtX3BhdXNlRm9ySW50ZXJuYWxTY3JpcHRzKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3BhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
ID0gc2hvdWxkUGF1c2U7CiAKQEAgLTEwNTIsNiArMTA5Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoRXJyb3JTdHJpbmcmLCBib29s
IHNob3VsCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRCbGFj
a2JveFR5cGUoc291cmNlSUQsIGJsYWNrYm94VHlwZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsg
fTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6
OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQmIHNjcmlwdCkK
QEAgLTEwNjEsMTIgKzExMDgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
cnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpTQzo6RAogICAgIFN0cmlu
ZyBzb3VyY2VVUkwgPSBzY3JpcHQuc291cmNlVVJMOwogICAgIFN0cmluZyBzb3VyY2VNYXBwaW5n
VVJMID0gc291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlwdCk7CiAKLSAgICBjb25zdCBib29sIGlz
TW9kdWxlID0gc2NyaXB0LnNvdXJjZVByb3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3Vy
Y2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZTsKLSAgICBjb25zdCBib29sKiBpc0NvbnRlbnRT
Y3JpcHQgPSBzY3JpcHQuaXNDb250ZW50U2NyaXB0ID8gJnNjcmlwdC5pc0NvbnRlbnRTY3JpcHQg
OiBudWxscHRyOwotICAgIFN0cmluZyogc291cmNlVVJMUGFyYW0gPSBoYXNTb3VyY2VVUkwgPyAm
c291cmNlVVJMIDogbnVsbHB0cjsKLSAgICBTdHJpbmcqIHNvdXJjZU1hcFVSTFBhcmFtID0gc291
cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkgPyBudWxscHRyIDogJnNvdXJjZU1hcHBpbmdVUkw7Ci0K
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3Jp
cHQudXJsLCBzY3JpcHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRM
aW5lLCBzY3JpcHQuZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZVVSTFBhcmFtLCBz
b3VyY2VNYXBVUkxQYXJhbSwgaXNNb2R1bGUgPyAmaXNNb2R1bGUgOiBudWxscHRyKTsKKyAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3JpcHQudXJs
LCBzY3JpcHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBz
Y3JpcHQuZW5kQ29sdW1uLCBzY3JpcHQuaXNDb250ZW50U2NyaXB0LCBzb3VyY2VVUkwsIHNvdXJj
ZU1hcHBpbmdVUkwsIHNjcmlwdC5zb3VyY2VQcm92aWRlci0+c291cmNlVHlwZSgpID09IEpTQzo6
U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpOwogCiAgICAgbV9zY3JpcHRzLnNldChz
b3VyY2VJRCwgc2NyaXB0KTsKIApAQCAtMTE4MCwxMiArMTIyMiwxMyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpEZQogICAgICAgICBpZiAoYXV0byBkZWJ1Z2dlckJyZWFrcG9pbnRJZCA9IG1fZGVi
dWdnZXIucGF1c2luZ0JyZWFrcG9pbnRJRCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fY29u
dGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50IHx8IGRlYnVnZ2VyQnJlYWtwb2ludElk
ICE9IG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50LT5pZCgpKTsKICAgICAg
ICAgICAgIGRhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZGF0YS0+
c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246
OkJyZWFrcG9pbnQpKTsKLSAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEi
X3MsIGJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29uKGRlYnVnZ2VyQnJlYWtwb2ludElkKSk7Cisg
ICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbjo6QnJlYWtwb2ludCkpOworICAgICAgICAgICAgaWYgKGF1dG8gcGF1c2VSZWFzb24g
PSBidWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihkZWJ1Z2dlckJyZWFrcG9pbnRJZCkpCisgICAg
ICAgICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgcGF1c2VSZWFzb24u
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobV9wcmVCbGFja2JveFBhdXNl
RGF0YSkgewogICAgICAgICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SW5z
cGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUobV9wcmVCbGFja2JveFBhdXNlUmVh
c29uKSk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgib3JpZ2luYWxEYXRhIl9zLCBtX3By
ZUJsYWNrYm94UGF1c2VEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3JpZ2lu
YWxSZWFzb24iX3MsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3By
ZUJsYWNrYm94UGF1c2VSZWFzb24pKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmln
aW5hbERhdGEiX3MsIG1fcHJlQmxhY2tib3hQYXVzZURhdGEucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgdXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRl
bmREaXNwYXRjaGVyOjpSZWFzb246OkJsYWNrYm94ZWRTY3JpcHQsIFdURk1vdmUoZGF0YSkpOwog
ICAgIH0KQEAgLTEyMDYsNyArMTI0OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAg
ICAgICAgICBhc3luY1N0YWNrVHJhY2UgPSBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0
KCk7CiAgICAgfQogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2Fs
bEZyYW1lcyhpbmplY3RlZFNjcmlwdCksIG1fcGF1c2VSZWFzb24sIG1fcGF1c2VEYXRhLCBhc3lu
Y1N0YWNrVHJhY2UpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wYXVzZWQoY3VycmVudENh
bGxGcmFtZXMoaW5qZWN0ZWRTY3JpcHQpLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUobV9wYXVzZVJlYXNvbiksIG1fcGF1c2VEYXRhLmNvcHlSZWYoKSwgV1RGTW92ZShh
c3luY1N0YWNrVHJhY2UpKTsKIAogICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFs
c2U7CiAKQEAgLTEyMzEsMTIgKzEyNzQsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKIHsK
ICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBwYXlsb2FkID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2lu
dEFjdGlvbihhY3Rpb25JRCksIHRydWUpOworICAgIGlmICghcGF5bG9hZCkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6RGVidWdnZXI6OlByb2JlU2FtcGxl
OjpjcmVhdGUoKQogICAgICAgICAuc2V0UHJvYmVJZChhY3Rpb25JRCkKICAgICAgICAgLnNldEJh
dGNoSWQoYmF0Y2hJZCkKICAgICAgICAgLnNldFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAu
c2V0VGltZXN0YW1wKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluc3BlY3RvckVudmlyb25tZW50
KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpCi0gICAgICAg
IC5zZXRQYXlsb2FkKFdURk1vdmUocGF5bG9hZCkpCisgICAgICAgIC5zZXRQYXlsb2FkKHBheWxv
YWQucmVsZWFzZU5vbk51bGwoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZGlkU2FtcGxlUHJvYmUoV1RGTW92ZShyZXN1bHQpKTsKIH0KQEAgLTEyNjcs
OSArMTMxMyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKERl
YnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gcmVhCiAKIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7CiAgICAgZm9yIChhdXRvJiBwcm90b2NvbEJyZWFrcG9pbnRJRCA6IGNv
cHlUb1ZlY3RvcihtX2RlYnVnZ2VyQnJlYWtwb2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5r
ZXlzKCkpKQotICAgICAgICByZW1vdmVCcmVha3BvaW50KGlnbm9yZWQsIHByb3RvY29sQnJlYWtw
b2ludElEKTsKKyAgICAgICAgcmVtb3ZlQnJlYWtwb2ludChwcm90b2NvbEJyZWFrcG9pbnRJRCk7
CiAKICAgICBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNsZWFy
KCk7CiAKQEAgLTEzMTcsNyArMTM2Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkQ2xlYXJHbG9iYWxPYmplY3QoKQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5nbG9iYWxP
YmplY3RDbGVhcmVkKCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0
UGF1c2VkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK2Jvb2wgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YXNzZXJ0UGF1c2VkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7
CiAgICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9iamVjdCkgewogICAgICAgICBlcnJvclN0cmluZyA9
ICJNdXN0IGJlIHBhdXNlZCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAz
MGZmOWYzYzI2ZDFhZTA0NjZhNzFhNWJmNjM2NjE4Mjk1NGZhMmQ4Li40ZmMzZjg0YTZlMjEyYjg4
NWI2YTJmMzI4ZjgxZWRmNzVmOTBhNDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CkBAIC00OCw3ICs0OCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgQXN5bmNTdGFj
a1RyYWNlOwogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFn
ZXI7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIEpTQzo6RGVidWdn
ZXI6Ok9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KTsKQEAgLTU2LDcgKzU1LDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmwKIHB1Ymxp
YzoKICAgICB+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpIG92ZXJyaWRlOwogCi0gICAgc3RhdGlj
IFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVy
cm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCk7CisgICAgc3Rh
dGljIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyk7
CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgYmFja3RyYWNlT2JqZWN0R3JvdXA7CiAK
QEAgLTY2LDMxICs2NSwzMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KIAogICAgIC8vIERlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNldEFzeW5jU3RhY2tU
cmFjZURlcHRoKEVycm9yU3RyaW5nJiwgaW50IGRlcHRoKSBmaW5hbDsKLSAgICB2b2lkIHNldEJy
ZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpIGZpbmFsOwotICAgIHZv
aWQgc2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29u
c3QgaW50KiBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25z
LCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBmaW5hbDsKLSAgICB2
b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0
aW9uLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJl
YWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgb3V0QWN0dWFsTG9jYXRpb24pIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpIGZp
bmFsOwotICAgIHZvaWQgY29udGludWVVbnRpbE5leHRSdW5Mb29wKEVycm9yU3RyaW5nJikgZmlu
YWw7Ci0gICAgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpPYmplY3QmIGxvY2F0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBOZXh0KEVycm9yU3RyaW5n
JikgZmluYWw7Ci0gICAgdm9pZCBzdGVwT3ZlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgc3RlcEludG8oRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdXQoRXJyb3JT
dHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHBhdXNlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAg
dm9pZCByZXN1bWUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNlYXJjaEluQ29udGVu
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVl
cnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9u
YWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpT
ZWFyY2hNYXRjaD4+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgZmluYWw7
Ci0gICAgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4m
KSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JTdHJp
bmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0g
ICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cGF1c2VTdGF0ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lk
IHNldFBhdXNlT25Bc3NlcnRpb25zKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbk1pY3JvdGFz
a3MoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9u
cykgZmluYWw7Ci0gICAgdm9pZCBzZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhFcnJvclN0cmlu
ZyYsIGJvb2wgc2hvdWxkUGF1c2UpIGZpbmFsOwotICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFt
ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0
ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJH
ZXN0dXJlLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwg
T3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRl
eCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBjb25zdCBib29sKiBjYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoaW50KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRCcmVha3BvaW50c0FjdGl2ZShib29sKSBmaW5hbDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkLCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0
aW9uPj4+PiBzZXRCcmVha3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+JiYgY29sdW1uTnVtYmVy
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQs
IFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+IHNldEJyZWFrcG9pbnQoUmVmPEpT
T046Ok9iamVjdD4mJiBsb2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJikgZmluYWw7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY29udGludWVVbnRpbE5leHRSdW5Mb29wKCkgZmlu
YWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY29udGludWVUb0xvY2F0aW9u
KFJlZjxKU09OOjpPYmplY3Q+JiYgbG9jYXRpb24pIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IHN0ZXBOZXh0KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc3RlcE92ZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdGVwSW50bygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0ZXBPdXQoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBw
YXVzZSgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZSgp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IHNlYXJjaEluQ29udGVudChjb25z
dCBQcm90b2NvbDo6RGVidWdnZXI6OlNjcmlwdElkJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0U2NyaXB0U291cmNl
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmKSBmaW5hbDsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
PiBnZXRGdW5jdGlvbkRldGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKSBmaW5hbDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1l
bnRzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uRXhjZXB0aW9ucyhj
b25zdCBTdHJpbmcmIHN0YXRlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlT25Bc3NlcnRpb25z
KGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uTWljcm90YXNrcyhib29s
IGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoYm9v
bCBzaG91bGRQYXVzZSkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+
IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4g
ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlk
JiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBP
cHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0
dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJv
b2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92
ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3VsZEJsYWNr
Ym94VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBPcHRpb25hbDxi
b29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CiAK
ICAgICAvLyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgogICAgIHZvaWQgZGlkUGFyc2VTb3VyY2Uo
SlNDOjpTb3VyY2VJRCwgY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0JikgZmluYWw7CkBAIC0x
NDIsMTEgKzE0MSwxMSBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KEFnZW50Q29udGV4dCYpOwotICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOworICAgIHZpcnR1
YWwgdm9pZCBpbnRlcm5hbEVuYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbERpc2Fi
bGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciYg
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXI7IH0KLSAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZh
bChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSA9IDA7CisgICAg
dmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJ
ZD4mJikgPSAwOwogCiAgICAgSlNDOjpEZWJ1Z2dlciYgZGVidWdnZXIoKSB7IHJldHVybiBtX2Rl
YnVnZ2VyOyB9CiAKQEAgLTE2Niw4ICsxNjUsOCBAQCBwcml2YXRlOgogICAgIGNsYXNzIFByb3Rv
Y29sQnJlYWtwb2ludCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBh
eWxvYWQoRXJyb3JTdHJpbmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQg
PSBudWxscHRyKTsKLSAgICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4g
ZnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQgPSBudWxscHRyKTsKKyAgICAgICAgc3RhdGljIE9wdGlv
bmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgSlNDOjpTb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMgPSBudWxscHRyKTsKKyAgICAgICAg
c3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMgPSBudWxscHRyKTsKIAogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoKTsKICAg
ICAgICAgUHJvdG9jb2xCcmVha3BvaW50KEpTQzo6U291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24gPSBudWxs
U3RyaW5nKCksIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMgPSB7IH0s
IGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2UsIHNpemVfdCBpZ25vcmVDb3VudCA9IDApOwpAQCAt
MTc1LDEyICsxNzQsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICBSZWY8SlNDOjpCcmVha3BvaW50
PiBjcmVhdGVEZWJ1Z2dlckJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50SUQsIEpTQzo6U291cmNl
SUQpIGNvbnN0OwogCi0gICAgICAgIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBjb25z
dCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CiAKICAgICAgICAgYm9vbCBtYXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRJZCBtX2lkOworICAgICAgICBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFr
cG9pbnRJZCBtX2lkOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgSlNDOjpTb3VyY2VJ
RCBtX3NvdXJjZUlEIHsgSlNDOjpub1NvdXJjZUlEIH07CkBAIC0yMDIsNyArMjAxLDcgQEAgcHJp
dmF0ZToKICAgICBib29sIHNldEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50Jik7CiAgICAgdm9p
ZCBkaWRTZXRCcmVha3BvaW50KFByb3RvY29sQnJlYWtwb2ludCYsIEpTQzo6QnJlYWtwb2ludCYp
OwogCi0gICAgYm9vbCBhc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmKTsKKyAgICBib29sIGFzc2Vy
dFBhdXNlZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyRGVidWdnZXJC
cmVha3BvaW50U3RhdGUoKTsKICAgICB2b2lkIGNsZWFySW5zcGVjdG9yQnJlYWtwb2ludFN0YXRl
KCk7CiAgICAgdm9pZCBjbGVhclBhdXNlRGV0YWlscygpOwpAQCAtMjQ4LDggKzI0Nyw4IEBAIHBy
aXZhdGU6CiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbV9wYXVzZWRHbG9iYWxPYmplY3QgeyBu
dWxscHRyIH07CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRDYWxsU3Rh
Y2s7CiAKLSAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3Bv
aW50SWQsIFByb3RvY29sQnJlYWtwb2ludD4gbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2Nv
bEJyZWFrcG9pbnRJRDsKLSAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQsIEpTQzo6QnJlYWtwb2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3Bv
aW50c0ZvclByb3RvY29sQnJlYWtwb2ludElEOworICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQsIFByb3RvY29sQnJlYWtwb2ludD4gbV9wcm90b2NvbEJyZWFrcG9p
bnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsKKyAgICBIYXNoTWFwPFByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludElkLCBKU0M6OkJyZWFrcG9pbnRzVmVjdG9yPiBtX2RlYnVnZ2VyQnJlYWtw
b2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsKICAgICBKU0M6OkJyZWFrcG9pbnRJRCBtX25l
eHREZWJ1Z2dlckJyZWFrcG9pbnRJRCB7IEpTQzo6bm9CcmVha3BvaW50SUQgKyAxIH07CiAKICAg
ICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJl
YWtwb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwCmluZGV4IDhjNjIxYWQ0MWM0ZGE1MDA0
M2QzMDIyMDBhNDZmYWU5ZWZjOTcxOGMuLjg1Y2VkOWYzZGY2MjIzMDFiOTVlMzNlNDkzNWNiYmYx
NjJiN2UzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcApAQCAtNTYsMjggKzU2LDI1IEBA
IHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJv
bnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzCiAKIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50Ojpl
bmFibGUoKQogewotICAgIGlmIChtX2VuYWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
SGVhcCBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSGVhcCBk
b21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKICAg
ICBtX2Vudmlyb25tZW50LnZtKCkuaGVhcC5hZGRPYnNlcnZlcih0aGlzKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvckhl
YXBBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKCFtX2VuYWJsZWQpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSGVhcCBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKQEAgLTg1LDE3ICs4MiwyMSBAQCB2
b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CiAgICAgbV9lbnZpcm9ubWVudC52bSgpLmhlYXAucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiAKICAg
ICBjbGVhckhlYXBTbmFwc2hvdHMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9ySGVhcEFnZW50OjpnYyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKCkKIHsKICAgICBWTSYgdm0gPSBtX2Vudmly
b25tZW50LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIHNhbml0aXplU3Rh
Y2tGb3JWTSh2bSk7CiAgICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29w
ZTo6RnVsbCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2Vu
dDo6c25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFw
c2hvdERhdGEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJv
dG9jb2w6OkhlYXA6OkhlYXBTbmFwc2hvdERhdGE+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBz
aG90KCkKIHsKICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwpAQCAtMTAzLDggKzEwNCw4IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50
OjpzbmFwc2hvdChFcnJvclN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBz
CiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIodm0uZW5zdXJlSGVhcFBy
b2ZpbGVyKCkpOwogICAgIHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKLSAgICAq
dGltZXN0YW1wID0gbV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKTsKLSAgICAqc25hcHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24o
WyZdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJiBub2RlKSB7CisgICAgYXV0byB0aW1lc3RhbXAg
PSBtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25k
cygpOworICAgIGF1dG8gc25hcHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24oWyZdIChj
b25zdCBIZWFwU25hcHNob3ROb2RlJiBub2RlKSB7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG5vZGUuY2VsbC0+c3RydWN0dXJlKHZtKSkgewogICAgICAgICAgICAgaWYgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCFtX2Vudmlyb25tZW50LmNhbkFjY2Vzc0luc3BlY3RlZFNj
cmlwdFN0YXRlKGdsb2JhbE9iamVjdCkpCkBAIC0xMTMsMzcgKzExNCw0NSBAQCB2b2lkIEluc3Bl
Y3RvckhlYXBBZ2VudDo6c25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwg
U3RyaW5nKiBzbmFwcwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwor
CisgICAgcmV0dXJuIHsgeyB0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSB9IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySGVhcEFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6c3Rh
cnRUcmFja2luZygpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCi0gICAgZG91Ymxl
IHRpbWVzdGFtcDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9y
U3RyaW5nLCAmdGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNu
YXBzaG90KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBz
aG90RGF0YV0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+dHJhY2tpbmdTdGFydCh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c3RvcFRyYWNraW5nKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckhlYXBBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSBm
YWxzZTsKIAotICAgIGRvdWJsZSB0aW1lc3RhbXA7Ci0gICAgU3RyaW5nIHNuYXBzaG90RGF0YTsK
LSAgICBzbmFwc2hvdChlcnJvclN0cmluZywgJnRpbWVzdGFtcCwgJnNuYXBzaG90RGF0YSk7Cisg
ICAgYXV0byByZXN1bHQgPSBzbmFwc2hvdCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwogCisgICAgYXV0
byBbdGltZXN0YW1wLCBzbmFwc2hvdERhdGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUodGltZXN0YW1wLCBzbmFw
c2hvdERhdGEpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotT3B0aW9uYWw8SGVhcFNuYXBzaG90
Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllcikKK09w
dGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBP
YmplY3RJZGVudGlmaWVyKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2ln
bmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKQogewogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2Zp
bGVyID0gbV9lbnZpcm9ubWVudC52bSgpLmhlYXBQcm9maWxlcigpOwogICAgIGlmICghaGVhcFBy
b2ZpbGVyKSB7CkBAIC0xNjYsOCArMTc1LDEwIEBAIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+
IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKEVycm9yCiAg
ICAgcmV0dXJuIG9wdGlvbmFsTm9kZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6Omdl
dFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjdElkLCBPcHRp
b25hbDxTdHJpbmc+JiByZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1
bmN0aW9uRGV0YWlscz4mIGZ1bmN0aW9uRGV0YWlscywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpPYmplY3RQcmV2aWV3PiYgb2JqZWN0UHJldmlldykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHN0ZDo6dHVwbGU8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRl
dGFpbHM+LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+Pj4gSW5zcGVj
dG9ySGVhcEFnZW50OjpnZXRQcmV2aWV3KGludCBoZWFwT2JqZWN0SWQpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBm
cm9tIGdldHRpbmcgY29sbGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9l
bnZpcm9ubWVudC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE3Niw1MyAr
MTg3LDQ4IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGhlYXBPYmplY3RJZCwKICAgICB1bnNpZ25lZCBoZWFwT2JqZWN0
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFwT2JqZWN0SWQpOwogICAgIGNv
bnN0IE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IG9wdGlvbmFsTm9kZSA9IG5vZGVGb3JIZWFw
T2JqZWN0SWRlbnRpZmllcihlcnJvclN0cmluZywgaGVhcE9iamVjdElkZW50aWZpZXIpOwogICAg
IGlmICghb3B0aW9uYWxOb2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBTdHJpbmcgcHJldmlldy4KICAgICBK
U0NlbGwqIGNlbGwgPSBvcHRpb25hbE5vZGUtPmNlbGw7Ci0gICAgaWYgKGNlbGwtPmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisg
ICAgICAgIHJldHVybiB7IHsgYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVlKCksIG51bGxwdHIs
IG51bGxwdHIgfSB9OwogCiAgICAgLy8gQmlnSW50IHByZXZpZXcuCi0gICAgaWYgKGNlbGwtPmlz
SGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IEpTQmlnSW50Ojp0cnlHZXRT
dHJpbmcodm0sIGFzSGVhcEJpZ0ludChjZWxsKSwgMTApOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmIChjZWxsLT5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBKU0Jp
Z0ludDo6dHJ5R2V0U3RyaW5nKHZtLCBhc0hlYXBCaWdJbnQoY2VsbCksIDEwKSwgbnVsbHB0ciwg
bnVsbHB0ciB9IH07CiAKICAgICAvLyBGSVhNRTogUHJvdmlkZSBwcmV2aWV3IGluZm9ybWF0aW9u
IGZvciBJbnRlcm5hbCBPYmplY3RzPyBDb2RlQmxvY2ssIEV4ZWN1dGFibGUsIGV0Yy4KIAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBpZiAoIXN0
cnVjdHVyZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBk
ZXRhaWxzIC0gU3RydWN0dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
c3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQg
b2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFnbG9iYWxP
YmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0
YWlscyAtIEdsb2JhbE9iamVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8g
Z2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3Jp
cHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMg
LSBJbmplY3RlZFNjcmlwdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5q
ZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7CiAKICAg
ICAvLyBGdW5jdGlvbiBwcmV2aWV3LgogICAgIGlmIChjZWxsLT5pbmhlcml0czxKU0Z1bmN0aW9u
Pih2bSkpIHsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRh
aWxzPiBmdW5jdGlvbkRldGFpbHM7CiAgICAgICAgIGluamVjdGVkU2NyaXB0LmZ1bmN0aW9uRGV0
YWlscyhlcnJvclN0cmluZywgY2VsbCwgZnVuY3Rpb25EZXRhaWxzKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoIWZ1bmN0aW9uRGV0YWlscykKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IHsgbnVsbFN0cmluZygp
LCBmdW5jdGlvbkRldGFpbHMsIG51bGxwdHIgfSB9OwogICAgIH0KIAogICAgIC8vIE9iamVjdCBw
cmV2aWV3LgotICAgIG9iamVjdFByZXZpZXcgPSBpbmplY3RlZFNjcmlwdC5wcmV2aWV3VmFsdWUo
Y2VsbCk7CisgICAgcmV0dXJuIHsgeyBudWxsU3RyaW5nKCksIG51bGxwdHIsIGluamVjdGVkU2Ny
aXB0LnByZXZpZXdWYWx1ZShjZWxsKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50
OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVj
dElkLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6
OmdldFJlbW90ZU9iamVjdChpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdy
b3VwKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIC8v
IFByZXZlbnQgdGhlIGNlbGwgZnJvbSBnZXR0aW5nIGNvbGxlY3RlZCBhcyB3ZSBsb29rIGl0IHVw
LgogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CkBAIC0yMzEsMjkgKzIzNywyNiBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0
UmVtb3RlT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGhlYXBPYmplYwogICAg
IHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhl
YXBPYmplY3RJZCk7CiAgICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gb3B0aW9u
YWxOb2RlID0gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5nLCBoZWFwT2Jq
ZWN0SWRlbnRpZmllcik7CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEpTQ2Vs
bCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+Y2VsbDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0
dXJlIl9zKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxPYmplY3QiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEds
b2JhbE9iamVjdCJfcyk7CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7Ci0g
ICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBk
ZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3MpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwID0g
b3B0aW9uYWxPYmplY3RHcm91cCA/ICpvcHRpb25hbE9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0g
ICAgcmVzdWx0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjZWxsLCBvYmplY3RHcm91cCwg
dHJ1ZSk7CisgICAgYXV0byBvYmplY3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGNlbGws
IG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5hYmxlIHRvIGNhc3QgT2JqZWN0Iik7CisK
KyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHN0YXRpYyBQcm90b2Nv
bDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgcHJvdG9jb2xUeXBlRm9ySGVhcE9wZXJh
dGlvbihDb2xsZWN0aW9uU2NvcGUgc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCmluZGV4IGRl
ZjZhY2RlOTQ2MGU3MTI4MDA0MWRhYTY1ZmNjZDY4NWUwZjdjMGYuLmNhYTUxMmQwYWIyZTEwYTg4
ZTBlZTYwYzJlMzJkNzQzOTQyMjI3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCkBAIC00MCw3
ICs0MCw2IEBAIHN0cnVjdCBIZWFwU25hcHNob3ROb2RlOwogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JIZWFwQWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSGVhcEJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciwgcHVibGljIEpTQzo6SGVhcE9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JIZWFwQWdlbnQpOwpAQCAtNTQsMTQgKzUzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwog
CiAgICAgLy8gSGVhcEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVy
cm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBnYyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc25hcHNo
b3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwc2hvdERhdGEp
IGZpbmFsOwotICAgIHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2
aWV3KEVycm9yU3RyaW5nJiwgaW50IGhlYXBPYmplY3RJZCwgT3B0aW9uYWw8U3RyaW5nPiYgcmVz
dWx0U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Jiwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFsOwotICAgIHZv
aWQgZ2V0UmVtb3RlT2JqZWN0KEVycm9yU3RyaW5nJiwgaW50IGhlYXBPYmplY3RJZCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbE9iamVjdEdyb3VwLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGdjKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxkb3Vi
bGUsIFByb3RvY29sOjpIZWFwOjpIZWFwU25hcHNob3REYXRhPj4gc25hcHNob3QoKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCkgZmluYWw7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCkgZmluYWw7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4+PiBnZXRQcmV2aWV3KGludCBoZWFwT2JqZWN0SWQpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gZ2V0UmVtb3RlT2JqZWN0KGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0R3JvdXApIGZpbmFsOwogCiAgICAgLy8gSlNDOjpIZWFwT2JzZXJ2ZXIKICAgICB2
b2lkIHdpbGxHYXJiYWdlQ29sbGVjdCgpIGZpbmFsOwpAQCAtNzMsNyArNzIsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KFByb3Rv
Y29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNl
Y29uZHMgZW5kVGltZSk7CiAKIHByaXZhdGU6Ci0gICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNo
b3ROb2RlPiBub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3JTdHJpbmcmLCB1bnNpZ25l
ZCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CisgICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNob3RO
b2RlPiBub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
dW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcEZy
b250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcAppbmRleCA5YWIxYWY3NGQ0MzM2MzcxZjY0OTI5YmY2MDY1YTQyY2UxYjk5
Zjg0Li4wNTFjOWYzMzY4MjhiZGUyOTk0MDJkM2NhNjkyMWU2ZTkyMjkzODBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTQ5LDE4ICs0OSw2IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgYm9vbCBhc0Jvb2woY29u
c3QgYm9vbCogYikKLXsKLSAgICByZXR1cm4gYiAmJiAqYjsKLX0KLQotc3RhdGljIGludCBhc0lu
dChjb25zdCBpbnQqIGkpCi17Ci0gICAgaWYgKGkpCi0gICAgICAgIHJldHVybiAqaTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQogSW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0b3JSdW50aW1lQWdl
bnQoQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKCJSdW50
aW1lIl9zKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNj
cmlwdE1hbmFnZXIpCkBAIC04MSwyNSArNjksNDYgQEAgc3RhdGljIFJlZjxQcm90b2NvbDo6UnVu
dGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGNvbnN0IEpTVG9rZW5Mb2MK
ICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBh
cnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2NvbDo6UnVu
dGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIE9wdGlvbmFsPFN0cmluZz4mIG1lc3NhZ2Us
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGUoKQorewor
ICAgIG1fZW5hYmxlZCA9IHRydWU7CisKKyAgICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKQorewor
ICAgIG1fZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKK30KKworUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JU
eXBlLCBTdHJpbmcgLyogbWVzc2FnZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJv
clJhbmdlPj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fdm0pOwogCiAgICAgUGFyc2VyRXJy
b3IgZXJyb3I7CiAgICAgY2hlY2tTeW50YXgobV92bSwgSlNDOjptYWtlU291cmNlKGV4cHJlc3Np
b24sIHsgfSksIGVycm9yKTsKIAorICAgIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpTeW50
YXhFcnJvclR5cGU+IHJlc3VsdDsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+IHJhbmdlOworCiAgICAgc3dpdGNoIChlcnJvci5z
eW50YXhFcnJvclR5cGUoKSkgewogICAgIGNhc2UgUGFyc2VyRXJyb3I6OlN5bnRheEVycm9yTm9u
ZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6
Ok5vbmU7CisgICAgICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5
cGU6Ok5vbmU7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3ludGF4
RXJyb3JJcnJlY292ZXJhYmxlOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6
OlN5bnRheEVycm9yVHlwZTo6SXJyZWNvdmVyYWJsZTsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6SXJyZWNvdmVyYWJsZTsKICAgICAgICAgYnJl
YWs7CisKICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvclVudGVybWluYXRlZExpdGVy
YWw6Ci0gICAgICAgICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
OjpVbnRlcm1pbmF0ZWRMaXRlcmFsOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGlt
ZTo6U3ludGF4RXJyb3JUeXBlOjpVbnRlcm1pbmF0ZWRMaXRlcmFsOwogICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgUGFyc2VyRXJyb3I6OlN5bnRheEVycm9yUmVjb3ZlcmFibGU6Ci0gICAgICAg
ICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJs
ZTsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6
UmVjb3ZlcmFibGU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTA3LDI5ICsxMTYsNDIg
QEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2MKICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3Nh
Z2UoKTsKICAgICAgICAgcmFuZ2UgPSBidWlsZEVycm9yUmFuZ2VPYmplY3QoZXJyb3IudG9rZW4o
KS5tX2xvY2F0aW9uKTsKICAgICB9CisKKyAgICByZXR1cm4geyB7ICpyZXN1bHQsIG1lc3NhZ2Us
IFdURk1vdmUocmFuZ2UpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2
YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwg
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUs
IGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29u
c3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJlICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0
aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxi
b29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAq
Lz4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVD
b21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUs
IE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVS
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewotICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVy
cm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9u
YWw8Ym9vbD4gd2FzVGhyb3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsK
IAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9p
bnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwog
Ci0gICAgYm9vbCBwYXVzZUFuZE11dGUgPSBhc0Jvb2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlKTsKKyAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGRvTm90UGF1c2VPbkV4Y2Vw
dGlvbnNBbmRNdXRlQ29uc29sZS52YWx1ZU9yKGZhbHNlKTsKICAgICBpZiAocGF1c2VBbmRNdXRl
KSB7CiAgICAgICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxh
Y2UoKTsKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3RlZFNjcmlw
dC5ldmFsdWF0ZShlcnJvclN0cmluZywgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0
R3JvdXAgOiBTdHJpbmcoKSwgYXNCb29sKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIGFzQm9vbChy
ZXR1cm5CeVZhbHVlKSwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0
KSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIGluamVjdGVkU2Ny
aXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLnZhbHVlT3IoZmFsc2UpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFs
c2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihm
YWxzZSksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIGlmIChw
YXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0
dXJuIHsge3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1v
dmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBib29s
KiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wq
IHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQg
SW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiBwcm9taXNlT2JqZWN0SWQsIE9wdGlvbmFsPGJvb2w+JiYgcmV0
dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJv
b2w+JiYgc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQog
ewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChwcm9taXNlT2JqZWN0SWQpOwogICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTEzNywyMTkgKzE1OSwyNDQgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHBy
b21pc2VPYmplY3RJZCwgY29uc3QgYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlu
amVjdGVkU2NyaXB0LmF3YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIGFzQm9vbChyZXR1cm5C
eVZhbHVlKSwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0KSwgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgewotICAg
ICAgICBpZiAoIWVycm9yU3RyaW5nLmlzRW1wdHkoKSkKKyAgICBpbmplY3RlZFNjcmlwdC5hd2Fp
dFByb21pc2UocHJvbWlzZU9iamVjdElkLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBn
ZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSks
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgcmVz
dWx0LCBPcHRpb25hbDxib29sPiYmIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYmIHNhdmVkUmVz
dWx0SW5kZXgpIHsKKyAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBjYWxsYmFjay0+
c2VuZEZhaWx1cmUoZXJyb3JTdHJpbmcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
YmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShyZXN1bHQpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0
SW5kZXgpOworICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKHJlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkp
OwogICAgIH0pOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9u
T24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50
cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25z
dCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0
IGJvb2wqIC8qIGVtdWxhdGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0SWQmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIFJl
ZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFs
dWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIC8q
IGVtdWxhdGVVc2VyR2VzdHVyZSAqLykKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQo
b2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVj
dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKIAotICAgIFN0cmluZyBhcmd1bWVudHM7Ci0gICAgaWYgKG9wdGlvbmFs
QXJndW1lbnRzKQotICAgICAgICBhcmd1bWVudHMgPSBvcHRpb25hbEFyZ3VtZW50cy0+dG9KU09O
U3RyaW5nKCk7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CisK
KyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAg
IE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFy
aWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlv
bkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogCi0gICAgYm9vbCBwYXVzZUFuZE11dGUgPSBhc0Jv
b2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKTsKKyAgICBib29sIHBhdXNl
QW5kTXV0ZSA9IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZS52YWx1ZU9yKGZh
bHNlKTsKICAgICBpZiAocGF1c2VBbmRNdXRlKSB7CiAgICAgICAgIHRlbXBvcmFyaWx5RGlzYWJs
ZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsK
ICAgICB9CiAKLSAgICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywg
b2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBh
c0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcmVzdWx0LCB3YXNUaHJvd24pOworICAgIGluamVjdGVk
U2NyaXB0LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZnVuY3Rpb25EZWNs
YXJhdGlvbiwgYXJndW1lbnRzID8gYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSA6IG51bGxTdHJp
bmcoKSwgcmV0dXJuQnlWYWx1ZS52YWx1ZU9yKGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVl
T3IoZmFsc2UpLCByZXN1bHQsIHdhc1Rocm93bik7CiAKICAgICBpZiAocGF1c2VBbmRNdXRlKQog
ICAgICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IHsgcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSB9IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQ
cmV2aWV3PiYgcHJldmlldykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
UnVudGltZTo6T2JqZWN0UHJldmlldz4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJldmll
dyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3Jp
cHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFs
dWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBm
b3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCiAgICAg
SlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAgICAgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogCisgICAgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiBwcmV2aWV3OworCiAgICAgbXV0
ZUNvbnNvbGUoKTsKIAogICAgIGluamVjdGVkU2NyaXB0LmdldFByZXZpZXcoZXJyb3JTdHJpbmcs
IG9iamVjdElkLCBwcmV2aWV3KTsKIAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICgh
cHJldmlldykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKwor
ICAgIHJldHVybiBwcmV2aWV3LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgYm9vbCogb3duUHJvcGVydGllcywgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5
RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIE9wdGlvbmFsPGJvb2w+JiYgb3duUHJvcGVydGll
cywgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50
LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2Jq
ZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNO
b1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3Rl
ZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKIAotICAgIGludCBzdGFydCA9IGFzSW50
KGZldGNoU3RhcnQpOwotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaW50IHN0YXJ0ID0gZmV0Y2hTdGFydC52YWx1ZU9yKDApOworICAgIGlmIChzdGFy
dCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiZmV0Y2hTdGFydCBjYW5ub3Qg
YmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW50IGNvdW50ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0g
ICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaENvdW50IGNh
bm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgY291
bnQgPSBmZXRjaENvdW50LnZhbHVlT3IoMCk7CisgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7
CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4gcHJvcGVydGllczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiBpbnRlcm5hbFByb3BlcnRp
ZXM7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2Vy
KTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7
CiAKICAgICBtdXRlQ29uc29sZSgpOwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGll
cyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChvd25Qcm9wZXJ0aWVzKSwgc3RhcnQsIGNv
dW50LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcHJvcGVydGllcyk7CisgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0UHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIG93blByb3BlcnRpZXMu
dmFsdWVPcihmYWxzZSksIHN0YXJ0LCBjb3VudCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFs
c2UpLCBwcm9wZXJ0aWVzKTsKIAogICAgIC8vIE9ubHkgaW5jbHVkZSBpbnRlcm5hbCBwcm9wZXJ0
aWVzIGZvciB0aGUgZmlyc3QgZmV0Y2guCiAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNC
b29sKGdlbmVyYXRlUHJldmlldyksIGludGVybmFsUHJvcGVydGllcyk7CisgICAgICAgIGluamVj
dGVkU2NyaXB0LmdldEludGVybmFsUHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGdl
bmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKIAogICAg
IHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IHsgcHJvcGVydGll
cy5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGludGVybmFsUHJvcGVydGllcykgfSB9OwogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5
RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoY29uc3QgUHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdl
bmVyYXRlUHJldmlldykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmpl
Y3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9i
amVjdElkIl9zKTsKIAotICAgIGludCBzdGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwotICAgIGlm
IChzdGFydCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBjYW5ub3Qg
YmUgbmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IHN0YXJ0ID0g
ZmV0Y2hTdGFydC52YWx1ZU9yKDApOworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0g
ICAgaW50IGNvdW50ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50LnZhbHVl
T3IoMCk7CisgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4gcHJvcGVydGll
czsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQ
cm9wZXJ0eURlc2NyaXB0b3I+PiBpbnRlcm5hbFByb3BlcnRpZXM7CiAKICAgICBKU0M6OkRlYnVn
Z2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7CiAKICAgICBtdXRlQ29uc29sZSgp
OwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgc3RhcnQsIGNvdW50LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcHJv
cGVydGllcyk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgc3RhcnQsIGNvdW50LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVP
cihmYWxzZSksIHByb3BlcnRpZXMpOwogCiAgICAgLy8gT25seSBpbmNsdWRlIGludGVybmFsIHBy
b3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBmZXRjaC4KICAgICBpZiAoIXN0YXJ0KQotICAgICAgICBp
bmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElk
LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKKyAgICAgICAg
aW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJ
ZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBpbnRlcm5hbFByb3BlcnRpZXMpOwog
CiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyBwcm9w
ZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUoaW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmllcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRj
aENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlv
bkVudHJ5Pj4mIGVudHJpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4+IEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdElkJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRG
b3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVj
dGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50
IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7
CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRj
aFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChm
ZXRjaENvdW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
ImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQg
PCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJl
IG5lZ2F0aXZlIl9zKTsKIAotICAgIGluamVjdGVkU2NyaXB0LmdldENvbGxlY3Rpb25FbnRyaWVz
KGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBTdHJp
bmcoKSwgc3RhcnQsIGNvdW50LCBlbnRyaWVzKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4gZW50cmllczsKKworICAgIGluamVj
dGVkU2NyaXB0LmdldENvbGxlY3Rpb25FbnRyaWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb2Jq
ZWN0R3JvdXAsIHN0YXJ0LCBjb3VudCwgZW50cmllcyk7CisKKyAgICBpZiAoIWVudHJpZXMpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4g
ZW50cmllcy5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6c2F2ZVJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVj
dCYgY2FsbEFyZ3VtZW50LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPE9wdGlvbmFs
PGludD4gLyogc2F2ZVJlc3VsdEluZGV4ICovPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNhdmVS
ZXN1bHQoUmVmPEpTT046Ok9iamVjdD4mJiBjYWxsQXJndW1lbnQsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0OwogCi0gICAgU3RyaW5nIG9iamVjdElkOwotICAgIGlmIChjYWxs
QXJndW1lbnQuZ2V0U3RyaW5nKCJvYmplY3RJZCJfcywgb2JqZWN0SWQpKSB7Ci0gICAgICAgIGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JP
YmplY3RJZChvYmplY3RJZCk7Ci0gICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0
IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIGF1dG8gb2JqZWN0SWQg
PSBjYWxsQXJndW1lbnQtPmdldFN0cmluZyhQcm90b2NvbDo6UnVudGltZTo6Q2FsbEFyZ3VtZW50
OjpvYmplY3RJZEtleSk7CisgICAgaWYgKCFvYmplY3RJZCkgeworICAgICAgICBpbmplY3RlZFNj
cmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRp
b25Db250ZXh0SWQpKTsKICAgICAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsK
KyAgICAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9i
amVjdElkIl9zKTsKICAgICB9Ci0gICAgCi0gICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChl
cnJvclN0cmluZywgY2FsbEFyZ3VtZW50LnRvSlNPTlN0cmluZygpLCBzYXZlZFJlc3VsdEluZGV4
KTsKKworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsKKworICAgIGluamVjdGVk
U2NyaXB0LnNhdmVSZXN1bHQoZXJyb3JTdHJpbmcsIGNhbGxBcmd1bWVudC0+dG9KU09OU3RyaW5n
KCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgaWYgKCFzYXZlZFJlc3VsdEluZGV4KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIFdU
Rk1vdmUoc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpzZXRTYXZlZFJlc3VsdEFsaWFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBhbGlhcykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0
U2F2ZWRSZXN1bHRBbGlhcyhjb25zdCBTdHJpbmcmIHNhdmVkUmVzdWx0QWxpYXMpCiB7Ci0gICAg
T3B0aW9uYWw8U3RyaW5nPiBzYXZlZFJlc3VsdEFsaWFzOwotICAgIGlmIChhbGlhcyAmJiAhYWxp
YXMtPmlzRW1wdHkoKSkKLSAgICAgICAgc2F2ZWRSZXN1bHRBbGlhcyA9ICphbGlhczsKICAgICBt
X2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEhvc3QoKS5zZXRTYXZlZFJlc3Vs
dEFsaWFzKHNhdmVkUmVzdWx0QWxpYXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIG9iamVjdElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
UnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9i
amVjdElkKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAg
aW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChvYmplY3RJZCk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
cmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNB
dE9mZnNldHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgbG9j
YXRpb25zLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2Ny
aXB0aW9uPj4mIHR5cGVEZXNjcmlwdGlvbnMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4+IEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKFJl
ZjxKU09OOjpBcnJheT4mJiBsb2NhdGlvbnMpCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIAotICAgIHR5cGVEZXNjcmlwdGlvbnMgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKLSAgICBpZiAo
IW1fdm0udHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5v
IHR5cGUgaW5mb3JtYXRpb24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFt
X3ZtLnR5cGVQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlZNIGhh
cyBubyB0eXBlIGluZm9ybWF0aW9uIl9zKTsKKworICAgIGF1dG8gdHlwZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKIAogICAg
IE1vbm90b25pY1RpbWUgc3RhcnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBtX3ZtLnR5
cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhtX3ZtLCAiVXNlciBRdWVyeSJfcyk7
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGgoKTsgaSsrKSB7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBsb2NhdGlvbnMuZ2V0KGkpOwot
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBsb2NhdGlvbjsKLSAgICAgICAgaWYgKCF2YWx1
ZS0+YXNPYmplY3QobG9jYXRpb24pKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1vYmplY3QgaXRlbSBpbiBsb2NhdGlvbnMiX3M7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy0+bGVu
Z3RoKCk7IGkrKykgeworICAgICAgICBhdXRvIGxvY2F0aW9uID0gbG9jYXRpb25zLT5nZXQoaSkt
PmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxvY2F0aW9ucyJf
cyk7CiAKLSAgICAgICAgaW50IGRlc2NyaXB0b3I7Ci0gICAgICAgIFN0cmluZyBzb3VyY2VJREFz
U3RyaW5nOwotICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2Vy
KCJ0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yIl9zLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgbG9j
YXRpb24tPmdldFN0cmluZygic291cmNlSUQiX3MsIHNvdXJjZUlEQXNTdHJpbmcpOwotICAgICAg
ICBsb2NhdGlvbi0+Z2V0SW50ZWdlcigiZGl2b3QiX3MsIGRpdm90KTsKKyAgICAgICAgYXV0byBk
ZXNjcmlwdG9yID0gbG9jYXRpb24tPmdldEludGVnZXIoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVM
b2NhdGlvbjo6dHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcktleSkudmFsdWVPcihUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsKTsKKyAgICAgICAgYXV0byBzb3VyY2VJRFN0cmluZyA9
IGxvY2F0aW9uLT5nZXRTdHJpbmcoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6c291
cmNlSURLZXkpOworICAgICAgICBhdXRvIGRpdm90ID0gbG9jYXRpb24tPmdldEludGVnZXIoUHJv
dG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6ZGl2b3RLZXkpLnZhbHVlT3IoMCk7CiAKICAg
ICAgICAgYm9vbCBva2F5OwotICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1f
dm0udHlwZVByb2ZpbGVyKCktPmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURBc1N0cmluZy50
b0ludFB0clN0cmljdCgmb2theSksIHN0YXRpY19jYXN0PFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3I+KGRlc2NyaXB0b3IpLCBtX3ZtKTsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9j
YXRpb24gPSBtX3ZtLnR5cGVQcm9maWxlcigpLT5maW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlE
U3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgc3RhdGljX2Nhc3Q8VHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIG1fdm0pOwogICAgICAgICBBU1NFUlQob2theSk7
CiAKICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IHR5cGVTZXQ7CkBAIC0zNzIsMTIgKzQxOSwxNCBA
QCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVz
QXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcgogICAgICAgICAgICAgZGVzY3JpcHRpb24tPnNldElz
VHJ1bmNhdGVkKHR5cGVTZXQtPmlzT3ZlcmZsb3duKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
dHlwZURlc2NyaXB0aW9ucy0+YWRkSXRlbShXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CisgICAgICAg
IHR5cGVzLT5hZGRJdGVtKFdURk1vdmUoZGVzY3JpcHRpb24pKTsKICAgICB9CiAKICAgICBNb25v
dG9uaWNUaW1lIGVuZCA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nRigiSW5zcGVjdG9yOjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNB
dE9mZnNldHMgdG9vayAlbGZtc1xuIiwgKGVuZCAtIHN0YXJ0KS5taWxsaXNlY29uZHMoKSk7CisK
KyAgICByZXR1cm4gV1RGTW92ZSh0eXBlcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
ciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKQpAQCAtMzg5LDI4ICs0MzgsMzUgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24gcmVhc28KICAgICBpZiAocmVhc29uICE9IERpc2Nvbm5lY3RSZWFz
b246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCAmJiBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQp
CiAgICAgICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CiAKLSAgICBTdHJp
bmcgdW51c2VkOwotICAgIGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
bmFibGVUeXBlUHJvZmlsZXIoKQogewogICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZSh0
cnVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpkaXNhYmxlVHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcigpCiB7
CiAgICAgc2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250cm9sRmxvd1By
b2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcigpCiB7CiAgICAgc2V0
Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZSh0cnVlKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlQ29udHJvbEZsb3dQcm9m
aWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRD
b250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRUeXBlUHJvZmlsZXJFbmFibGVk
U3RhdGUoYm9vbCBpc1R5cGVQcm9maWxpbmdFbmFibGVkKQpAQCAtNDQyLDE5ICs0OTgsMTMgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVk
U3RhdGUoYm9vbCBpc0NvbnRyb2xGbG8KICAgICB9KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6QmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCkKIHsKLSAgICBpZiAoIW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIlZNIGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJWTSBoYXMgbm8gY29udHJvbCBmbG93IGlu
Zm9ybWF0aW9uIl9zKTsKIAotICAgIGJvb2wgb2theTsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRCA9
IHNvdXJjZUlEQXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpOwotICAgIEFTU0VSVChva2F5
KTsKLSAgICBjb25zdCBWZWN0b3I8QmFzaWNCbG9ja1JhbmdlPiYgYmFzaWNCbG9ja1JhbmdlcyA9
IG1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNv
dXJjZUlELCBtX3ZtKTsKLSAgICBiYXNpY0Jsb2NrcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkJhc2ljQmxvY2s+OjpjcmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IEJhc2ljQmxv
Y2tSYW5nZSYgYmxvY2sgOiBiYXNpY0Jsb2NrUmFuZ2VzKSB7CisgICAgYXV0byBiYXNpY0Jsb2Nr
cyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+OjpjcmVhdGUo
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGJsb2NrIDogbV92bS5jb250cm9sRmxvd1Byb2ZpbGVy
KCktPmdldEJhc2ljQmxvY2tzRm9yU291cmNlSUQoc291cmNlSUQudG9JbnRQdHIoKSwgbV92bSkp
IHsKICAgICAgICAgYXV0byBsb2NhdGlvbiA9IFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2Nr
OjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFN0YXJ0T2Zmc2V0KGJsb2NrLm1fc3RhcnRPZmZz
ZXQpCiAgICAgICAgICAgICAuc2V0RW5kT2Zmc2V0KGJsb2NrLm1fZW5kT2Zmc2V0KQpAQCAtNDYz
LDYgKzUxMyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNpY0Jsb2NrcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluCiAgICAgICAgICAgICAucmVsZWFz
ZSgpOwogICAgICAgICBiYXNpY0Jsb2Nrcy0+YWRkSXRlbShXVEZNb3ZlKGxvY2F0aW9uKSk7CiAg
ICAgfQorICAgIHJldHVybiBXVEZNb3ZlKGJhc2ljQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4IDE3NTYxNTExYWY5
NzliM2IyYjc5MWM3NGRkNzI3ZDRhZTMxMjRlY2UuLmY0MDI5NDZmZjZkYWE4OGM0ODVkMDk3YWFj
NjFjMWQ5ZWJmYzA5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBAIC00NSw3ICs0
NSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNs
YXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JSdW50aW1lQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUnVudGltZUFnZW50KTsKQEAg
LTU4LDMzICs1NywzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIFJ1bnRpbWVCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRl
IHsgbV9lbmFibGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92
ZXJyaWRlIHsgbV9lbmFibGVkID0gZmFsc2U7IH0KLSAgICB2b2lkIHBhcnNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJy
b3JUeXBlKiByZXN1bHQsIE9wdGlvbmFsPFN0cmluZz4mIG1lc3NhZ2UsIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBmaW5hbDsKLSAgICB2b2lkIGV2YWx1YXRlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdy
b3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJl
dmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0
dXJlLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBhd2FpdFByb21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2Jq
ZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJl
dmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYm
KSBmaW5hbDsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpBcnJh
eSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2Vu
ZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBj
b25zdCBFcnJvclN0cmluZyYgb2JqZWN0SWQpIGZpbmFsOwotICAgIHZvaWQgZ2V0UHJldmlldyhF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4mKSBmaW5hbDsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0
aWVzLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwgY29uc3Qg
Ym9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVu
dGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBpbnRl
cm5hbFByb3BlcnRpZXMpIGZpbmFsOwotICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgaW50KiBmZXRjaFN0
YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBmaW5hbDsK
LSAgICB2b2lkIGdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50KiBmZXRjaFN0
YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykgZmluYWw7Ci0gICAgdm9pZCBz
YXZlUmVzdWx0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3Vs
dEluZGV4KSBmaW5hbDsKLSAgICB2b2lkIHNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcqIGFsaWFzKSBmaW5hbDsKLSAgICB2b2lkIHJlbGVhc2VPYmplY3RHcm91
cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOwotICAgIHZv
aWQgZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29u
c3QgSlNPTjo6QXJyYXkmIGxvY2F0aW9ucywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JikgZmluYWw7Ci0gICAgdm9pZCBlbmFibGVUeXBl
UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGVUeXBlUHJvZmls
ZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZUNvbnRyb2xGbG93UHJvZmls
ZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGVDb250cm9sRmxvd1Byb2Zp
bGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBnZXRCYXNpY0Jsb2NrcyhFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgaW5fc291cmNlSUQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIG91dF9iYXNpY0Jsb2NrcykgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRh
eEVycm9yVHlwZSwgU3RyaW5nIC8qIG1lc3NhZ2UgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6RXJyb3JSYW5nZT4+PiBwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlv
bmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJv
b2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKSBvdmVycmlkZTsKKyAgICB2b2lkIGF3YWl0
UHJvbWlzZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25h
bDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3
LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4m
JikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93
biAqLz4+IGNhbGxGdW5jdGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3RJZCYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFy
cmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8
Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0
dXJlKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxlYXNl
T2JqZWN0KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYpIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0
UHJldmlldz4+IGdldFByZXZpZXcoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+Pj4gZ2V0UHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0SWQmLCBPcHRpb25hbDxib29sPiYmIG93blByb3BlcnRpZXMsIE9wdGlvbmFsPGludD4m
JiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3VudCwgT3B0aW9uYWw8Ym9vbD4m
JiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVz
Y3JpcHRvcj4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJu
YWxQcm9wZXJ0eURlc2NyaXB0b3I+Pj4+IGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hT
dGFydCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJh
dGVQcmV2aWV3KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4+IGdldENvbGxlY3Rp
b25FbnRyaWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25h
bDxpbnQ+JiYgZmV0Y2hDb3VudCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVzdWx0SW5kZXggKi8+IHNhdmVSZXN1bHQoUmVmPEpTT046
Ok9iamVjdD4mJiBjYWxsQXJndW1lbnQsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFNhdmVkUmVzdWx0QWxpYXMoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+Pj4gZ2V0UnVudGltZVR5cGVzRm9yVmFy
aWFibGVzQXRPZmZzZXRzKFJlZjxKU09OOjpBcnJheT4mJiBsb2NhdGlvbnMpIGZpbmFsOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZVR5cGVQcm9maWxlcigpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGVUeXBlUHJvZmlsZXIo
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGVDb250cm9s
Rmxvd1Byb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
ZGlzYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+
PiBnZXRCYXNpY0Jsb2Nrcyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKSBmaW5hbDsKIAogcHJvdGVj
dGVkOgogICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmKTsKIAogICAgIElu
amVjdGVkU2NyaXB0TWFuYWdlciYgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXI7IH0KIAotICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9y
RXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6
RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgbXV0ZUNvbnNv
bGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVubXV0ZUNvbnNvbGUoKSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3Jp
cHRQcm9maWxlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDY4MTNlMDc1YTk0YjM2
MzFmYjUyZWFkZDljZTc5OWI5YzdkY2Q4ZGUuLjdlYjUxYWYzMGZkYTgwMmNhODFhOGIxMGVjZDdl
NmViZWUyMjExN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
Y3BwCkBAIC02NCwxMCArNjQsMTAgQEAgdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc28KICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJv
clN0cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1ZGVTYW1wbGVzKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhP
cHRpb25hbDxib29sPiYmIGluY2x1ZGVTYW1wbGVzKQogewogICAgIGlmIChtX3RyYWNraW5nKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNraW5nID0g
dHJ1ZTsKIApAQCAtOTEsMTIgKzkxLDE0IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1CiAgICAg
bV9lbnZpcm9ubWVudC5kZWJ1Z2dlcigpLnNldFByb2ZpbGluZ0NsaWVudCh0aGlzKTsKIAogICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KHN0b3B3YXRjaC5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJh
Y2tpbmcoKQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogICAgIG1fYWN0aXZlRXZh
bHVhdGVTY3JpcHQgPSBmYWxzZTsKQEAgLTEwNCw2ICsxMDYsOCBAQCB2b2lkIEluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV9lbnZp
cm9ubWVudC5kZWJ1Z2dlcigpLnNldFByb2ZpbGluZ0NsaWVudChudWxscHRyKTsKIAogICAgIHRy
YWNraW5nQ29tcGxldGUoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9y
U2NyaXB0UHJvZmlsZXJBZ2VudDo6aXNBbHJlYWR5UHJvZmlsaW5nKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlw
dFByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuaAppbmRleCA3ZTdjZGM5Zjk3NTA2Nzc2NjI5
NzQwYWFkY2I1NGZiNGRhMDBkMDhmLi4yOGY1NDg4ZDBhZmMwNjNiMjlkZDBmZjdjZGQ1MGU1ZDUw
YTY0Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oCkBAIC0z
NywyNyArMzcsMjUgQEAgY2xhc3MgUHJvZmlsZTsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJ
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50
QmFzZSwgcHVibGljIFNjcmlwdFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJs
aWMgSlNDOjpEZWJ1Z2dlcjo6UHJvZmlsaW5nQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KEFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KCkgZmluYWw7Cisg
ICAgfkluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFn
ZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91
dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOworICAgIHZvaWQgZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFz
b24pOwogCiAgICAgLy8gU2NyaXB0UHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAg
ICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBpbmNsdWRlU2Ft
cGxlcykgZmluYWw7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKE9wdGlvbmFs
PGJvb2w+JiYgaW5jbHVkZVNhbXBsZXMpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6UHJvZmlsaW5nQ2xp
ZW50Ci0gICAgYm9vbCBpc0FscmVhZHlQcm9maWxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBTZWNv
bmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgpIGZpbmFsOwotICAgIHZvaWQgZGlkRXZhbHVhdGVTY3Jp
cHQoU2Vjb25kcywgSlNDOjpQcm9maWxpbmdSZWFzb24pIGZpbmFsOworICAgIGJvb2wgaXNBbHJl
YWR5UHJvZmlsaW5nKCkgY29uc3Q7CisgICAgU2Vjb25kcyB3aWxsRXZhbHVhdGVTY3JpcHQoKTsK
KyAgICB2b2lkIGRpZEV2YWx1YXRlU2NyaXB0KFNlY29uZHMsIEpTQzo6UHJvZmlsaW5nUmVhc29u
KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGFkZEV2ZW50KFNlY29uZHMgc3RhcnRUaW1lLCBTZWNv
bmRzIGVuZFRpbWUsIEpTQzo6UHJvZmlsaW5nUmVhc29uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFn
ZW50LmNwcAppbmRleCA4ZmNiNWExZTU1NzUwZDMyNWE4NDgyNGQ4NmM0OWNmZTZmYjA0MjY4Li41
MDhlYjAyZWM5NWM1MjQwODM4NGExZTJiNzc2NDhhZmQ0MjZkZDlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
VGFyZ2V0QWdlbnQuY3BwCkBAIC01NSwzNiArNTUsMzYgQEAgdm9pZCBJbnNwZWN0b3JUYXJnZXRB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKICAg
ICBtX3Nob3VsZFBhdXNlT25TdGFydCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvclRhcmdl
dEFnZW50OjpzZXRQYXVzZU9uU3RhcnQoRXJyb3JTdHJpbmcmLCBib29sIHBhdXNlT25TdGFydCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50OjpzZXRQ
YXVzZU9uU3RhcnQoYm9vbCBwYXVzZU9uU3RhcnQpCiB7CiAgICAgbV9zaG91bGRQYXVzZU9uU3Rh
cnQgPSBwYXVzZU9uU3RhcnQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
clRhcmdldEFnZW50OjpyZXN1bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRhcmdldElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGFy
Z2V0QWdlbnQ6OnJlc3VtZShjb25zdCBTdHJpbmcmIHRhcmdldElkKQogewogICAgIGF1dG8qIHRh
cmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3MpOwog
Ci0gICAgaWYgKCF0YXJnZXQtPmlzUGF1c2VkKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmICghdGFyZ2V0LT5pc1BhdXNlZCgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIlRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQgaXMgbm90IHBhdXNlZCJf
cyk7CiAKICAgICB0YXJnZXQtPnJlc3VtZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6c2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50Ojpz
ZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKICAgICBJbnNwZWN0b3JUYXJnZXQqIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQo
dGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1p
c3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3MpOwogCiAgICAgdGFyZ2V0LT5zZW5kTWVz
c2FnZVRvVGFyZ2V0QmFja2VuZChtZXNzYWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clRhcmdldEFnZW50LmgKaW5kZXggYjkyOWRkZmZlMjljM2ZiMDg4YWI2NzE0MDg3Yzk5MzAyYzI3
NTIxNC4uZWRjZDQ4OWI3NmUwODA4MjdlMDc0MWYxNGJhYjA5ZjllYTkzMDNkNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JUYXJnZXRBZ2VudC5oCkBAIC0zNSwyMyArMzUsMjEgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKIGNsYXNzIEluc3BlY3RvclRhcmdldDsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclRhcmdldEFnZW50IGZpbmFs
IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFRhcmdldEJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0QWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rv
clRhcmdldEFnZW50KEZyb250ZW5kUm91dGVyJiwgQmFja2VuZERpc3BhdGNoZXImKTsKLSAgICB+
SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yVGFyZ2V0QWdlbnQo
KTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsK
LSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24p
IGZpbmFsOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91
dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gVGFyZ2V0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRQYXVzZU9uU3RhcnQoRXJyb3JTdHJpbmcmLCBib29s
IHBhdXNlT25TdGFydCkgZmluYWw7Ci0gICAgdm9pZCByZXN1bWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHRhcmdldElkKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXQo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlT25T
dGFydChib29sKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZXN1bWUoY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2VuZE1lc3NhZ2VUb1RhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwogCiAgICAgLy8gVGFyZ2V0IGxpZmVjeWNsZS4KICAgICB2b2lkIHRhcmdldENy
ZWF0ZWQoSW5zcGVjdG9yVGFyZ2V0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
LmNwcAppbmRleCA0YmZhOWY1YWE3ZmRlMTU0YjUzM2M4ZjIzY2Q3YmFlNjc3NThhYjAwLi4yOWZj
ZWM5N2JiOGU3ZjQ3NzJkNGQ3Y2M4ZmFkNmM5MjMxNzFmODk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgSlNHbG9iYWxPYmplY3RBdWRp
dEFnZW50OjpKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoSlNBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudDo6fkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgp
ID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQq
IGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYg
ZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQg
Zm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oCmluZGV4IDdkNDY3MGQwNGRjN2ZkMzMw
ODNhMTUwNjFkMzc3NjViMWE2YzNlZTYuLjU4NGQwNTAyNjQ1ODliNDgwNWM2MWI0YzRkYmEzODE5
OWE2ZmVkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oCkBAIC0zOCwxMCAr
MzgsMTAgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIElu
c3BlY3RvckF1ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5K
U0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoKSBmaW5hbDsKKyAgICB+SlNHbG9iYWxPYmplY3RBdWRp
dEFnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFs
OworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmKTsKIAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIG1fZ2xvYmFsT2JqZWN0OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDI1NTFlN2E0MjM5
Mzk5NWQ2YTNlZWE5Y2U0OTE3NDlhMzg3ODkxODkuLjNiNzAyODc4YTFjYTUxNjI0NDA5OTlmNGU2
NGI1M2ZjMzRmOTUzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
LmNwcApAQCAtNDQsNyArNDQsNyBAQCBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OkpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dAogCiBKU0dsb2Jh
bE9iamVjdERlYnVnZ2VyQWdlbnQ6On5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSA9IGRl
ZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdERlYnVnZ2Vy
QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYm
IGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVk
IGZvciBKU0NvbnRleHRzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9z
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaAppbmRleCA2Zjc5Mjc4ZDUz
MzE3MWUxZmRkMGFlZmU5ZGQyOWIzM2JmZDFmZTk1Li4xMDBmYjIzZTMxNWRmMDQ3ZjlmODU2Y2Nj
OWE1YTZmODBlODNkNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQu
aApAQCAtMzYsMTggKzM2LDE4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSlNB
Z2VudENvbnRleHQmLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqKTsKLSAgICB+SlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50KCkgZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2Vu
dCgpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9p
bnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSkgZmlu
YWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmIGRhdGEpOwogCiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKSBmaW5hbDsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlv
bkNvbnRleHRJZD4mJik7CiAKICAgICAvLyBOT1RFOiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2Vz
IG5vdCB5ZXQgbmVlZCB0byBtdXRlIGEgY29uc29sZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAg
Ly8gYXJlIHNlbnQgdG8gdGhlIGNvbnNvbGUgb3V0c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9y
IGNvbnNvbGUgb2JqZWN0LgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHVubXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9
CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKICAgICBJbnNwZWN0b3JDb25zb2xlQWdl
bnQqIG1fY29uc29sZUFnZW50IHsgbnVsbHB0ciB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2Jq
ZWN0UnVudGltZUFnZW50LmNwcAppbmRleCBjODY2OWVlMGFhNWI4Y2E4NGU1ZDI5NDM3ZjM0NDQ3
MWMxZjlhMDYwLi5lMjU0NDg3NDhmMTRlNTBhMmZjNWNkZTc2YjA2ODkwMmIwMzgzYjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9i
amVjdFJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCkBAIC00Myw5ICs0MywxMiBA
QCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQo
SlNBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50Ojp+
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVj
dGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2
YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7Ci0g
ICAgQVNTRVJUX1VOVVNFRChleGVjdXRpb25Db250ZXh0SWQsICFleGVjdXRpb25Db250ZXh0SWQp
OworICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAi
ZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhl
cmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CisgICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdCgpOworICAgIH0KIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3IoJm1fZ2xvYmFsT2Jq
ZWN0KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xv
YmFsT2JqZWN0UnVudGltZUFnZW50LmgKaW5kZXggNmYwY2U5MDU5ZDcyMzM4Mzc4YjFkNDdhNzFh
NzI1YzM5MmNkMjc3YS4uYmZlYmRhOTJhMDhhOTFkMzhjZTJjNTE3NTY3OTY3MzFkNTlhMmM5YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9i
YWxPYmplY3RSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCkBAIC0zOSwxNSArMzksMTUg
QEAgY2xhc3MgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVj
dG9yUnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5K
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgpIGZpbmFsOworICAgIH5KU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBm
aW5hbDsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRJZD4mJik7CiAKICAgICAvLyBOT1RFOiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2VzIG5vdCB5
ZXQgbmVlZCB0byBtdXRlIGEgY29uc29sZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAgLy8gYXJl
IHNlbnQgdG8gdGhlIGNvbnNvbGUgb3V0c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9yIGNvbnNv
bGUgb2JqZWN0LgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAg
dm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVudGltZUZy
b250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPFJ1bnRp
bWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KaW5kZXggM2I4ZmEx
OGJkN2U4ZDk1ZDdlOGY5NWI0NDJhZmM2M2U1NTBjZTYzYS4uZmRlNGY2OTY0ZDQwZThhNTY1MTE2
YmUyYmM2OTJhNDUxYzJkYTEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgICAgICAg
ICAgImNvbmRpdGlvbiI6ICIoZGVmaW5lZChFTkFCTEVfREFSS19NT0RFX0NTUykgJiYgRU5BQkxF
X0RBUktfTU9ERV9DU1MpIHx8IChkZWZpbmVkKEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQpICYm
IEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQpIiwKICAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6
IFsicGFnZSJdLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlv
biI6ICJBcHBlYXJhbmNlIG5hbWUgdG8gZm9yY2UuIEVtcHR5IHN0cmluZyBkaXNhYmxlcyB0aGUg
b3ZlcnJpZGUuIiB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRy
ZWYiOiAiQXBwZWFyYW5jZSIsICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAgICAgXQogICAg
ICAgICB9LAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAKaW5kZXggMDY1MmUxMjcwOGJmODYyMzBiZTQ2Mjlm
ZTY1NzI1YmJiYzM1YjY3MC4uMTEwMDAwNDczZGNmY2M0MzY0NzY4NDgxN2Q5NTM4YzcxNWM3Mjg1
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29j
a2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50LmNwcApAQCAtOTIsMzIgKzkyLDI0IEBAIE9wdGlvbmFsPFJlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQ6OkV2ZW50PiBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50
CiAKICAgICBTdHJpbmcganNvbkRhdGEgPSBTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwogCi0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKGpzb25EYXRhLCBtZXNzYWdlVmFsdWUpKQorICAgIGF1dG8gbWVzc2FnZVZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uRGF0YSk7CisgICAgaWYgKCFtZXNzYWdlVmFs
dWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtZXNzYWdlT2JqZWN0OwotICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc09iamVjdChtZXNz
YWdlT2JqZWN0KSkKKyAgICBhdXRvIG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2Jq
ZWN0KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgRXZlbnQgZXZlbnQ7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRTdHJp
bmcoImV2ZW50Il9zLCBldmVudC5tZXRob2ROYW1lKSkKKworICAgIGV2ZW50Lm1ldGhvZE5hbWUg
PSBtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmcoImV2ZW50Il9zKTsKKyAgICBpZiAoIWV2ZW50Lm1l
dGhvZE5hbWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBldmVudC5jbGll
bnRJRCA9IGNsaWVudElEOwotCi0gICAgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRDsKLSAgICBp
ZiAobWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9u
SUQpKQotICAgICAgICBldmVudC5jb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7Ci0KLSAgICBU
YXJnZXRJRCB0YXJnZXRJRDsKLSAgICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigidGFy
Z2V0SUQiX3MsIHRhcmdldElEKSkKLSAgICAgICAgZXZlbnQudGFyZ2V0SUQgPSB0YXJnZXRJRDsK
LQotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIG1lc3NhZ2UpKQotICAgICAgICBldmVudC5tZXNzYWdlID0gbWVzc2FnZTsK
LQorICAgIGV2ZW50LmNvbm5lY3Rpb25JRCA9IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoImNv
bm5lY3Rpb25JRCJfcyk7CisgICAgZXZlbnQudGFyZ2V0SUQgPSBtZXNzYWdlT2JqZWN0LT5nZXRJ
bnRlZ2VyKCJ0YXJnZXRJRCJfcyk7CisgICAgZXZlbnQubWVzc2FnZSA9IG1lc3NhZ2VPYmplY3Qt
PmdldFN0cmluZygibWVzc2FnZSJfcyk7CiAgICAgcmV0dXJuIGV2ZW50OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBf
Z2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvci5weQppbmRleCBmNzMzOGY2ZGQzZjE4MWU4OTVlMTllZWM2NmNh
MjFkNTljYmJkYWZhLi40NmI5MDY1N2MzOWU0ZDI1MDNiN2M3MWQyYzRjZGQzNzk3ODVjN2NjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTU1LDI3OSArNTUsMzI5IEBAIGNs
YXNzIENwcEdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCdjcHBfcHJvdG9jb2xfZ3JvdXAnLCAnJykKIAogICAgIGRlZiBo
ZWxwZXJzX25hbWVzcGFjZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0hlbHBlcnMnICUgc2Vs
Zi5wcm90b2NvbF9uYW1lKCkKKyAgICAgICAgbmFtZXNwYWNlID0gJ0hlbHBlcnMnCisgICAgICAg
IGlmIHNlbGYucHJvdG9jb2xfbmFtZSgpICE9ICdJbnNwZWN0b3InOgorICAgICAgICAgICAgbmFt
ZXNwYWNlID0gc2VsZi5wcm90b2NvbF9uYW1lKCkgKyBuYW1lc3BhY2UKKyAgICAgICAgcmV0dXJu
IG5hbWVzcGFjZQogCiAgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1bGF0aW9uIHJvdXRp
bmVzLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5y
YXdfbmFtZSgpID09ICdpbnRlZ2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldEludGVn
ZXInCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdnZXREb3VibGUnCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJh
d19uYW1lKCkgPT0gJ2FueSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXRWYWx1ZScKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChf
dHlwZS5yYXdfbmFtZSgpKQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zv
cl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5j
cHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKyAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91
Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106CisgICAgICAgICAgICByZXR1cm4gJ2dldE9i
amVjdCcKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9yIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgaW4gWydhcnJheSddOgorICAgICAgICAgICAgcmV0dXJuICdnZXRB
cnJheScKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdnZXREb3VibGUnCisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09
ICdhbnknOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0VmFsdWUnCisgICAgICAgICAgICBy
ZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
Y3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JwotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJu
ICdzZXRBcnJheScKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdpbnRlZ2VyJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldEludGVnZXInCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19u
YW1lKCkgPT0gJ251bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCi0g
ICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdzZXRWYWx1ZScKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdzZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJh
dG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJv
dWdoCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAg
ICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5w
cmltaXRpdmVfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUK
KyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Cisg
ICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBcnJheVR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhcnJheSddOgor
ICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0g
J251bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCisgICAgICAgICAg
ICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgICAgIHJldHVybiAn
c2V0VmFsdWUnCisgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19u
YW1lKCkpCisKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAg
ICMgR2VuZXJhdGUgdHlwZSByZXByZXNlbnRhdGlvbnMgZm9yIHZhcmlvdXMgc2l0dWF0aW9ucy4K
ICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90
eXBlKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0g
b3IgcHJpbWl0aXZlLgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAg
ICAgICAgICAgICMgZmFsbHRocm91Z2gKIAotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1
cm4gJ0pTT046Ok9iamVjdCcKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgaXMgTm9uZTogICMgT3RoZXJ3aXNl
LCBmYWxsIHRocm91Z2ggYW5kIHVzZSB0eXBlZGVmJ2QgbmFtZS4KKyAgICAgICAgICAgIGlmIF90
eXBlLnJhd19uYW1lKCkgaXMgTm9uZToKICAgICAgICAgICAgICAgICByZXR1cm4gJ0pTT046OkFy
cmF5T2Y8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlw
ZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEVudW1UeXBlLCBBcnJheVR5cGUpKToKLSAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgogICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJu
ICc6Oicuam9pbihbQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVj
dF9kZWNsYXJhdGlvbi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfcHJvdG9j
b2xfdHlwZV9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlw
ZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAg
X3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXJf
YXJndW1lbnQoX3R5cGUsIG5hbWUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxs
IHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBfdHlwZSA9IF90eXBl
LmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJp
bWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KLQotICAgICAgICAjIFRo
aXMgaGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVy
dGllcy4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKLSAgICAgICAgICAgIGNwcF9uYW1lID0gJ0pT
T046Ok9iamVjdCcKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUg
PSAnSlNPTjo6QXJyYXknCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBj
cHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
Ci0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3
X25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMm
JyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBj
cHBfbmFtZQotCi0gICAgICAgIHJldHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcl90eXBlIgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jf
Y2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIHJldHVy
biBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRlci50eXBl
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKG1lbWJlcik6
Ci0gICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1l
KG1lbWJlci50eXBlLCBtZW1iZXIubWVtYmVyX25hbWUsIEZhbHNlKQotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFt
ZSwgaXNfb3B0aW9uYWwpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBl
LCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBD
cHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAg
ICBpZiBpc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBi
dWlsZGVyX3R5cGUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVy
biBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRf
dHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBi
dWlsZGVyX3R5cGUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1
aWxkZXJfdHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToK
LSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4g
WydvYmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmplY3Q+
JwotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55J106Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+JwotICAgICAgICAgICAg
ZWxpZiBpc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBj
cHBfbmFtZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3Ry
aW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAg
ICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAn
b2JqZWN0JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAg
ICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBy
ZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYn
CisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJp
bWl0aXZlX3R5cGUoX3R5cGUpCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpOgogICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAg
IGVudW1fdHlwZV9uYW1lID0gdWNmaXJzdCh0eXBlX25hbWUpCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVz
OjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdWNmaXJzdChuYW1lKQorICAgICAgICAgICAgcmV0
dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQogCi0gICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJyVzKicgJSBlbnVtX3R5cGVfbmFtZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9uYW1lCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihw
YXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0KLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPCVzPiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBl
KQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAg
ICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiYiICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcyonICUgY3BwX25hbWUKLSAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAotICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGZvcm1hbCBvdXQgcGFyYW1ldGVyIHR5cGUuIikKLQot
ICAgICMgRklYTUU6IHRoaXMgaXMgb25seSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBvdXQgcGFy
YW1ldGVyczsgdGhleSBjb3VsZCBiZSB1bmlmaWVkLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAg
ICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBG
YWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUs
IEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlv
bmFsPCVzPiYiICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25h
bWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENw
cEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAg
ICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAg
ICAgICAgICAgIGNwcF9uYW1lID0gJyVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcycgJSAo
X3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjcHBfbmFtZSA9
ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9t
YWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCi0KLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBf
bmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUK
LQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGZvcm1hbCBhc3luYyBwYXJhbWV0
ZXIgdHlwZS4iKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAg
ICAgIyBJbi1wYXJhbWV0ZXJzIGRvbid0IHVzZSBidWlsZGVyIHR5cGVzLCBiZWNhdXNlIHRoZXkg
Y291bGQgYmUgcGFzc2VkCiAgICAgIyAib3BlbiB0eXBlcyIgdGhhdCBhcmUgbWFudWFsbHkgY29u
c3RydWN0ZWQgb3V0IG9mIEluc3BlY3Rvck9iamVjdHMuCi0KLSAgICAjIEZJWE1FOiBPbmx5IHBh
cmFtZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgb3BlbiB0eXBlcyBzaG91bGQgbmVlZCBub24tYnVp
bGRlciBwYXJhbWV0ZXIgdHlwZXMuCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlw
ZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0gcGFy
YW1ldGVyLnR5cGUKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKF90eXBl
LCBpc19vcHRpb25hbCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3Vn
aC4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFu
ZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2
ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0
JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAn
UmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9i
amVjdD4mJicKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9yIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OkFycmF5PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPiYmJworICAgICAgICAg
ICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlm
aWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAl
IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKICAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpPYmplY3Q+IgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8SlNPTjo6QXJyYXk+IgotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3Rv
Y29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJh
d19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIg
JSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAg
ICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlcicsICdudW1iZXInXToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisKKyAgICAgICAg
aWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25hbDwlcz4mJicg
JSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAg
ICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFu
ZF9yZXR1cm5fZGVjbGFyYXRpb24oX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5h
bGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91
Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBl
KSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUg
YnVpbGRlcl90eXBlCi0gICAgICAgICAgICByZXR1cm4gJyVzJyAlIGJ1aWxkZXJfdHlwZQotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNw
cF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkK
LSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4n
ICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorCisgICAg
ICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmpl
Y3Q+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PicKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4nCisg
ICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4nCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPicKKyAgICAgICAgICAg
IHJldHVybiAnUmVmPEpTT046OlZhbHVlPicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChf
dHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5z
cGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6
OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAg
ICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVf
dHlwZShfdHlwZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
InVua25vd24gdHlwZSIpCisKKyAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBj
cHBfbmFtZSA9ICdPcHRpb25hbDwlcz4nICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF9hc3NlcnRpb25fbWV0aG9kX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICBkZWYg
Y3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KF90eXBlLCBpc19vcHRpb25hbCk6
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWcKIAot
ICAgICAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgICAg
ICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScg
JSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBm
YWxsdGhyb3VnaAogCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgQWxp
YXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUo
dHlwZV9tZW1iZXIudHlwZS5hbGlhc2VkX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlw
ZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91
czoKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9t
ZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgaWYgaXNf
b3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0
dXJuICdSZWY8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBl
KF90eXBlKQogCi0gICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVf
bWVtYmVyLnR5cGUpCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVj
dCc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
J1JlZlB0cjxKU09OOjpPYmplY3Q+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpP
YmplY3Q+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXkn
OgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJh
eT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgorICAg
ICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8
SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicK
KworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlm
IGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUg
PSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKwor
ICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFs
PCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3JfZXZlbnRfcGFyYW1ldGVyKF90eXBlLCBpc19v
cHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0
aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlw
ZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBl
CisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdSZWY8
JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAg
ICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09O
OjpPYmplY3Q+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+JiYnCisK
KyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAg
ICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6
QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4mJicKKworICAg
ICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgaWYg
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+
JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJu
ICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0
b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBp
c19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNw
cF9uYW1lCisgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBjcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIG5hbWUpOgorICAgICAgICBpZiBlbnVt
X3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6JXM6OiVz
JyAlIChlbnVtX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChuYW1lKSkK
KyAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChlbnVtX3R5cGUudHlwZV9kb21h
aW4oKS5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19uYW1lKCkpCiAKICAgICBAc3RhdGljbWV0
aG9kCiAgICAgZGVmIGNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSk6CiAgICAgICAg
IHJldHVybiBfUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUC5nZXQoX3R5cGUucmF3X25hbWUoKSkK
IAotICAgICMgRGVjaWRlIHdoZXRoZXIgY2VydGFpbiBoZWxwZXJzIGFyZSBuZWNlc3NhcnkgaW4g
YSBzaXR1YXRpb24uCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfdXNlX3dyYXBw
ZXJfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNl
KF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkKKyAgICBkZWYgc2hvdWxkX21vdmVfYXJn
dW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUg
PSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0g
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29w
dGlvbmFsID09IChfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251
bWJlciddKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfdXNlX3JlZmVyZW5j
ZXNfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwgKEFy
cmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZlVHlw
ZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsiYW55IiwgIm9iamVjdCJdKQorICAg
IGRlZiBzaG91bGRfcmVsZWFzZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAg
aWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywg
J251bWJlciddOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19v
cHRpb25hbAogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5
X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Ci0gICAgICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBl
LCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRp
dmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVjdCIpCisgICAgZGVm
IHNob3VsZF9kZXJlZmVyZW5jZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAg
aWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdl
cicsICdudW1iZXInXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4g
aXNfb3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkKaW5kZXggMDgyYmUzM2YxNWRlMjViZTg4OTU3Y2IxNDIyOTM1MjAzNmVlMjJjZi4uN2M4
NDg1Nzg2ZTljZGNmMTQyZTkzOTYyYWUyY2Y0ZDEwNzFlMWQ4NyAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTk1LDcgKzk1LDcgQEAgcHJv
dGVjdGVkOgogICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xf
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogJHtj
b21tYW5kRGVjbGFyYXRpb25zfQogcHJpdmF0ZToKICAgICAke2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CkBAIC0xMTQsMzIgKzExNCwzMCBAQCBwcml2YXRlOgogICAgICIiIiAgICAk
e2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgICR7Y2FsbGJhY2tO
YW1lfShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2Vu
ZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJzfSk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHty
ZXR1cm5zfSk7CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBh
cmFtZXRlcnN9KSA9IDA7IiIiKQorICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke3Bh
cmFtZXRlcnN9KSA9IDA7IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
blNtYWxsU3dpdGNoID0gKAotICAgICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKKyAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7
CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFt
ZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKICR7ZGlz
cGF0Y2hDYXNlc30KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiAr
IG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIick
e2RvbWFpbk5hbWV9LiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9
IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0g
KAotIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKQorIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lk
ICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpOworICAgIHVzaW5nIENhbGxIYW5kbGVyID0gdm9p
ZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3RvY29sX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAgICB1c2luZyBE
aXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAoZGlzcGF0Y2hN
YXAuZ2V0KCkuaXNFbXB0eSgpKSB7CkBAIC0xNTQsMTMgKzE1MiwxMyBAQCAke2Rpc3BhdGNoQ2Fz
ZXN9CiAgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwg
Y29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgYXV0byBmaW5kUmVzdWx0ID0gZGlz
cGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3Bh
dGNoTWFwLmdldCgpLmZpbmQocHJvdG9jb2xfbWV0aG9kKTsKICAgICBpZiAoZmluZFJlc3VsdCA9
PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
Iicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRo
aXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHByb3RvY29sX2NhbGxJZCwgV1RGTW92
ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yID0gKApAQCAtMTc3LDcgKzE3NSw3IEBAICR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyCiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzID0gKAotIiIiJHtpblBhcmFtZXRlckRl
Y2xhcmF0aW9uc30KKyIiIiR7cGFyYW1ldGVyRGVjbGFyYXRpb25zfQogICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgXCcke2RvbWFpbk5hbWV9LiR7Y29tbWFu
ZE5hbWV9XCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTg3
LDExICsxODUsMTEgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKICAgICBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kID0gKAogIiIiJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxiYWNrTmFtZX0oUmVm
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQp
IHsgfQogCi12b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2Fs
bGJhY2tOYW1lfTo6c2VuZFN1Y2Nlc3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKK3ZvaWQgJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3Vj
Y2Vzcygke2NhbGxiYWNrUGFyYW1ldGVyc30pCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotJHtvdXRQYXJhbWV0ZXJBc3NpZ25t
ZW50c30KLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2Up
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyR7cmV0dXJuQXNzaWdubWVudHN9CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSk7CiB9IiIiKQogCiAgICAgRnJvbnRlbmREaXNw
YXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKApAQCAtMjQ2LDEzICsyNDQsMTEg
QEAgJHtjb25zdHJ1Y3RvckV4YW1wbGV9CiAgICAgfSIiIikKIAogICAgIFByb3RvY29sT2JqZWN0
UnVudGltZUNhc3QgPSAoCi0iIiJSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwk
e29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQor
IiIiUmVmPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRp
bWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJl
c3VsdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
KyAgICBhdXRvIHJlc3VsdCA9IHZhbHVlLT5hc09iamVjdCgpOwogICAgIEJpbmRpbmdUcmFpdHM8
JHtvYmplY3RUeXBlfT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7
CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihKU09O
OjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5n
ZXQoKSkpOworICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8JHtvYmplY3RUeXBlfT4o
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEpTT046Ok9iamVjdEJhc2U+KHJlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpKSk7CiB9CiAiIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKaW5kZXggZTFhNjYxYmEzNzljZGVhNDA2NGM2Zjc3YzRlZmNiMTE2MmFjZWZjMC4uYjlj
NjYxNzQ5MjI0NGQwMGUwYTc0NWQ3OTRiYWI2NzEwMmU3NDRjNSAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzMsOSArMzMsMTEgQEAgZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQg
Q3BwR2VuZXJhdG9yCiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENw
cEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIC5tb2RlbHMgaW1w
b3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZQogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBj
cHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisg
ICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZQogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNjUsNyArNjcsNyBAQCBjbGFzcyBDcHBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAg
dGFyZ2V0X2ZyYW1ld29ya19uYW1lID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lCiAgICAg
ICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbdGFyZ2V0X2ZyYW1ld29ya19u
YW1lXSwgKHRhcmdldF9mcmFtZXdvcmtfbmFtZSwgIiVzUHJvdG9jb2xUeXBlcy5oIiAlIHNlbGYu
cHJvdG9jb2xfbmFtZSgpKSksCisgICAgICAgICAgICAoW3RhcmdldF9mcmFtZXdvcmtfbmFtZV0s
ICh0YXJnZXRfZnJhbWV3b3JrX25hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYucHJv
dG9jb2xfbmFtZSgpKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJdLCAoIkphdmFT
Y3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIikpLAogICAg
ICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIpKSwKICAgICAgICAgXQpAQCAtOTEsOSAr
OTMsMTkgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGlu
IGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
JyVzIGluXyVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxf
aW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAg
ICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBwcm90b2NvbF9jYWxsSWQnXQorICAgICAgICBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1l
dGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJh
bWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBl
ID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5
cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBwYXJhbWV0
ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8n
ICsgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzICVz
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRl
cl90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAg
ICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5j
b21tYW5kX25hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDEwZDhmMTRiZDVmZWJl
YjhhMWIwNmIwMTc2NzVhMTQzYThkNGY3MzguLjZkOWRkMmE0OGRjMzQ2OTIwNzFjMWRiYzFiOGIz
YjRlN2M3M2E5MTUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01NSwxMCArNTUsOSBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICByZXR1cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpIGlmIGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWlu
KSkgPiAwXQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgdHlwZWRl
ZnMgPSBbKCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7
CiAgICAgICAgICAgICAnaW5jbHVkZXMnOiBzZWxmLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKCksCi0gICAgICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVm
ICVzICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSksCisgICAgICAgICAg
ICAndHlwZWRlZnMnOiAnJywKICAgICAgICAgfQogCiAgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoKQpAQCAtNzksOSArNzgsMTEgQEAgY2xhc3MgQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVyX2lu
Y2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sIChz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYu
cHJvdG9jb2xfbmFtZSgpKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAo
IldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKQorICAgICAgICAgICAgKFsiSmF2YVNjcmlw
dENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9FeHBlY3RlZC5oIikpLAorICAgICAgICAg
ICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5o
IikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwg
Ind0Zi90ZXh0L1dURlN0cmluZy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgic3RkIiwgInR1cGxlIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0
dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJf
aW5jbHVkZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJk
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKQEAgLTEwMSwxMSArMTAy
LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBj
bGFzc0NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQogCi0gICAgICAgIHVzZWRfZW51bV9u
YW1lcyA9IHNldCgpCi0KICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQogICAgICAg
ICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKLSAgICAg
ICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykpCisgICAg
ICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxl
cl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKIAogICAgICAgICBoYW5kbGVyX2Fy
Z3MgPSB7CiAgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNz
Q29tcG9uZW50cyksCkBAIC0xMTUsNjkgKzExNCw1NiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRl
KENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJh
dGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKLSAgICBkZWYgX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBjb21tYW5k
KToKLSAgICAgICAgZW51bV9hcmdzID0gewotICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21t
YW5kLmNvbW1hbmRfbmFtZQotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRl
ck5hbWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGNvbW1hbmROYW1lKXMu
JyAlIGVudW1fYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSBjbGFzcyAlcyB7
JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgZm9yIGVudW1f
dmFsdWUgaW4gcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1ZXMoKToKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9y
X2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51
bV92YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OyAvLyBlbnVtIGNsYXNzICVz
JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCB1c2VkX2VudW1fbmFtZXMpOgorICAgIGRlZiBfZ2Vu
ZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5l
cmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCiAKICAg
ICAgICAgbGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyYnXQot
ICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
Ci0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorCisgICAgICAgIHBhcmFt
ZXRlcnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29t
bWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBh
cmFtZXRlcl9uYW1lKSkKIAotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVy
KF9wYXJhbWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIudHlwZS5pc19hbm9u
eW1vdXMgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1l
czoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAgICAgICAgICAgICAg
ICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0KLSAgICAg
ICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQot
ICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgcmV0dXJucyA9
IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9v
dXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVz
ZWRfZW51bV9uYW1lczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAg
ICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCisgICAgICAgICAgICByZXR1cm5zLmFwcGVuZCgnJXMgLyogJXMgKi8nICUgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fZGVjbGFyYXRpb24ocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBj
b21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1h
bmRfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMp
CisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJzKSwKKyAgICAg
ICAgICAgICdyZXR1cm5zJzogIiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9Ci0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0
ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBpZiBsZW4ocmV0dXJucykgPT0g
MToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8JShyZXR1cm5zKXM+ICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAw
OycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGVsaWYgbGVuKHJldHVybnMpID4gMToKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTwlKHJldHVybnMpcz4+ICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykg
PSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+ICUoY29tbWFu
ZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9u
LCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2Rl
Y2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBjYWxsYmFja05h
bWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKQogCi0gICAg
ICAgIGluX3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBf
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0g
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKCJSZWY8JXM+JiYiICUgY2FsbGJhY2tOYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJh
bWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVj
a2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1lKSkKLSAg
ICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiBjYWxsYmFjayIgJSBjYWxsYmFj
a05hbWUpCi0KLSAgICAgICAgb3V0X3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBmb3IgX3BhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxf
YXN5bmNfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkK
KyAgICAgICAgcmV0dXJucyA9IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgcmV0dXJucy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5
cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY2xhc3NfY29tcG9uZW50
cyA9IFsnY2xhc3MnXQogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0xODgsOCArMTc0LDggQEAgY2xh
c3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogJyAnLmpvaW4oY2xhc3NfY29tcG9uZW50
cyksCiAgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogY2FsbGJhY2tOYW1lLAogICAgICAgICAg
ICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAnaW5Q
YXJhbWV0ZXJzJzogIiwgIi5qb2luKGluX3BhcmFtZXRlcnMpLAotICAgICAgICAgICAgJ291dFBh
cmFtZXRlcnMnOiAiLCAiLmpvaW4ob3V0X3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycyksCisgICAgICAgICAgICAncmV0dXJucyc6ICIs
ICIuam9pbihyZXR1cm5zKSwKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCkBAIC0yMjMsNCArMjA5LDQgQEAgY2xh
c3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNv
bmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9t
YWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFu
ZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5k
X25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGNvbW1hbmQuY29uZGl0aW9uLCAiICAgIHZvaWQgJXMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21t
YW5kX25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBk
YWYxOWM5NTBmYjA3YWFhMmQ4YjMxYTJmNDljN2NhYjUwNzAyYzYwLi44ZGZiMjk0YWI5ZDI2ZTRl
ODU1ZjVlMTI5ZGI4MzFlN2Y5MDFhYmRlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTMzLDEyICszMywxMiBAQCB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9t
IC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmpl
Y3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogZXhjZXB0IFZhbHVlRXJy
b3I6CiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9t
IGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
Q3BwVGVtcGxhdGVzCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAotICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKyAgICBmcm9t
IG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5
cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTgwLDExICs4MCw4
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMo
c2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9KU09OVmFsdWVzLmgiKSksCiAgICAgICAgICAgICAo
WyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL05ldmVyRGVzdHJveWVk
LmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL3RleHQvQ1N0cmluZy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gc2Vs
Zi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKQogCiAKQEAg
LTEyMyw4ICsxMjAsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGNhc2VzID0gW10KIAogICAgICAgICBm
aXJzdF9jb21tYW5kX3N0cmluZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAnICAgIGlmICht
ZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCi0gICAgICAgICAg
ICAnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5k
c1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAgIGlmIChwcm90b2NvbF9tZXRob2Qg
PT0gIiVzIikgeycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAg
ICAgICAlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOycg
JSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCiAgICAgICAgICAgICAnICAgICAgICByZXR1cm47
JywKICAgICAgICAgICAgICcgICAgfScsCiAgICAgICAgIF0pCkBAIC0xMzIsOCArMTI5LDggQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogCiAgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzWzE6XToKICAgICAgICAg
ICAgIGFkZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWwotICAgICAgICAgICAg
ICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAot
ICAgICAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgaWYgKHBy
b3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9w
YXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAogICAgICAgICAgICAgICAgICcg
ICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgICAgICcgICAgfScsCiAgICAgICAgICAgICBd
KQpAQCAtMTY1LDE0NiArMTYyLDEzNiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNo
KS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fz
eW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgot
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KLSAgICAgICAgZm9ybWFsX3Bh
cmFtZXRlcnMgPSBbXQorICAgICAgICByZXR1cm5fYXNzaWdubWVudHMgPSBbXQorICAgICAgICBj
YWxsYmFja19wYXJhbWV0ZXJzID0gW10KIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
OgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25h
bWUKKworICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKworICAg
ICAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5k
IF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1p
dGl2ZV90eXBlCisKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICdQcm90b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAo
c2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBl
bGlmIENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVy
LmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0
ZXJfdmFsdWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAgICBlbGlmIENwcEdlbmVy
YXRvci5zaG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRp
b25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVy
X3ZhbHVlCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVu
dChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKICAgICAgICAgICAg
IHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAg
ICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRo
b2RfZm9yX3R5cGUoX3R5cGUpLAogICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUn
OiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIp
LAotICAgICAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUs
CisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVz
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFy
YW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGNhbGxiYWNr
X3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9j
b21tYW5kX3JldHVybl9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFy
YW1ldGVyX25hbWUpKQogCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0
dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcy5oYXNWYWx1
ZSgpKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClz
KCIlKHBhcmFtZXRlcktleSlzIl9zLCAqJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdz
KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJh
bV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAg
ICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUoaGVscGVy
c05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRlck5hbWUpcykpOycg
JSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBlbmQo
JyAgICBpZiAoISElKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAg
ICAgICByZXR1cm5fYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVy
VmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUo
a2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJOYW1lKXMp
OycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFt
ZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQogCiAgICAg
ICAgIGFzeW5jX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZSwKICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29t
bWFuZF9uYW1lKSArICdDYWxsYmFjaycsCi0gICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6
ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVy
QXNzaWdubWVudHMnOiAiXG4iLmpvaW4ob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAg
ICAgICAgICdjYWxsYmFja1BhcmFtZXRlcnMnOiAiLCAiLmpvaW4oY2FsbGJhY2tfcGFyYW1ldGVy
cyksCisgICAgICAgICAgICAncmV0dXJuQXNzaWdubWVudHMnOiAiXG4iLmpvaW4ocmV0dXJuX2Fz
c2lnbm1lbnRzKQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShO
b25lLCAqKmFzeW5jX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIGlu
X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xh
cmF0aW9ucyA9IFtdCi0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncmVxdWVzdElk
J10KKyAgICAgICAgcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIHBhcmFtZXRl
cl9lbnVtX3Jlc29sdXRpb25zID0gW10KKyAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0
aG9kX3BhcmFtZXRlcnMgPSBbJ3Byb3RvY29sX2NhbGxJZCddCiAgICAgICAgIG1ldGhvZF9wYXJh
bWV0ZXJzID0gW10KLSAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2Vycm9yJykKIAogICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSAnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1l
dGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRf
JyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsg
cGFyYW1ldGVyX25hbWUKIAotICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnbnVs
bHB0cicKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICcmJXNfdmFsdWVGb3VuZCcgJSBwYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcg
ICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlcl9uYW1lKQorICAgICAg
ICAgICAgdmFyaWFibGVfbmFtZSA9IHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgICAgICMgTm93
IGFkZCBhcHByb3ByaWF0ZSBvcGVyYXRvcnMuCi0gICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVz
c2lvbiA9IHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKIAotICAgICAgICAgICAgaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSk6
Ci0gICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICclcy5nZXQoKScgJSBwYXJhbWV0ZXJfZXhw
cmVzc2lvbgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhp
cyBhc3N1bWVzIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb3ZlZCB0aGUgb2JqZWN0IGlzIG5vbi1u
dWxsLgotICAgICAgICAgICAgICAgICAgICAjIElmIGEgcmVxdWlyZWQgcHJvcGVydHkgaXMgbWlz
c2luZywgSW5zcGVjdG9yQmFja2VuZDo6Z2V0T2JqZWN0IHdpbGwKLSAgICAgICAgICAgICAgICAg
ICAgIyBhcHBlbmQgYSBwcm90b2NvbCBlcnJvciwgYW5kIHRoZSBtZXRob2QgZGlzcGF0Y2hlciB3
aWxsIHJldHVybiB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICMgaW52b2tpbmcgdGhlIGJh
Y2tlbmQgbWV0aG9kIChhbmQgZGVyZWZlcmVuY2luZyB0aGUgb2JqZWN0KS4KLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnKiVzJyAlIHBhcmFtZXRlcl9leHByZXNz
aW9uCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcmJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24K
KyAgICAgICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfbmFtZSA9IHBhcmFtZXRlcl9uYW1lICsgJ19qc29uJwogCi0gICAgICAgICAgICBwYXJhbV9h
cmdzID0gewotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlckV4cHJlc3Npb24nOiBwYXJhbWV0ZXJfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAg
ICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5
cGUocGFyYW1ldGVyLnR5cGUpLAotICAgICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBv
dXRfc3VjY2Vzc19hcmd1bWVudAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfbmFtZSkK
IAotICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBh
cmFtZXRlclR5cGUpcyAlKHBhcmFtZXRlck5hbWUpcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPiUo
a2V5ZWRHZXRNZXRob2QpcyhwYXJhbWV0ZXJzLmdldCgpLCAiJShwYXJhbWV0ZXJLZXkpcyJfcywg
JShzdWNjZXNzT3V0UGFyYW0pcyk7JyAlIHBhcmFtX2FyZ3MpCi0KLSAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBvcHRpb25hbF9pbl9wYXJhbWV0
ZXJfc3RyaW5nID0gJyUocGFyYW1ldGVyTmFtZSlzX3ZhbHVlRm91bmQgPyAlKHBhcmFtZXRlckV4
cHJlc3Npb24pcyA6IG51bGxwdHInICUgcGFyYW1fYXJncwotICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJh
bWV0ZXJfc3RyaW5nKQotICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChv
cHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFy
YW1ldGVyX2V4cHJlc3Npb24pCi0gICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBw
ZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQotCi0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6
Ci0gICAgICAgICAgICBhc3luY19hcmdzID0gewotICAgICAgICAgICAgICAgICdkb21haW5OYW1l
JzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1
Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
Y2FsbGJhY2stPmRpc2FibGUoKTsnKQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25t
ZW50cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsnKQotICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCi0g
ICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrLmNvcHlSZWYoKScp
Ci0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAgICAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICAgICAncGFy
YW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9k
X2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7
CiAgICAgICAgICAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25h
bWVzcGFjZSgpLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bVR5cGUnOiBDcHBHZW5l
cmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpLAorICAgICAgICAgICAgICAg
ICAgICAnZW51bVZhcmlhYmxlTmFtZSc6IHZhcmlhYmxlX25hbWUsCisgICAgICAgICAgICAgICAg
ICAgICdzdHJpbmdWYXJpYWJsZU5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQo
JyAgICAlKHBhcmFtZXRlclR5cGUpcyBvdXRfJShwYXJhbWV0ZXJOYW1lKXM7JyAlIHBhcmFtX2Fy
Z3MpCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKToK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcn
KQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAg
IGF1dG8gJShlbnVtVmFyaWFibGVOYW1lKXMgPSBQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNl
KXM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlKGVudW1UeXBlKXM+KCUoc3RyaW5nVmFyaWFi
bGVOYW1lKXMpOycgJSBlbnVtX2FyZ3MpCiAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Vz
ZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAo
b3V0XyUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAg
ICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICpv
dXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJn
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBw
ZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAg
ICAgICAgICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OiUoaGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0
ZXJOYW1lKXMpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2V4cHJlc3Npb24gPSAnV1RGTW92ZSglcyknICUgdmFyaWFibGVfbmFtZQogICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMu
YXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktl
eSlzIl9zLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJyAgICBpZiAoISUo
ZW51bVZhcmlhYmxlTmFtZSlzKSB7JyAlIGVudW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBtYWtlU3RyaW5nKCJVbmtub3duICUocGFyYW1ldGVyS2V5KXM6ICJfcywgJShzdHJpbmdWYXJp
YWJsZU5hbWUpcykpOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgfScpCisgICAg
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyonICsgdmFyaWFibGVfbmFt
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgp
ID09ICdzdHJpbmcnOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9
IHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnV1RGTW92ZSgl
cyknICUgdmFyaWFibGVfbmFtZQorICAgICAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUo
KSBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSB2
YXJpYWJsZV9uYW1lICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVz
c2lvbikKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhw
cmVzc2lvbikKIAotICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19i
eV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSkgb3IgcGFyYW1ldGVyLmlzX29w
dGlvbmFsIGFuZCBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlw
ZShwYXJhbWV0ZXIudHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnb3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCcm
b3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBwYXJhbV9hcmdz
ID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwK
KyAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dldHRl
cl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAorICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6ICdm
YWxzZScgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJ3RydWUnLAorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBhdXRvICUo
cGFyYW1ldGVyTmFtZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClz
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHJlcXVp
cmVkKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Cisg
ICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2Fkb3B0UmVmKCpuZXcgJXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBw
cm90b2NvbF9jYWxsSWQpKScgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCAnJXNDYWxsYmFjaycgJSB1
Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0g
ewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAg
ICAgICAnY2FsbGJhY2tOYW1lJzogJyVzQ2FsbGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNvbW1h
bmRfbmFtZSksCiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihpbl9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJEZWNsYXJhdGlv
bnMnOiAnXG4nLmpvaW4ocGFyYW1ldGVyX2RlY2xhcmF0aW9ucyksCiAgICAgICAgICAgICAnaW52
b2NhdGlvblBhcmFtZXRlcnMnOiAnLCAnLmpvaW4obWV0aG9kX3BhcmFtZXRlcnMpLAogICAgICAg
ICAgICAgJ2FsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKGFsdGVybmF0
ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzKSwKICAgICAgICAgfQogCiAgICAgICAgIGxp
bmVzID0gW10KICAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiknICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUo
ZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiknICUgY29tbWFuZF9hcmdzKQogICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShj
b21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpJyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKIAogICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID4gMDoK
QEAgLTMxOSwzMSArMzA2LDcxIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKKyAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9lbnVt
X3Jlc29sdXRpb25zKToKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfZW51bV9y
ZXNvbHV0aW9ucykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKwogICAgICAgICBpZiBj
b21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPCUoZG9t
YWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVl
c3RJZCkpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBt
X2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29t
bWFuZF9hcmdzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
RXJyb3JTdHJpbmcgZXJyb3I7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAg
ICAgIHJlc3VsdF9leHRyYWN0aW9uX25hbWVzID0gW10KKyAgICAgICAgICAgIHJlc3VsdF9jb252
ZXJzaW9uX2xpbmVzID0gW10KKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgcGFy
YW1ldGVyX25hbWUKIAotICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykg
PiAwOgotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25z
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShp
bnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMuYXBwZW5k
KHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgotICAg
ICAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7JykKLSAgICAg
ICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKLSAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgICAgIGVsaWYgbGVuKGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID09IDE6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4
dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgICAgICBfdHlwZSA9IHBhcmFt
ZXRlci50eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5
cGUpOgorICAgICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNf
YW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90
eXBlCisKKyAgICAgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAg
ICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90
eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfdmFsdWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAg
ICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90
eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIENw
cEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlv
bmFsKToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1vdmUoJXMp
JyAlIHBhcmFtZXRlcl92YWx1ZQorCisgICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
cktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1l
KXMpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9u
X2xpbmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1l
dGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bV9hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dF9jb252ZXJzaW9uX2xpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7
JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcmVz
dWx0ID0gbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghcmVz
dWx0KSB7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOycpCisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1
bHRfZXh0cmFjdGlvbl9uYW1lcykgPT0gMToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBhdXRvICVzID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7JyAlIHJlc3VsdF9leHRyYWN0
aW9uX25hbWVzWzBdKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOycpCi0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBlbHNlJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOycpCisgICAgICAgICAgICBlbGlmIGxlbihy
ZXN1bHRfZXh0cmFjdGlvbl9uYW1lcykgPiAxOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGF1dG8gWyVzXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOycgJSAiLCAiLmpvaW4o
cmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMpKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQo
cmVzdWx0X2NvbnZlcnNpb25fbGluZXMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5k
KCd9JykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
Y29tbWFuZC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKaW5kZXggMTE5ZDIzYzM4Y2RmMjRjZjU2ZDBmZmM2NmQ1N2I4YTNkNGUyZGE0NC4uYmVh
YTE3Yzk4MTU0YjdlZTIyZTNiNWI5NzZkMDE4Mzk0MGE0NjkxMyAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0g
WwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sIChzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLm5hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYucHJvdG9jb2xf
bmFtZSgpKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3Jl
IiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKQorICAgICAgICAg
ICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5o
IikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwg
Ind0Zi90ZXh0L1dURlN0cmluZy5oIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdc
bicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVk
ZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNl
bGYsIHBhcmFtZXRlciwgZXZlbnQpOgpAQCAtMTE3LDggKzExNywxMyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9y
bWFsX3BhcmFtZXRlcnMgPSBbXQogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGZvcm1hbF9wYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tl
ZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIGZvcm1h
bF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
ZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBw
YXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzIGFuZCBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRl
cihwYXJhbWV0ZXIsIGV2ZW50KSkKICAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRk
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQppbmRleCA2NmRjNmUxODVjZmUyYjYxYjFlY2E3NzU3M2NlMTY3NGU2YjM1
YTQ5Li43NjNlMDFkZmI3OGNkZWM4ZDYwMzBkMmVkYzM1MDU0ODkxNzY5ODBjIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEyIEBAIHRy
eToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9t
IC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2Zp
cnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKyAgICBm
cm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5cGUsIEVu
dW1UeXBlCiBleGNlcHQ6CiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKICAgICBmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JU
ZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvciwgdWNmaXJzdAotICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5
cGUKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2Vk
VHlwZSwgRW51bVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAg
LTcxLDkgKzcxLDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFk
ZXJfaW5jbHVkZXMoc2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIikpLAotICAgICAgICAgICAgKFsiSmF2
YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L0NTdHJpbmcuaCIpKQog
ICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1
ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CkBAIC05
MCwyNyArODgsNDMgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQog
CiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAgICBwYXJhbWV0ZXJf
dmFsdWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgbm90IENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5X2Zv
cl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdmFs
dWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYgX3R5
cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3Zh
bHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFt
ZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNl
X2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwoKScK
KyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1bWVu
dChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKLSAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnSW5z
cGVjdG9yOjpQcm90b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5o
ZWxwZXJzX25hbWVzcGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBlbGlmIENw
cEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlv
bmFsKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUg
cGFyYW1ldGVyX3ZhbHVlCiAKICAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0gewotICAgICAg
ICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFj
a19vdXRfcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5h
bWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
cktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1l
dGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1
ZSc6IHBhcmFtZXRlcl92YWx1ZSwKLSAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVy
X21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJn
cykKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAg
IHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlck5hbWUpcyJfcywg
JShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlz
KScgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVu
dHMuYXBwZW5kKCcgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhv
ZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0
ZXJfYXJncykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIl
KHBhcmFtZXRlck5hbWUpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2Fy
Z3MpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlz
Il9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKIAotICAgICAgICAg
ICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVu
ZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZXZlbnRfcGFyYW1ldGVyKF90
eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAg
ZXZlbnRfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLApAQCAtMTIwLDE1ICsxMzQsMTUgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5hcHBl
bmQoJ3ZvaWQgJShkb21haW5OYW1lKXNGcm9udGVuZERpc3BhdGNoZXI6OiUoZXZlbnROYW1lKXMo
JShmb3JtYWxQYXJhbWV0ZXJzKXMpJyAlIGV2ZW50X2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUpcy4l
KGV2ZW50TmFtZSlzIl9zKTsnICUgZXZlbnRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyJfcyk7JyAlIGV2ZW50
X2FyZ3MpCiAKICAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9hc3NpZ25tZW50cykgPiAwOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CiAgICAgICAgICAgICBsaW5lcy5leHRlbmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9z
LCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJv
dG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihsaW5l
cykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weQppbmRleCAwMDE5MjRkZTBlYjA4MjdmNzQ1ZDNkNzM2YzBhYjky
MDIxMjRkYjM2Li43ODFkMDZkOTQwNTY2YjE3MmVjNTVjMmVmYmQxMDFhMDA1MGQ3MWE4IDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkKQEAgLTg1LDkgKzg1LDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAg
ICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3Jl
IiwgImluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiKSksCi0gICAgICAgICAgICAo
WyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0Fzc2VydGlvbnMuaCIp
KQorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0
Zi9KU09OVmFsdWVzLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAg
ICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3Zl
cnNpb25zKHNlbGYsIGRvbWFpbnMpOgpAQCAtMjMyLDkgKzIzMyw2IEBAIGNsYXNzIENwcFByb3Rv
Y29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5q
b2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJh
dGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgotICAgICAgICBpZiBsZW4odHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycK
LQogICAgICAgICBlbnVtX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnMgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXNdCiAgICAgICAgIHJlcXVpcmVkX21lbWJlcnMg
PSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYg
bm90IG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IFttZW1i
ZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIu
aXNfb3B0aW9uYWxdCkBAIC0yNDYsMTEgKzI0NCwxMiBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGJhc2VfY2xhc3MgPSAnSlNP
Tjo6T2JqZWN0JwogICAgICAgICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRz
KHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CiAgICAgICAgICAgICBiYXNlX2NsYXNzID0gYmFzZV9j
bGFzcyArICdCYXNlJwotICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVibGljICVz
IHsnICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdj
bGFzcyAlcyBmaW5hbCA6IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9jbGFzcykp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgncHVibGljOicpCiAgICAgICAgIGZvciBlbnVtX21lbWJl
ciBpbiBlbnVtX21lbWJlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lIFwnJXNcJyB3aGlsZSBnZW5lcmF0aW5nICVzLicgJSAoZW51
bV9tZW1iZXIubWVtYmVyX25hbWUsIG9iamVjdF9uYW1lKSkKICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihlbnVt
X21lbWJlcikpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyX3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikp
CiAKICAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZSA9IFtdCkBAIC0yNzcsNyArMjc2LDcgQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgb3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFy
YXRpb24pCiAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gb3Blbl9tZW1iZXJzOgogICAg
ICAgICAgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygnZXhwb3J0X21hY3JvJywgTm9uZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAlcyBzdGF0aWMgY29uc3QgY2hhciogJXM7JyAlIChleHBvcnRfbWFjcm8sIHVjZmlyc3QodHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAlcyBzdGF0aWMgY29uc3QgY2hhciogJXNLZXk7JyAlIChleHBvcnRfbWFjcm8sIHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKICAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlv
bi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCkBAIC0zMjgsNDcgKzMyNyw1NiBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0
dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIG1lbWJl
cl9uYW1lID0gJ2luXycgKyB0eXBlX21lbWJlci5tZW1iZXJfbmFtZQorCisgICAgICAgIG1lbWJl
cl92YWx1ZSA9IG1lbWJlcl9uYW1lCisgICAgICAgIGlmIHR5cGVfbWVtYmVyLnR5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIG1lbWJlcl92YWx1
ZSkKKyAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQodHlwZV9t
ZW1iZXIudHlwZSwgRmFsc2UpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1dURk1vdmUo
JXMpJyAlIG1lbWJlcl92YWx1ZQorCiAgICAgICAgIHNldHRlcl9hcmdzID0gewogICAgICAgICAg
ICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAotICAgICAg
ICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KHR5cGVfbWVtYmVyLnR5cGUpLAotICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciksCi0gICAgICAgICAgICAnaGVscGVyc05h
bWVzcGFjZSc6IHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICdzZXR0ZXIn
OiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlw
ZSksCisgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV9tZW1iZXJfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpLAorICAgICAgICAgICAgJ21lbWJlcktleSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
LAorICAgICAgICAgICAgJ21lbWJlck5hbWUnOiBtZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdt
ZW1iZXJWYWx1ZSc6IG1lbWJlcl92YWx1ZSwKICAgICAgICAgfQogCiAgICAgICAgIGxpbmVzID0g
W10KICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUo
cGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlKGNhbWVsTmFtZSlzU2V0PiYgc2V0JShjYW1l
bE5hbWUpcyglKG1lbWJlclR5cGUpcyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJShjYW1lbE5hbWUpc1NldCksIHBy
b3BlcnR5XyUobmFtZSlzX2FscmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCi0KLSAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoIiUobmFtZSlz
Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMo
IiUobmFtZSlzIl9zLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0
KSwgcHJvcGVydHlfJShtZW1iZXJLZXkpc19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKHNldHRlcilzKCIl
KG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZhbHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPCUoY2FtZWxOYW1l
KXNTZXQ+KCk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
fScpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRl
X3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9tYWluKToK
KyAgICAgICAgbWVtYmVyX25hbWUgPSAnaW5fb3B0XycgKyB0eXBlX21lbWJlci5tZW1iZXJfbmFt
ZQorCisgICAgICAgIG1lbWJlcl92YWx1ZSA9IG1lbWJlcl9uYW1lCisgICAgICAgIGlmIHR5cGVf
bWVtYmVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1Byb3Rv
Y29sOjolczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNw
YWNlKCksIG1lbWJlcl92YWx1ZSkKKyAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21v
dmVfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgRmFsc2UpOgorICAgICAgICAgICAgbWVtYmVy
X3ZhbHVlID0gJ1dURk1vdmUoJXMpJyAlIG1lbWJlcl92YWx1ZQorCiAgICAgICAgIHNldHRlcl9h
cmdzID0gewogICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVt
YmVyX25hbWUpLAotICAgICAgICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAotICAgICAgICAgICAgJ25hbWUn
OiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzog
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciksCi0gICAg
ICAgICAgICAnaGVscGVyc05hbWVzcGFjZSc6IHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwKKyAg
ICAgICAgICAgICdzZXR0ZXInOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUodHlwZV9tZW1iZXIudHlwZSksCisgICAgICAgICAgICAnbWVtYmVyS2V5JzogdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IG1lbWJlcl9uYW1lLAor
ICAgICAgICAgICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAorICAgICAgICAgICAgJ21l
bWJlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50
KHR5cGVfbWVtYmVyLnR5cGUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKICAgICAgICAgfQog
CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMg
dmFsdWUpJyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkIHNl
dCUoY2FtZWxOYW1lKXMoJShtZW1iZXJUeXBlKXMgJShtZW1iZXJOYW1lKXMpJyAlIHNldHRlcl9h
cmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShrZXllZFNldClzKCIlKG5hbWUpcyJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSk6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShrZXllZFNldClz
KCIlKG5hbWUpcyJfcywgV1RGTW92ZSh2YWx1ZSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShzZXR0ZXIpcygi
JShtZW1iZXJLZXkpcyJfcywgJShtZW1iZXJWYWx1ZSlzKTsnICUgc2V0dGVyX2FyZ3MpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQogCkBAIC0zODEsMTMgKzM4OSwxMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJh
dGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBzZWxmLnR5cGVfbmVl
ZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpXQogCiAgICAgICAgICAgICBmb3IgdHlwZV9k
ZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6Ci0gICAgICAgICAgICAgICAg
Zm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgotICAgICAg
ICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwg
dHlwZV9kZWNsYXJhdGlvbikpLCBGYWxzZSkpCi0KICAgICAgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CiAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpLCBHZW5lcmF0b3IudHlwZV9u
ZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQogCisgICAgICAgICAg
ICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgor
ICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1U
eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlv
biwgQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLnR5cGUsICclczo6
JXMnICUgKHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1l
bWJlcl9uYW1lKSkpKSwgRmFsc2UpKQorCiAgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3Ry
dWN0J10KICAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KICAgICAg
ICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRf
bWFjcm8nLCBOb25lKQpAQCAtMzk5LDcgKzQwNyw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5
cGVfYXJndW1lbnRzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJp
bmRpbmdUcmFpdHM8JXM+IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50
WzBdKSkKICAgICAgICAgICAgIGlmIGFyZ3VtZW50WzFdOgotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnc3RhdGljIFJlZlB0cjwlcz4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVl
PiYmIHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdzdGF0aWMgUmVmPCVzPiBydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycg
JSBhcmd1bWVudFswXSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29y
ZHMpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCkBAIC00MzgsMTMgKzQ0NiwxMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMg
PSBbXQogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICcl
cycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAgICAgICAgIGZvciBlbnVtX3R5
cGUgaW4gZW51bV90eXBlczoKLSAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCisgICAgICAg
ICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Vu
dW0oZW51bV90eXBlLCBlbnVtX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgICAgICAgICBkb21h
aW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90
eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhw
b3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAg
ICAgICAgICAgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlczoKICAgICAgICAgICAgICAg
ICBvYmplY3RfbGluZXMgPSBbXQogICAgICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBm
aWx0ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVt
YmVycyk6Ci0gICAgICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X3R5cGUuZGVjbGFyYXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5
cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0oZW51bV9tZW1iZXIudHlwZSwgJyVz
OjolcycgJSAob2JqZWN0X3R5cGUucmF3X25hbWUoKSwgdWNmaXJzdChlbnVtX21lbWJlci5tZW1i
ZXJfbmFtZSkpKQogICAgICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKCd0ZW1w
bGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycg
JSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBf
cHJvdG9jb2xfdHlwZSkpCiAgICAgICAgICAgICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAg
ICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKG9iamVjdF9saW5lcykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cmlu
ZGV4IDVkZDUzNDY5NDQ4NTUxNTQ4ZDY3YWEwYjQ1NmM2YTFhNjY1OGQ1OTMuLjEzZTU4OTcyNmQ0
Y2RiN2E0NTJjNjcwYzgzMjVlYjFhMzllZTYyMjIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkKQEAgLTgyLDEwICs4Miw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNv
bmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBb
Ci0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3Rm
L09wdGlvbmFsLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQi
XSwgKCJXVEYiLCAid3RmL3RleHQvQ1N0cmluZy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNj
cmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9Bc3NlcnRpb25zLmgiKSksCiAgICAg
ICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNf
ZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1f
bWFwcGluZyhzZWxmKToKQEAgLTE0NCwxNCArMTQyLDE0IEBAIGNsYXNzIENwcFByb3RvY29sVHlw
ZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9
IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICclcycgRG9tYWluIiAl
IGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVz
OgotICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBlKQorICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5
cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0oZW51bV90eXBlLCBlbnVtX3R5cGUu
cmF3X25hbWUoKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlwZS5k
ZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShl
bnVtX3R5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkpCiAKICAgICAgICAgZm9yIG9iamVjdF90eXBl
IGluIG9iamVjdF90eXBlczoKICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255bW91c19l
bnVtX3R5cGUsIG9iamVjdF90eXBlLm1lbWJlcnMpOgotICAgICAgICAgICAgICAgIGNwcF9wcm90
b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJl
cihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKSkKKyAgICAgICAgICAgICAg
ICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVt
X21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFtZSgpLCB1Y2ZpcnN0
KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVz
LmFwcGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fbWVtYmVyLnR5cGUs
IGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMpOgog
ICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcyk6CkBAIC0xODMsOCArMTgxLDcgQEAgY2xhc3Mg
Q3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBbZGVjbCBmb3IgZGVjbCBpbiB0eXBl
X2RlY2xhcmF0aW9ucyBpZiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBl
KV06CiAgICAgICAgICAgICAgICAgb3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRz
KHR5cGVfZGVjbGFyYXRpb24pCiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNv
cnRlZChvcGVuX21lbWJlcnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUp
OgotICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9y
JywgJ1Byb3RvY29sJywgZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRp
b24udHlwZV9uYW1lKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAgICAg
ICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7
JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisgICAgICAgICAgICAg
ICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqIFByb3RvY29sOjolczo6JXM6
OiVzS2V5ID0gIiVzIjsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSksIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLCB0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSkpCiAgICAgICAgICAgICBpZiBsZW4oZG9tYWluX2xpbmVzKToKICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKQEAgLTIyNywzNyAr
MjI0LDU0IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRz
PCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSAo
Q3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlv
bi50eXBlKSkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CisgICAgQVNTRVJUX1VOVVNFRCh2
YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOyIiIikKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVl
LT5hc09iamVjdCgpOworICAgIEFTU0VSVChvYmplY3QpOyIiIikKICAgICAgICAgZm9yIHR5cGVf
bWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IHR5
cGVfbWVtYmVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEFs
aWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IG1lbWJlcl90eXBlLmFs
aWFzZWRfdHlwZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlcl90eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5
cGVfZm9yX2VudW0obWVtYmVyX3R5cGUsICclczo6JXMnICUgKG9iamVjdF9kZWNsYXJhdGlvbi50
eXBlX25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyX3R5cGUpCisKICAgICAgICAgICAgIGFyZ3MgPSB7
CiAgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwK
LSAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRp
b25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9u
KQorICAgICAgICAgICAgICAgICdtZW1iZXJUeXBlJzogbWVtYmVyX3R5cGUKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7CiAgICAgICAgIGF1dG8gJSht
ZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoIiUobWVtYmVyTmFtZSlzIl9zKTsKICAgICAg
ICAgQVNTRVJUKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICAl
KGFzc2VydE1ldGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAg
IEJpbmRpbmdUcmFpdHM8JShtZW1iZXJUeXBlKXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZSglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUucHRyKCkpOwogICAgIH0iIiIgJSBhcmdzKQogCiAg
ICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaW50IGZvdW5kUHJvcGVydGll
c0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3VudCA9ICVzOycgJSBsZW4ocmVx
dWlyZWRfbWVtYmVycykpCiAKICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIG9wdGlvbmFsX21l
bWJlcnM6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IHR5cGVfbWVtYmVyLnR5cGUKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAg
ICAgICAgICBtZW1iZXJfdHlwZSA9IG1lbWJlcl90eXBlLmFsaWFzZWRfdHlwZQorCisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKG1lbWJlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAg
ICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0obWVtYmVyX3R5
cGUsICclczo6JXMnICUgKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QodHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUo
bWVtYmVyX3R5cGUpCisKICAgICAgICAgICAgIGFyZ3MgPSB7CiAgICAgICAgICAgICAgICAgJ21l
bWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAnYXNz
ZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICAgICAgICAgICdt
ZW1iZXJUeXBlJzogbWVtYmVyX3R5cGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCIiIiAgICB7CiAgICAgICAgIGF1dG8gJShtZW1iZXJOYW1lKXNQb3MgPSBvYmpl
Y3QtPmZpbmQoIiUobWVtYmVyTmFtZSlzIl9zKTsKICAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlz
UG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJSht
ZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsiIiIgJSBhcmdzKQorICAgICAgICAgICAgQmlu
ZGluZ1RyYWl0czwlKG1lbWJlclR5cGUpcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUo
bWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5wdHIoKSk7IiIiICUgYXJncykKIAogICAgICAgICAgICAg
aWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OycpCkBAIC0yNjcsMjcgKzI4MSwy
MiBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5z
aXplKCkpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBGQVRBTCgiVW5leHBl
Y3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbHNlIC8vIEFTU0VS
VF9FTkFCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRCcpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXNz
ZXJ0aW9uX2Zvcl9lbnVtKHNlbGYsIGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgog
ICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhKU09OOjpW
YWx1ZSogdmFsdWUpJyAlIENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlw
ZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0o
ZW51bV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFt
ZSwgdWNmaXJzdChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSkpKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwg
dmFsdWUpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEFTU0VSVF9FTkFCTEVEJykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmluZyByZXN1bHQ7JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFzU3RyaW5nKCk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKHJlc3VsdCk7JykKIAogICAgICAgICBh
c3NlcnRfY29uZGl0aW9uID0gJyB8fCAnLmpvaW4oWydyZXN1bHQgPT0gIiVzIicgJSBlbnVtX3Zh
bHVlIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVCglcyk7JyAlIGFzc2VydF9jb25kaXRpb24p
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcjZW5kaWYnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggM2UxMzk3NGFi
MzYyMTNkYTc4YjcyY2EyMzJlNzdlMWE5OTRjNTVmNy4uOTZiNmI2MTI2ZGM3ZWQ4MTMyYzNmMmUy
MzVkZTNmNzAxZGNmODkxMSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzMsMTMg
KzMzLDEzIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogdHJ5OgogICAgIGZyb20gLmNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmdlbmVyYXRvciBpbXBv
cnQgR2VuZXJhdG9yCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCisgICAgZnJv
bSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKICAgICBm
cm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogICAgIGZyb20gLm9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1w
b3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAg
ICBmcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBF
bnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9y
IGltcG9ydCBPYmpDR2VuZXJhdG9yCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC0xMDMs
OSArMTAzLDE5IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0
aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcmVxdWVzdElkJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0
ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zv
cm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHByb3RvY29sX2NhbGxJZCddCisgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBw
YXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAn
b3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgn
JXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIocGFy
YW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAog
ICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21t
YW5kLmNvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggZjVlZThlNTgzOThkNjliYWU0YmViNGMxODY3MDYzY2NkNTIyMDllYy4uMWJkOTYz
NWJkMzI1MTk5MTUxY2ZkOTgwMTNhNTEyNzI4OTg4ZDFiOSAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTkwLDkgKzkwLDIwIEBAIGNsYXNzIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYs
IGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVy
cyA9IFsnbG9uZyByZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHByb3Rv
Y29sX2NhbGxJZCddCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1l
dGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIHBhcmFtZXRlcl90
eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVy
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBh
cmFtZXRlcl90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJh
bWV0ZXJfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0g
cGFyYW1ldGVyX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1l
dGVyX25hbWUKKworICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlcl90eXBlLCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY29tbWFu
ZF9hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUs
CkBAIC0xMTUsNDUgKzEyNiw1NCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgaWYgY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVyczoKICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycyA9IFtd
CiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ29wdF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvdXRfJyArIG91dF9wYXJhbV9uYW1lCiAgICAg
ICAgICAgICAgICAgb2JqY190eXBlID0gc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwg
Y29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAgICAgICAgICAgICAgICB2YXJfbmFt
ZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVy
cy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgdmFyX25hbWUpKQorICAgICAg
ICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9u
YW1lKG9iamNfdHlwZSwgb3V0X3BhcmFtX25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXiglcykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19i
bG9ja19wYXJhbWV0ZXJzKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57JykKIAorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7JykKICAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCi0KICAgICAgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJf
cGFyYW1ldGVycyA9IFtwYXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9w
YXJhbWV0ZXJzIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3Iu
aXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAgICBm
b3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKLSAgICAgICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywgQCIl
cyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAn
b3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0g
J291dF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsn
ICUgKG91dF9wYXJhbV9uYW1lLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQogICAgICAgICAg
ICAgICAgIG9iamNfYXJyYXlfY2xhc3MgPSBzZWxmLm9iamNfY2xhc3NfZm9yX2FycmF5X3R5cGUo
cGFyYW1ldGVyLnR5cGUpCiAgICAgICAgICAgICAgICAgaWYgb2JqY19hcnJheV9jbGFzcyBhbmQg
b2JqY19hcnJheV9jbGFzcy5zdGFydHN3aXRoKHNlbGYub2JqY19wcmVmaXgoKSk6Ci0gICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFX0lOX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKHZhcl9uYW1lLCBvYmpjX2FycmF5
X2NsYXNzKSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAob3V0
X3BhcmFtX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQogCiAgICAgICAgICAgICBvcHRpb25hbF9w
b2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVycyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0
b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50
aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
JXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgb3V0
X3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbV9u
YW1lID0gJ29wdF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9ICdvdXRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUigl
cywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
CiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNlbGYub2JqY19jbGFzc19mb3Jf
YXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAgICAgICBpZiBvYmpjX2FycmF5
X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgoc2VsZi5vYmpjX3ByZWZpeCgp
KToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fT1BUSU9OQUxfQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAo
dmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05BTF9B
UlJBWSglcywgWyVzIGNsYXNzXSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFz
cykpCiAKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1l
dGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFtZQor
ICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25hbWUK
ICAgICAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQotICAgICAgICAgICAgICAgIHZhcl9u
YW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24gPSAnKiVz
JyAlIHZhcl9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCisgICAg
ICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24gPSAnKiVzJyAlIG91dF9wYXJhbV9uYW1lIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbCBlbHNlIG91dF9wYXJhbV9uYW1lCiAgICAgICAgICAgICAgICAg
ZXhwb3J0X2V4cHJlc3Npb24gPSBzZWxmLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25f
Zm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCB2YXJfZXhwcmVzc2lvbikKICAgICAgICAgICAg
ICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgcmVzdWx0T2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtl
eWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Np
b24pKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCiAgICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGlmICglcykn
ICUgdmFyX25hbWUpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOycpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOycp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBpZiAoISElcyknICUg
b3V0X3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0
X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFs
c2UpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQpAQCAtMTY2LDE3ICsxODYsMjcgQEAgY2xhc3MgT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
IGRlZiBpbl9wYXJhbV9leHByZXNzaW9uKHBhcmFtX25hbWUsIHBhcmFtZXRlcik6CiAgICAgICAg
ICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorICAgICAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgotICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICAgICAgaWYgX3R5cGUu
cmF3X25hbWUoKSBpbiBbJ2FycmF5JywgJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICcmJXMnICUgcGFyYW1fbmFtZSBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsIGVsc2UgcGFyYW1fbmFtZQotICAgICAgICAgICAgICAgIHJldHVybiAnKiVzJyAlIHBhcmFt
X25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgcGFyYW1fbmFtZQotICAgICAgICAg
ICAgcmV0dXJuICcmJXMnICUgcGFyYW1fbmFtZSBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZl
X3R5cGUKKworICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1fbmFt
ZSA9ICcqJyArIHBhcmFtX25hbWUKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjpI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgcGFyYW1fbmFtZQorICAgICAgICAg
ICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbV9uYW1lICsgJy5y
ZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJl
ZmVyZW5jZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJyonICsgcGFyYW1fbmFtZQorICAgICAgICAgICAgaWYgQ3BwR2VuZXJh
dG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnV1RGTW92ZSglcyknICUgcGFyYW1fbmFtZQorICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtX25hbWUKIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycg
JSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKKyAgICAgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ29wdF8nICsgaW5fcGFyYW1f
bmFtZQorICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8nICsgaW5fcGFyYW1fbmFtZQog
ICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9uYW1lID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQog
ICAgICAgICAgICAgb2JqY190eXBlID0gc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwg
Y29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciwgRmFsc2UpCiAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CkBAIC0xOTQsMTEgKzIyNCw4IEBA
IGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICVzOycgJSBqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpjX2luX3Bh
cmFtX25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICglcyknICUg
aW5fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoISEl
cyknICUgaW5fcGFyYW1fbmFtZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgJXMgPSAlczsnICUgKG9iamNfaW5fcGFyYW1fbmFtZSwgaW1wb3J0X2V4cHJlc3Npb24pKQot
Ci0gICAgICAgIGlmIGxpbmVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbnZvY2F0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CkBAIC0yMDYsNyArMjMzLDEwIEBA
IGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogICAgICAgICBwYWlycy5hcHBlbmQoJ1dpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2snKQogICAgICAgICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2snKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ29wdF8nICsgaW5fcGFyYW1fbmFtZQorICAgICAgICAg
ICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8nICsgaW5fcGFyYW1fbmFtZQogICAgICAgICAgICAgb2Jq
Y19pbl9wYXJhbV9leHByZXNzaW9uID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQogICAgICAgICAg
ICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CkBAIC0yMTcsNiArMjQ3LDYgQEAgY2xh
c3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51
bVR5cGUpOgogICAgICAgICAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAn
JXMudmFsdWUoKScgJSBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24KIAotICAgICAgICAgICAgICAg
IG9wdGlvbmFsX2V4cHJlc3Npb24gPSAnKCVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFt
ZSwgb2JqY19pbl9wYXJhbV9leHByZXNzaW9uKQorICAgICAgICAgICAgICAgIG9wdGlvbmFsX2V4
cHJlc3Npb24gPSAnKCEhJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2lu
X3BhcmFtX2V4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycg
JSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKICAgICAg
ICAgcmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRfbmFt
ZSwgJyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CmluZGV4IGRkZGIyN2E4OGMyYmFmZjVmYzZmMjdiYzQzYTAxZTMxZWE5Y2Q0OWQuLjhk
NDE5MzgxMjNmOTA2ZmJmMDkxZTJhYjdiMzZhNjA3MzNkYjM5NTIgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEyNSwxMSArMTI1LDExIEBAIGNsYXNz
IE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKICAgICAgICAgaWYgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzIG9yIG9wdGlvbmFs
X3BvaW50ZXJfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiJXMuJXMiX3MpOycgJSAoZG9tYWluLmRvbWFp
bl9uYW1lLCBldmVudC5ldmVudF9uYW1lKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiJXMuJXMiX3MpOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBldmVudC5ldmVudF9u
YW1lKSkKICAgICAgICAgaWYgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGxp
bmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhkb21haW4sIGV2
ZW50KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJvdXRl
ci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKQEAg
LTE0NSwxNiArMTQ1LDE2IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRf
b3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGxpbmVzID0gW10K
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBh
dXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAg
ICAga2V5ZWRfc2V0X21ldGhvZCA9IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3Jf
dHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCiAgICAgICAgICAgICBzYWZlX3Zhcl9uYW1lID0gJygqJXMpJyAlIHZhcl9u
YW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCiAgICAgICAgICAgICBl
eHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9m
b3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHNhZmVfdmFyX25hbWUpCiAgICAgICAgICAgICBp
ZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHBhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPiVzKCIlcyJf
cywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBl
eHBvcnRfZXhwcmVzc2lvbikpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIGlmICglcyknICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0g
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JXMoIiVz
Il9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
IGV4cG9ydF9leHByZXNzaW9uKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOycpCisgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29s
X3BhcmFtc09iamVjdCkpOycpCiAgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yLnB5CmluZGV4IDk0ZDE4ZDlkNjYxOTRkMTU4NWMwZTEwYzA0OTRiYjRiMWExM2I5NTUuLjI5
YTJkZWE3MjRmMGJiZWNmZWJhNmRiOTIwNjA4MTcwMWU1MTBjNTEgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3IucHkKQEAgLTczLDkgKzczLDYgQEAgX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUyA9
IHNldChbCiAgICAgIlJ1bnRpbWUuQ29sbGVjdGlvbkVudHJ5IiwKICAgICAiRGVidWdnZXIuRnVu
Y3Rpb25EZXRhaWxzIiwKICAgICAiRGVidWdnZXIuQ2FsbEZyYW1lIiwKLSAgICAiQ2FudmFzLlRy
YWNlTG9nIiwKLSAgICAiQ2FudmFzLlJlc291cmNlSW5mbyIsCi0gICAgIkNhbnZhcy5SZXNvdXJj
ZVN0YXRlIiwKICAgICAjIFRoaXMgc2hvdWxkIGJlIGEgdGVtcG9yYXJ5IGhhY2suIFRpbWVsaW5l
RXZlbnQgc2hvdWxkIGJlIGNyZWF0ZWQgdmlhIGdlbmVyYXRlZCBDKysgQVBJLgogICAgICJUaW1l
bGluZS5UaW1lbGluZUV2ZW50IiwKICAgICAjIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCkBA
IC04NSwxMCArODIsMTkgQEAgX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUyA9IHNldChbCiAj
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpTT04u
CiBfVFlQRVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHsKICAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVu
dCI6IFtdLAotICAgICMgSW5zcGVjdG9yU3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRoaXMg
cHJvcGVydHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5kIG1vZGlmeSBpdC4KLSAgICAiQ1NTLkNT
U1Byb3BlcnR5IjogW10sCi0gICAgIyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgbmVlZHMgdG8gdXBk
YXRlIG1pbWUtdHlwZS4KLSAgICAiTmV0d29yay5SZXNwb25zZSI6IFsibWltZVR5cGUiXSwKKyAg
ICAiQ1NTLkNTU1Byb3BlcnR5IjogWyJwcmlvcml0eSIsICJwYXJzZWRPayIsICJzdGF0dXMiXSwK
KyAgICAiRE9NLkhpZ2hsaWdodENvbmZpZyI6IFtdLAorICAgICJET00uUkdCQUNvbG9yIjogW10s
CisgICAgIkRPTVN0b3JhZ2UuU3RvcmFnZUlkIjogW10sCisgICAgIkRlYnVnZ2VyLkJyZWFrcG9p
bnRBY3Rpb24iOiBbXSwKKyAgICAiRGVidWdnZXIuQnJlYWtwb2ludE9wdGlvbnMiOiBbXSwKKyAg
ICAiRGVidWdnZXIuTG9jYXRpb24iOiBbXSwKKyAgICAiSW5kZXhlZERCLktleSI6IFtdLAorICAg
ICJJbmRleGVkREIuS2V5UmFuZ2UiOiBbXSwKKyAgICAiTmV0d29yay5SZXNwb25zZSI6IFsic3Rh
dHVzIiwgInN0YXR1c1RleHQiLCAibWltZVR5cGUiLCAic291cmNlIl0sCisgICAgIlBhZ2UuQ29v
a2llIjogW10sCisgICAgIlJ1bnRpbWUuQ2FsbEFyZ3VtZW50IjogWyJvYmplY3RJZCJdLAorICAg
ICJSdW50aW1lLlR5cGVMb2NhdGlvbiI6IFtdLAogICAgICMgRm9yIHRlc3RpbmcgcHVycG9zZXMg
b25seS4KICAgICAiVGVzdC5PcGVuUGFyYW1ldGVycyI6IFsiYWxwaGEiXSwKIH0KQEAgLTEzNCw3
ICsxNDAsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICBpZiBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLm5hbWUgbm90IGluIGFsbG93ZWRfZnJhbWV3b3JrczoKICAgICAgICAgICAgICAg
ICBjb250aW51ZQogCi0gICAgICAgICAgICBpZiBmcmFtZXdvcmtfbmFtZSA9PSAiV1RGIjoKKyAg
ICAgICAgICAgIGlmIGZyYW1ld29ya19uYW1lID09ICJXVEYiIG9yIGZyYW1ld29ya19uYW1lID09
ICJzdGQiOgogICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1ZGUgPCVzPiIgJSBo
ZWFkZXJfcGF0aCkKICAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1l
ICE9IGZyYW1ld29ya19uYW1lOgogICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1
ZGUgPCVzLyVzPiIgJSAoZnJhbWV3b3JrX25hbWUsIG9zLnBhdGguYmFzZW5hbWUoaGVhZGVyX3Bh
dGgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKaW5kZXggNzMxNTNiOTU0NjY3
MmI5OTA0ZTdmNWViOTE4ODY1ZmM4YTUxNjhiNi4uYTJkMzc2ZGYzYjk0M2RkYzkxNjc4YmJiYTVh
MmVkM2YwMmUzNzBjMCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKQEAgLTI2
Myw3ICsyNjMsNyBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgogICAgICAgICAgICAgcmV0dXJuIE9iakNH
ZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKICAg
ICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJl
dHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuICdQcm90
b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5y
YXdfbmFtZSgpKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CiAg
ICAgICAgICAgICBzdWJfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlw
ZShfdHlwZS5lbGVtZW50X3R5cGUpCiAgICAgICAgICAgICByZXR1cm4gJ0pTT046OkFycmF5T2Y8
JXM+JyAlIHN1Yl90eXBlCkBAIC0zNTMsOCArMzUzLDYgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihH
ZW5lcmF0b3IpOgogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkp
OgogICAgICAgICAgICAgcmV0dXJuIHNlbGYub2JqY190eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5y
YXdfbmFtZSgpKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAg
ICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwg
ZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKF90eXBlKQogICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgogICAgICAgICAgICAgcmV0dXJuIHNl
bGYub2JqY19uYW1lX2Zvcl90eXBlKF90eXBlKSArICcgKicKQEAgLTM5OCw4ICszOTYsNiBAQCBj
bGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICBkZWYgb2JqY19wcm90b2NvbF9p
bXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVyKHNlbGYsIG5hbWUsIGRvbWFpbiwgZXZlbnRf
b3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFt
ZXRlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIudHlwZS5pc19h
bm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+
KCVzKScgJSAoc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVy
KGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpLCBuYW1lKQogICAgICAg
ICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoc2VsZi5vYmpjX2Vu
dW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKHBhcmFtZXRlci50eXBlKSwgbmFtZSkKICAg
ICAgICAgcmV0dXJuIHNlbGYub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFy
aWFibGUocGFyYW1ldGVyLnR5cGUsIG5hbWUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAzMjZjMjYyNWVhMzRmMDY2YjJkNGNjOTg0
NmUxNGEyMzQxYjgxODgxLi5iNTZkMTQ4MTk1YzRiNjVmZmQyNDNhOTkxMGFhZDM2MzMzYTA4NTJk
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
CkBAIC0xMTQsMTMgKzExNCwxMyBAQCBwcml2YXRlOgogICAgICIiInZvaWQgT2JqQ0luc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtjb21tYW5kTmFtZX0oJHtwYXJhbWV0
ZXJzfSkKIHsKICAgICBpZiAoISR7cmVzcG9uZHNUb1NlbGVjdG9yfSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0n
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0nIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVt
LXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2VudW0tdmFsdWVzLmpzb24KaW5kZXggY2RhZDYxZGY3YzlmOWM3NmU2OTI4OTdjM2RmZTBi
MDgyM2Y5MGU0ZC4uMjgxNTYxYjk0OGUxOWE0MWZhMGEyYzgwZWNmMmUwOWFmM2E4YmM0OSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Vu
dW0tdmFsdWVzLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KQEAgLTMsOSArMyw5IEBACiAgICAgImRvbWFpbiI6
ICJUeXBlRG9tYWluIiwKICAgICAidHlwZXMiOiBbCiAgICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJUeXBlRG9tYWluRW51bSIsCisgICAgICAgICAgICAiaWQiOiAiRW51bSIsCiAgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJy
ZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgIjEi
LCAiMiJdCiAgICAgICAgIH0KICAgICBdCiB9LApAQCAtMTMsMTAgKzEzLDE4IEBACiAgICAgImRv
bWFpbiI6ICJDb21tYW5kRG9tYWluIiwKICAgICAiY29tbWFuZHMiOiBbCiAgICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwKLSAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogW10sCisgICAgICAgICAgICAibmFtZSI6ICJjb21tYW5kIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51
bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyUmVx
dWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZFJlcXVp
cmVkIiwgImJsYWNrIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9w
dGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRp
b25hbCIsICJyZWQiXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdLAogICAgICAg
ICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5WYWx1
ZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lhbiIsICJtYWdlbnRh
IiwgInllbGxvdyJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJlZCIs
ICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJldHVyblJlcXVpcmVkIiwgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJ3aGl0ZSJd
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5PcHRpb25hbCIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAic2hhcmVkT3B0aW9uYWwiLCAiYmx1ZSJdLCAi
b3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0KQEAgLTI1
LDkgKzMzLDEyIEBACiAgICAgImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCiAgICAgImV2ZW50cyI6
IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRl
ciIsCisgICAgICAgICAgICAibmFtZSI6ICJldmVudCIsCiAgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiYmxhY2siLCAid2hpdGUiXSB9CisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAiJHJlZiI6ICJU
eXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJz
aGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiZ3JleSJdIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXJhbWV0ZXJPcHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJz
aGFyZWQiLCAic2hhcmVkT3B0aW9uYWwiLCAiZ3JlZW4iXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CiAg
ICAgICAgICAgICBdCiAgICAgICAgIH0KICAgICBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmluZGV4
IGU5YzE4YmZhZTViMzJjOTU3YmJlYWQ0ZTBlYjlkMDZiNjM5OGIwNjMuLjMyZDRhOGU4MTE0NjAx
ZWZkNjZlZjk4NzliZGNhNmNmZmU3MGJjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC03
MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsi
cGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIs
NyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNs
YXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMs
OSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQo
bG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1
YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIy
NSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwog
fQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3Zv
aWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90
b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3Rv
Y29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7
CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAi
Q29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcs
NiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2
ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNl
bmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDks
NyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7
CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMg
bm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwg
ZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAg
ICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRl
ciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICBy
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAppbmRl
eCBkMWM2OWIwMzFjZGI0NzFkMThhMmU0OTc4ZjIxMjdiMGVjZDQ3YzUyLi40Y2U2ZmMzZDIxMzZh
NGViNGFiMjI0NjUxYTliZmIxNjVlNDUzMGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0CkBAIC03Myw3ICs3Myw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTEsMTAgKzkxLDEwIEBAIHByaXZhdGU6CiBjbGFz
cyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3lu
Yyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29s
X2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgcXVlcnkpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTM2
LDExICsxMzYsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQ4LDI3ICsxNTEsMjAgQEAgY2xhc3MgQWx0
ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRl
ciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAg
ICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1
LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JT
dHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0
cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1w
LCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAg
dmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+IC8qIG9wdF9jb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8qIG9wdF9ub3Rl
cyAqLywgT3B0aW9uYWw8ZG91YmxlPiAvKiBvcHRfdGltZXN0YW1wICovLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiAvKiBvcHRfdmFsdWVzICovLCBSZWZQdHI8SlNPTjo6VmFsdWU+IC8qIG9wdF9wYXls
b2FkICovLCBPcHRpb25hbDxpbnQ+IC8qIG9wdF9kYXRhYmFzZUlkICovLCBSZWZQdHI8UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gLyogb3B0X3NxbEVycm9yICovLCBPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IC8qIG9wdF9zY3JlZW5Db2xvciAqLywgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBvcHRfYWx0ZXJuYXRlQ29sb3JzICov
LCBTdHJpbmcgLyogb3B0X3ByaW50Q29sb3IgKi8+PiBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CiAgICAg
Y2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1Ymxp
YyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmRE
aXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4m
IHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYm
IHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3IpOworICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1l
c3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZh
bHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNlSWQsIFJlZlB0
cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxFcnJvciwgT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
U3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJp
bmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92
YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0
ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyogb3V0X3NjcmVlbkNvbG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
cXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYm
KSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJl
ZjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIGNvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogbm90
ZXMgKi8sIGRvdWJsZSAvKiB0aW1lc3RhbXAgKi8sIFJlZjxKU09OOjpPYmplY3Q+IC8qIHZhbHVl
cyAqLywgUmVmPEpTT046OlZhbHVlPiAvKiBwYXlsb2FkICovLCBpbnQgLyogZGF0YWJhc2VJZCAq
LywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIHNxbEVycm9yICovLCBSZWY8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgUHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBTdHJpbmcgLyog
cHJpbnRDb2xvciAqLz4+IGV4ZWN1dGVTUUxTeW5jKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5KSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJs
aWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBp
ZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
SlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
IHByaW50Q29sb3IpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZjxKU09OOjpBcnJheU9m
PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNx
bEVycm9yLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJl
ZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyYgcHJpbnRDb2xvcik7CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE3NiwxMiArMTcy
LDEyIEBAIHByb3RlY3RlZDoKIGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjMwLDkgKzIyNiw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI1NCwzNyArMjQ4LDM2IEBA
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFy
YW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAg
IGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7Ci0g
ICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikgeworICAgICAgICBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0
ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAg
aWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKSB7CisgICAgICAgIGV4ZWN1
dGVTUUxTeW5jKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFz
eW5jIikgewotICAgICAgICBleGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7
CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9j
b2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0
ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVy
eSJfcywgbnVsbHB0cik7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJf
cywgdHJ1ZSk7CisgICAgYXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0
cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlm
IChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTI5Miw4NSArMjg1LDc2IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVl
c3RJCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFi
YXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNl
SWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9y
OwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAg
IE9wdGlvbmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3Rp
bWVzdGFtcDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0
aW9uYWw8SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2Rh
dGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAg
ICBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9k
YXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1l
c3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVy
cm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Km91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAo
b3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2Ny
ZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KCppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1u
TmFtZXMsIG91dF9vcHRfbm90ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywg
b3V0X29wdF9wYXlsb2FkLCBvdXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91
dF9vcHRfc2NyZWVuQ29sb3IsIG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50
Q29sb3JdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2Nv
bHVtbk5hbWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCBvdXRfb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCBvdXRfb3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFt
cCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCAqb3V0X29wdF90aW1lc3RhbXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFs
dWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3Bh
eWxvYWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQor
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
Km91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRf
c3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xv
cikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRf
c2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9v
cHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgb3V0X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25N
ZXNzYWdlKSwgZmFsc2UpOwogfQogCiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYg
YmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0
aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0
ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3I+IHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRf
cGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRfc3FsRXJyb3IsIE9wdGlvbmFsPFByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4mJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcm
IG9wdF9wcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIGpz
b25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBp
ZiAobm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90
ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICBq
c29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlm
ICh2YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFs
dWVzIl9zLCAqdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICBq
c29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAoZGF0
YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBpZiAoc2Ny
ZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAg
ICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0
ZUNvbG9ycyk7Ci0gICAgaWYgKHByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIENhbGxi
YWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmICghIW9w
dF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW9wdF9ub3RlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bm90ZXMiX3MsIG9wdF9ub3Rlcyk7CisgICAgaWYgKCEhb3B0X3RpbWVzdGFtcCkKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3B0X3RpbWVz
dGFtcCk7CisgICAgaWYgKCEhb3B0X3ZhbHVlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIGlmICghIW9wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIG9wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW9wdF9kYXRhYmFzZUlkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50
ZWdlcigiZGF0YWJhc2VJZCJfcywgKm9wdF9kYXRhYmFzZUlkKTsKKyAgICBpZiAoISFvcHRfc3Fs
RXJyb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBvcHRfc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3NjcmVl
bkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3B0
X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG9wdF9h
bHRlcm5hdGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3ByaW50Q29s
b3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3Ii
X3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KQogewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRy
dWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0zNzgsMjAgKzM2MiwxOCBAQCB2b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVl
c3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJ
ZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIFJl
ZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsK
LSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQorICAgIG1fYWdlbnQtPmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKCppbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSwgYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVy
LmNvcHlSZWYoKSwgcHJvdG9jb2xfY2FsbElkKSkpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9z
LCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRv
IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29s
X3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1
ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhh
c1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHByb2Nl
c3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTM5OSw2NSArMzgxLDU2IEBAIHZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMo
cHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3Vi
bGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09O
OjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0
ZXJuYXRlQ29sb3JzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FM
U3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91
dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9k
YXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVu
Q29sb3IsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMp
OwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAg
ICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1
bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMp
OwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRD
b2xvcikpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmMoKmluX2Rh
dGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQo
IXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1
bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworCisgICAgYXV0byBbb3V0X2NvbHVtbk5hbWVzLCBvdXRf
bm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJh
c2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfc2NyZWVuQ29sb3Is
IG91dF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShvdXRfY29s
dW1uTmFtZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShvdXRfdmFsdWVzKSk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKG91dF9wYXlsb2FkKSk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9k
YXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgV1RGTW92ZShvdXRfc3FsRXJyb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgV1RGTW92ZShvdXRfYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNv
bG9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgb3V0X3ByaW50Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7
CiB9CiAKIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmND
YWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNP
Tjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpCit2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2Vu
ZFN1Y2Nlc3MoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIo
ImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0
ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5k
U3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShjb2x1bW5OYW1lcykpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwor
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZSh2
YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFdURk1vdmUocGF5bG9hZCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2Vy
KCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgV1RGTW92ZShzcWxFcnJvcikpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7CisgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUoYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgcHJpbnRDb2xvcik7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZN
b3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywg
bnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgYXV0byBp
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9xdWVy
eSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQ
cm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDY1LDE0ICs0MzgsMTIgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmoKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5j
KHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKIAotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlz
cGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxB
c3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQorICAg
IG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGFkb3B0
UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQp
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNTEzLDYgKzQ4NCw3IEBAIHZv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC01NTYsNyArNTI4LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTk3LDcgKzU2OCw5IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjE5
LDcgKzU5Miw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKIG5hbWVzcGFjZSBEYXRhYmFz
ZSB7CiAvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCiB1c2luZyBE
YXRhYmFzZUlkID0gaW50OwotdXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47Cit1c2luZyBDb2xvckxpc3Qg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47CiB9IC8v
IERhdGFiYXNlCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTY0Myw3ICs2MTYsNyBAQCBlbnVt
IGNsYXNzIFByaW1hcnlDb2xvcnMgewogfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCiAK
IC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CitjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1
YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNjcwLDE3ICs2
NDMsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGlj
OgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNl
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2Vf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywg
aW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUo
aW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTcxOSw3ICs2OTIsNyBAQCBPcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwogCkBAIC03NzEsOCArNzQ0LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiA6IEludEhhc2g8SW5zcGUKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTc5
NywxNiArNzY5LDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewog
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQs
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMp
Y29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtODYz
LDEwICs4MzUsMTAgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAg
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBw
cm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRh
aW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
IH07CkBAIC05MTQsMTgzICs4ODYsMTc5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJp
bnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1
ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVD
b2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05T
dHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBp
ZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChk
YXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05P
YmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5D
b2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgq
YWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
KnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm91dF9vcHRfbm90ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKipvdXRfb3B0X3BheWxvYWQsIGludCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqb3V0X29wdF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpvdXRfb3B0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KipvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3Vz
KSAqb3V0X29wdF9wcmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9ub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxv
YWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIob3V0X29wdF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVD
b2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1u
TmFtZXMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAg
ICAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF90aW1lc3RhbXApCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICgh
IW91dF9vcHRfdmFsdWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBbKm91dF9vcHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICBpZiAoISFvdXRfb3B0X3BheWxvYWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJh
c2VJZCk7CisgICAgICAgIGlmICghIW91dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVy
cm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQor
ICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xv
cikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29s
b3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9k
YXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGlu
X3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsK
IH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3Ig
KnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3Rl
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAg
ICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBp
ZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2Ny
ZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9jb2x1bW5O
YW1lcywgTlNTdHJpbmcgKipvdXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqb3V0X29wdF9wYXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqb3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255
bW91cykgKm91dF9vcHRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9w
YXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRfb3B0X2Nv
bHVtbk5hbWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFtZXMpKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAgICAgIGlm
ICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAgICAgICBp
ZiAoISFvdXRfb3B0X3ZhbHVlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAg
ICAgICAgaWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pTT05PYmpl
Y3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2Rh
dGFiYXNlSWQpOworICAgICAgICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0X29wdF9z
cWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xv
cikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgICAg
IGlmICghIW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0X3ByaW50
Q29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgaW50IG9f
aW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkg
PSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNv
bG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0g
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNv
bHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Q
cm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29s
dW1uTmFtZXMsIE5TU3RyaW5nICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0
X3BheWxvYWQsIGludCBvdXRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
b3V0X3NxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlKGFub255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRf
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIob3V0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
dG9KU09OU3RyaW5nQXJyYXkob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXAp
OworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtv
dXRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9k
YXRhYmFzZUlkKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFtvdXRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5D
b2xvcikpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFi
YXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVl
cnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9f
aW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
CiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4
ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlk
OnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0
YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMn
IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3Rl
cywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xv
cnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQg
dG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJh
c2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xv
cikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0
X25vdGVzLCBkb3VibGUgb3V0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRf
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm91dF9zcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpvdXRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1v
dXMpIG91dF9wcmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihvdXRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5v
dGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91
dF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKG91dF9wYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRl
cm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9j
b2x1bW5OYW1lcykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBb
b3V0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9y
IHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfc2NyZWVuQ29sb3IpKTsKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
ZyhvdXRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFs
c2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsK
ICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUg
ZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9f
aW5fcXVlcnldOwogfQogCkBAIC0xMzQ2LDEwICsxMzE0LDEwIEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQs
IGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNj
ZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICop
cXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxi
YWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5Owot
LSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9p
ZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5
OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3Ip
KXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJp
bmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQp
ZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnlt
b3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CiBAZW5kCiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXgg
MWYyZjQ1ZDc0YzM5MzkxMTEyMzZhODY3ZDdmZmZkMjQwZTZkOTljNS4uM2U0NDI3NDg5NGMyZWQw
NjRlZThkMTk5ZTFhMGU0YzExNDRhYmZjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3
IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAt
ODgsOCArODgsOCBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMs
IGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVl
cywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBpbl9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBK
U09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
QXJyYXk+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3Zh
bHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYg
b3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBjb25z
dCBTdHJpbmcmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBSZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFs
dWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4mJiBhbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC0xMzEsMTEgKzEzMSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDMs
MTUgKzE0Niw4IEBAIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CiAK
IGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgotICAgIGVudW0gY2xhc3Mg
UHJpbnRDb2xvciB7Ci0gICAgICAgIEN5YW4gPSAzLAotICAgICAgICBNYWdlbnRhID0gNCwKLSAg
ICAgICAgWWVsbG93ID0gNSwKLSAgICAgICAgQmxhY2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xh
c3MgUHJpbnRDb2xvcgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2luX3RpbWVzdGFt
cCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSog
b3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9zY3JlZW5Db2xv
ciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
Zyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRf
b3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25h
bDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0
X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRp
b25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0
ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9w
dF9vdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpT
T046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBp
bl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYg
b3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1w
LCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50
KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2
aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gLyogb3B0X2NvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVz
ICovLCBPcHRpb25hbDxkb3VibGU+IC8qIG9wdF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpP
YmplY3Q+IC8qIG9wdF92YWx1ZXMgKi8sIFJlZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxv
YWQgKi8sIE9wdGlvbmFsPGludD4gLyogb3B0X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiAvKiBvcHRfc3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gLyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8s
IFN0cmluZyAvKiBvcHRfcHJpbnRDb2xvciAqLz4+IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMoUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBv
cHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwg
T3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9w
dF9zcWxFcnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYm
IG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
LyogY29sdW1uTmFtZXMgKi8sIFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFt
cCAqLywgUmVmPEpTT046Ok9iamVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8q
IHBheWxvYWQgKi8sIGludCAvKiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gLyogc3FsRXJyb3IgKi8sIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyAvKiBzY3JlZW5Db2xvciAqLywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAv
KiBhbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBzcWxFcnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIHByaW50Q29sb3IpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1OSwxMCArMTU1LDEwIEBAIHByb3Rl
Y3RlZDoKIGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjExLDkgKzIwNyw3IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
QEAgLTIzNSw0NyArMjI5LDM2IEBAIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywg
dGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwor
ICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMiKSB7Ci0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikgeworICAgICAgICBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJz
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzIikgewotICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0
aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7CisgICAgICAgIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFy
YW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGJvb2wgb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9j
b2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0
KCksICJjb2x1bW5OYW1lcyJfcywgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKLSAg
ICBib29sIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9p
bl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgp
LCAibm90ZXMiX3MsICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
dGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBkb3VibGUgb3B0X2luX3RpbWVzdGFt
cCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGlt
ZXN0YW1wIl9zLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9p
bl92YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9w
dF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInZhbHVlcyJfcywgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVl
PiBvcHRfaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRl
cnMuZ2V0KCksICJwYXlsb2FkIl9zLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7Ci0gICAg
Ym9vbCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgaW50IG9wdF9p
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCAiZGF0YWJhc2VJZCJfcywgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQpOwot
ICAgIGJvb2wgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRP
YmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCAmb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgJm9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2FsdGVybmF0
ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCks
ICJhbHRlcm5hdGVDb2xvcnMiX3MsICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQp
OwotICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0
cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVl
Rm91bmQpOworICAgIGF1dG8gaW5fb3B0X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBm
YWxzZSk7CisgICAgYXV0byBpbl9vcHRfbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBmYWxzZSk7CisgICAg
YXV0byBpbl9vcHRfdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBy
b3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIGZhbHNlKTsKKyAgICBhdXRv
IGluX29wdF92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3Bh
eWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJz
LmdldCgpLCAicGF5bG9hZCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJkYXRhYmFzZUlkIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfc3FsRXJyb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
InNxbEVycm9yIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfc2NyZWVuQ29sb3JfanNvbiA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgp
LCAic2NyZWVuQ29sb3IiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9hbHRlcm5hdGVDb2xv
cnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcHJpbnRD
b2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJz
LmdldCgpLCAicHJpbnRDb2xvciJfcywgZmFsc2UpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRj
aGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4Myw2
NSArMjY2LDU4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmCiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhyZXF1ZXN0SWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2lu
X2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAm
b3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9w
dF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9w
dF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZv
dW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9y
X3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVy
bmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51
bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3Ig
OiBudWxscHRyKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShpbl9vcHRfY29sdW1uTmFt
ZXMpLCBpbl9vcHRfbm90ZXMsIFdURk1vdmUoaW5fb3B0X3RpbWVzdGFtcCksIFdURk1vdmUoaW5f
b3B0X3ZhbHVlcyksIFdURk1vdmUoaW5fb3B0X3BheWxvYWQpLCBXVEZNb3ZlKGluX29wdF9kYXRh
YmFzZUlkKSwgV1RGTW92ZShpbl9vcHRfc3FsRXJyb3IpLCBpbl9vcHRfc2NyZWVuQ29sb3JfanNv
biwgV1RGTW92ZShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29sb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5n
PiBvdXRfbm90ZXM7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9w
dGlvbmFsPEpTT046Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1
ZT4gb3V0X3BheWxvYWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZv
dW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3Zh
bHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1
ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFs
dWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNl
SWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxF
cnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2lu
X3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwg
b3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9y
cy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2lu
X3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3Rp
bWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3Fs
RXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29s
b3IpOworICAgIGF1dG8gaW5fb3B0X3NjcmVlbkNvbG9yID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPihpbl9vcHRfc2NyZWVuQ29sb3JfanNvbik7CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91
dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0
YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91
dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFs
dWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91
dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYg
KG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9h
bHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29s
b3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29w
dF9ub3RlcywgV1RGTW92ZShpbl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVz
KSwgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBX
VEZNb3ZlKGluX29wdF9zcWxFcnJvciksIFdURk1vdmUoaW5fb3B0X3NjcmVlbkNvbG9yKSwgV1RG
TW92ZShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29sb3IpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAg
ICBhdXRvIFtvdXRfb3B0X2NvbHVtbk5hbWVzLCBvdXRfb3B0X25vdGVzLCBvdXRfb3B0X3RpbWVz
dGFtcCwgb3V0X29wdF92YWx1ZXMsIG91dF9vcHRfcGF5bG9hZCwgb3V0X29wdF9kYXRhYmFzZUlk
LCBvdXRfb3B0X3NxbEVycm9yLCBvdXRfb3B0X3NjcmVlbkNvbG9yLCBvdXRfb3B0X2FsdGVybmF0
ZUNvbG9ycywgb3V0X29wdF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOwor
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X29wdF9jb2x1bW5OYW1lcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X29wdF9ub3Rlcyk7CisgICAg
aWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFv
dXRfb3B0X3ZhbHVlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBvdXRfb3B0X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFv
dXRfb3B0X3BheWxvYWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgb3V0X29wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICgh
IW91dF9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOworICAgIGlmICghIW91
dF9vcHRfc3FsRXJyb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBvdXRfb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG91dF9vcHRfcHJpbnRDb2xvcik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgbnVsbHB0
cik7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5n
KHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7Ci0gICAgZG91YmxlIGluX3Rp
bWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgp
LCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92
YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwg
InZhbHVlcyJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2Fk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxv
YWQiX3MsIG51bGxwdHIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0
cik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBudWxscHRy
KTsKLSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51bGxw
dHIpOwotICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsKKyAgICBh
dXRvIGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocHJvdG9j
b2xfcGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGlu
X25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRl
cnMuZ2V0KCksICJub3RlcyJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUo
cHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIHRydWUpOworICAgIGF1dG8g
aW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fc3Fs
RXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVy
cy5nZXQoKSwgInNxbEVycm9yIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3NjcmVlbkNvbG9yX2pz
b24gPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5n
ZXQoKSwgInNjcmVlbkNvbG9yIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX2FsdGVybmF0ZUNvbG9y
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcHJpbnRDb2xvciA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgp
LCAicHJpbnRDb2xvciJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhh
c1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0zNDksNDEgKzMyNSwz
OCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhy
ZXF1ZXN0SWQsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3Zh
bHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVu
Q29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9j
YWxsSWQsIGluX2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCksIGluX25vdGVzLCAqaW5fdGlt
ZXN0YW1wLCBpbl92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fcGF5bG9hZC5yZWxlYXNlTm9u
TnVsbCgpLCAqaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSwgaW5f
c2NyZWVuQ29sb3JfanNvbiwgaW5fYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCksIGlu
X3ByaW50Q29sb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAg
U3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpP
YmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQg
b3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xv
cjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsICppbl9j
b2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxv
YWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRl
cm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3Rlcywg
Jm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZv
dXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwor
ICAgIGF1dG8gaW5fc2NyZWVuQ29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX3Nj
cmVlbkNvbG9yX2pzb24pOworICAgIGlmICghaW5fc2NyZWVuQ29sb3IpIHsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gc2NyZWVuQ29sb3I6ICJfcywgaW5fc2Ny
ZWVuQ29sb3JfanNvbikpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGluX2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxs
KCksIGluX25vdGVzLCAqaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSwg
aW5fcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3Iu
cmVsZWFzZU5vbk51bGwoKSwgKmluX3NjcmVlbkNvbG9yLCBpbl9hbHRlcm5hdGVDb2xvcnMucmVs
ZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBbb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMs
IG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29s
b3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0
LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgV1RGTW92ZShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShvdXRfdmFs
dWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBX
VEZNb3ZlKG91dF9wYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgV1RGTW92ZShvdXRfc3FsRXJyb3IpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
V1RGTW92ZShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3V0X3ByaW50Q29sb3IpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9j
b2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtNDI0LDYgKzM5Nyw3IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQCiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC00NjcsNyArNDQxLDYgQEAgY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA4LDcgKzQ4
MSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtNTMwLDcgKzUwNSw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9y
czsKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuICovCiB1c2luZyBEYXRhYmFzZUlkID0gaW50OwotdXNpbmcgQ29sb3JMaXN0ID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz47Cit1c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz47CiB9IC8vIERhdGFiYXNlCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAg
LTU1NCw3ICs1MjksNyBAQCBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewogfTsgLy8gZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzCiAKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBK
U09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLApAQCAtNTgxLDE3ICs1NTYsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xh
c3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNl
dCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTYz
MCw3ICs2MDUsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERv
bWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC02ODIsOCArNjU3LDcgQEAgc3RydWN0IERl
ZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiA6
IEludEhhc2g8SW5zcGUKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTcwOCwxNiArNjgyLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAK
IHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitP
cHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZh
bHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAogICAgIH07
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQpAQCAtNzc0LDggKzc0OCw4IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFj
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJh
eSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6
VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
SlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENv
bG9yKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Zh
bHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJp
bnRDb2xvcikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3Rh
bXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9zY3JlZW5Db2xv
ciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyYgb3B0X3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3Is
IFJlZjxKU09OOjpBcnJheT4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRD
b2xvcikgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTgyMywxMzcgKzc5NywxMzUg
QEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046
Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3Qg
aW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIGluX29wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIGluX29w
dF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3ZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiYmIGluX29wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgaW5fb3B0X2Rh
dGFiYXNlSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3NxbEVycm9yLCBjb25zdCBT
dHJpbmcmIGluX29wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIGluX29wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3ByaW50Q29sb3IpCiB7CiAgICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1u
TmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6
c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
JyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewot
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihw
YXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgq
Y29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1w
KQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRp
bWVzdGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
aWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0
YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAg
ICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAg
ICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29s
b3JzKSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3Ip
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAq
Km91dF9vcHRfbm90ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKm91dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0
X3BheWxvYWQsIGludCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqb3V0X29wdF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
ICpvdXRfb3B0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2Fs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9w
cmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIob3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3Rl
cywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIob3V0X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFv
dXRfb3B0X25vdGVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1l
c3RhbXApCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFs
dWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBbKm91dF9vcHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRf
b3B0X3BheWxvYWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUo
InBheWxvYWQiX3MsIFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBp
ZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAg
ICAgIGlmICghIW91dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKm91dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJv
dG9jb2xTdHJpbmcoKm91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pz
b25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Km9faW5fY29sdW1uTmFtZXM7Ci0gICAgaWYgKGluX2NvbHVtbk5hbWVzKQotICAgICAgICBvX2lu
X2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fY29sdW1uTmFtZXMpOwotICAgIE5T
U3RyaW5nICpvX2luX25vdGVzOwotICAgIGlmIChpbl9ub3RlcykKLSAgICAgICAgb19pbl9ub3Rl
cyA9ICppbl9ub3RlczsKLSAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7Ci0gICAgaWYgKGluX3Rp
bWVzdGFtcCkKLSAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOwotICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXM7Ci0gICAgaWYgKGluX3ZhbHVlcykKLSAg
ICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9faW5fcGF5bG9hZDsKLSAgICBpZiAoaW5fcGF5bG9hZCkKLSAgICAgICAgb19p
bl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05P
YmplY3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQ7
Ci0gICAgaWYgKGluX2RhdGFiYXNlSWQpCi0gICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9k
YXRhYmFzZUlkOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7
Ci0gICAgaWYgKGluX3NxbEVycm9yKQotICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9y
XSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yOwotICAgIGlmIChpbl9zY3JlZW5Db2xvcikKLSAgICAg
ICAgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnM+KCppbl9zY3JlZW5Db2xvcik7Ci0gICAgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9yczsKLSAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3Jz
KQotICAgICAgICBvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2Fs
dGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yOwotICAgIGlm
IChpbl9wcmludENvbG9yKQotICAgICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvcj4oKmluX3ByaW50Q29sb3IpOwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19p
bl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwp
IHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6
KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZv
X2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRh
YmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5p
bCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUo
KSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRl
cm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmlu
dENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5f
b3B0X2NvbHVtbk5hbWVzOworICAgIGlmICghIWluX29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAg
b19pbl9vcHRfY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheShpbl9vcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgTlNTdHJpbmcgKm9faW5fb3B0X25vdGVzOworICAg
IGlmICghIWluX29wdF9ub3RlcykKKyAgICAgICAgb19pbl9vcHRfbm90ZXMgPSBpbl9vcHRfbm90
ZXM7CisgICAgZG91YmxlIG9faW5fb3B0X3RpbWVzdGFtcDsKKyAgICBpZiAoISFpbl9vcHRfdGlt
ZXN0YW1wKQorICAgICAgICBvX2luX29wdF90aW1lc3RhbXAgPSAqaW5fb3B0X3RpbWVzdGFtcDsK
KyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fb3B0X3ZhbHVlczsKKyAgICBpZiAoISFp
bl9vcHRfdmFsdWVzKQorICAgICAgICBvX2luX29wdF92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfdmFsdWVzLnJlbGVhc2VO
b25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5f
b3B0X3BheWxvYWQ7CisgICAgaWYgKCEhaW5fb3B0X3BheWxvYWQpCisgICAgICAgIG9faW5fb3B0
X3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDppbl9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFzZV07CisgICAg
aW50IG9faW5fb3B0X2RhdGFiYXNlSWQ7CisgICAgaWYgKCEhaW5fb3B0X2RhdGFiYXNlSWQpCisg
ICAgICAgIG9faW5fb3B0X2RhdGFiYXNlSWQgPSAqaW5fb3B0X2RhdGFiYXNlSWQ7CisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9vcHRfc3FsRXJyb3I7CisgICAgaWYgKCEhaW5f
b3B0X3NxbEVycm9yKQorICAgICAgICBvX2luX29wdF9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfc3FsRXJyb3Iu
cmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9vcHRfc2NyZWVuQ29sb3I7CisgICAgaWYgKCEh
aW5fb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBvX2luX29wdF9zY3JlZW5Db2xvciA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX29wdF9z
Y3JlZW5Db2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX29wdF9hbHRlcm5h
dGVDb2xvcnM7CisgICAgaWYgKCEhaW5fb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgb19p
bl9vcHRfYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fb3B0X2FsdGVybmF0
ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZShhbm9ueW1vdXMpPiBvX2luX29wdF9wcmludENvbG9yOworICAgIGlmICghIWluX29wdF9w
cmludENvbG9yKQorICAgICAgICBvX2luX29wdF9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cyk+KGluX29wdF9wcmludENvbG9yKTsK
KyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOighIWluX29wdF9jb2x1bW5OYW1lcyA/ICZvX2luX29wdF9jb2x1bW5OYW1lcyA6IG5p
bCkgbm90ZXM6KCEhaW5fb3B0X25vdGVzID8gJm9faW5fb3B0X25vdGVzIDogbmlsKSB0aW1lc3Rh
bXA6KCEhaW5fb3B0X3RpbWVzdGFtcCA/ICZvX2luX29wdF90aW1lc3RhbXAgOiBuaWwpIHZhbHVl
czooISFpbl9vcHRfdmFsdWVzID8gJm9faW5fb3B0X3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooISFp
bl9vcHRfcGF5bG9hZCA/ICZvX2luX29wdF9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOighIWlu
X29wdF9kYXRhYmFzZUlkID8gJm9faW5fb3B0X2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOigh
IWluX29wdF9zcWxFcnJvciA/ICZvX2luX29wdF9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6
KCEhaW5fb3B0X3NjcmVlbkNvbG9yID8gJm9faW5fb3B0X3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBu
aWwpIGFsdGVybmF0ZUNvbG9yczooISFpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fb3B0
X2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xvcjooISFpbl9vcHRfcHJpbnRDb2xvciA/
ICZvX2luX29wdF9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nJiBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBSZWY8SlNPTjo6QXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzLCBS
ZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIFJlZjxKU09O
OjpPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIFJl
ZjxKU09OOjpBcnJheT4mJiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJp
bnRDb2xvcikKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRh
YmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikg
ewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
Uihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5
bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihz
cWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90
ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9i
amVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0
X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0X3RpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKm91dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG91dF9z
Y3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9yKSB7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9wYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
b3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9jb2x1bW5OYW1lcykpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0
YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBv
dXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0
cmluZyhvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5h
dGVDb2xvcnMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKLSAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29s
dW1uTmFtZXMpOworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9
IHRvT2JqQ1N0cmluZ0FycmF5KFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAgICBOU1N0cmlu
ZyAqb19pbl9ub3RlcyA9IGluX25vdGVzOwogICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGlu
X3RpbWVzdGFtcDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tb
UldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3ZhbHVl
c10gYXV0b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2Fk
ID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6Jmlu
X3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5f
dmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6V1RGTW92ZShpbl92YWx1ZXMpXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGlu
aXRXaXRoSlNPTk9iamVjdDpXVEZNb3ZlKGluX3BheWxvYWQpXSBhdXRvcmVsZWFzZV07CiAgICAg
aW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5fc3Fs
RXJyb3IpXSBhdXRvcmVsZWFzZV07CiAgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwogICAgIGlmICgh
b19pbl9zY3JlZW5Db2xvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVy
ICdzY3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNT
dHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJp
bnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOworICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJh
eShXVEZNb3ZlKGluX2FsdGVybmF0ZUNvbG9ycykpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlKGFub255bW91cyk+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPihpbl9wcmludENvbG9yKTsKICAgICBp
ZiAoIW9faW5fcHJpbnRDb2xvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1l
dGVyICdwcmludENvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29s
dW1uTmFtZXM6b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2lu
X3RpbWVzdGFtcCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpv
X2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRlQ29s
b3JzIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yLnZhbHVlKCldOwogfQogCkBAIC0xMjEzLDgg
KzExODUsOCBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogQHBy
b3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0
aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3Rl
cyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQg
ZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwotLSAo
dm9pZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xv
cikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBz
cWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRl
Q29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yKXByaW50Q29sb3I7CistICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpwcmlu
dENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAq
KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJy
b3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVl
bkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0
ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICopcHJp
bnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5v
dGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZShhbm9ueW1vdXMpKXByaW50Q29sb3I7CiBAZW5kCiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmluZGV4IGQwMmJlZDdiOGQ2ZTJmZTAyYTUyNDJlZDEy
MmY0YTI4NGY5MGM5YjkuLmIzMGRmMTcwYWFiYTU5N2IzNjE5NjI0YmFkNjc5MzUxNTMzZTQ0OGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTc2LDcgKzc2LDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTk2
LDcgKzk2LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KICNpZiBDT01NQU5ELU1BQwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiAjZW5kaWYg
Ly8gQ09NTUFORC1NQUMKIH07CiAjZW5kaWYgLy8gRE9NQUlOLU1BQwpAQCAtMTQwLDExICsxNDAs
MTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaWYgRE9NQUlOLU1BQwpAQCAtMTU2LDcg
KzE1OSw3IEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNz
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogI2lmIENPTU1BTkQt
TUFDCi0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKKyAg
ICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZSgpID0g
MDsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKQEAgLTE2NywxMCArMTcwLDEwIEBAIHByb3Rl
Y3RlZDoKIGNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdl
KSBmaW5hbDsKIHByaXZhdGU6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yMjEs
OSArMjI0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjQ4LDQxICsyNDksNDEgQEAgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXMKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
Ik5ldHdvcmsiX3MsIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdl
LT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKICNpZiBDT01NQU5ELU1BQwotICAgIGlmIChtZXRo
b2QgPT0gImxvYWRSZXNvdXJjZSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwg
V1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJl
c291cmNlIikgeworICAgICAgICBsb2FkUmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBDT01NQU5ELU1BQwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAogI2lmIENP
TU1BTkQtTUFDCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAg
ICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHko
KSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KICNlbmRpZiAvLyBDT01N
QU5ELU1BQwogI2VuZGlmIC8vIERPTUFJTi1NQUMKQEAgLTMyNSw2ICszMjYsNyBAQCB2b2lkIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAt
MzgxLDcgKzM4Myw2IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzg5LDEwICszOTAsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaWYgRVZF
TlQtTUFDCiB2b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5y
ZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7CiAKLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAjZW5kaWYgLy8gRVZFTlQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1BQwpAQCAtNDM0
LDcgKzQzNSw5IEBAIHZvaWQgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2Fk
ZWQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDYxLDcg
KzQ2NCw3IEBAIGNsYXNzIE5ldHdvcmtFcnJvcjsKIG5hbWVzcGFjZSBOZXR3b3JrIHsKIAogI2lm
IFRZUEUtTUFDCi1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CitjbGFzcyBOZXR3b3JrRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQ4OCwxNyAr
NDkxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKICAg
ICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNz
YWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
ZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNTcwLDggKzU3Myw3IEBA
IHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKQEAgLTYzMSw3ICs2MzMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZQogcHVi
bGljOgogICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KICNpZiBDT01NQU5ELU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkg
ZmluYWw7CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlk
PFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKQEAgLTY4Mywy
MSArNjg1LDIyIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaWYgRE9NQUlOLU1BQwogI2lm
IENPTU1BTkQtTUFDCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewog
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yay5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwpAQCAtOTExLDkgKzkxNCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAg
ICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CiB9CiAjZW5kaWYgLy8gRVZFTlQtTUFDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKaW5kZXgg
YTQ4ZjZmOWI1YTE5Nzk4MmFkNjkxMDI5YWVhYWRjNjc1MmY4MTMyYS4uYzg3NTE0OGYzZGFmMDVl
ZDMxYWNlZDk3YzMyZWIzYmI3NTQ3ZjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKQEAg
LTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwg
WyJ3ZWItcGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBA
IC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7
CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5
ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENv
bW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2Nv
bF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
QEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRo
aXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwot
ICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRv
IHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5k
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhv
ZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2Qg
KyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkg
eworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2Nv
bF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBA
IC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBt
X2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkg
ZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHBy
aXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2Nh
bGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5k
JyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSAr
Nzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
LSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmluZGV4IGE3N2ZlMzU4OTc4
ODUzNDc1MDU2MjIzZTAxOWExYjBmYjFkNDdlNjguLjk0MmRjY2E4ZjI2MDFlYzY5NzJiYmM2MDk4
NGJkYzc1NTc0MWMzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgs
NyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZp
cnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFu
ZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVk
OgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwor
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFs
OwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBA
QCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5n
JiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkK
IHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJz
ID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1l
dGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7Cisg
ICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRl
cnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1h
bmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0
LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZv
aWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBA
IC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWlu
LkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6
OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1
Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNs
YXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBA
IC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAot
dm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rv
bWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7
CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2Nh
bGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQs
IFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFtt
X2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNl
bmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRU
eXBlcy5qc29uLXJlc3VsdAppbmRleCAwYWQ2ZDA0NDYwMWMyZWE0MDgzODhiY2YyNTRmYzY2NTQ1
ZjdjZDA0Li44NDlmM2I3MjljYWNkOGI5ZjExNGM4YjliZmIyMTcxOTFkMjcyOTFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMu
anNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJs
aWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1
YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBA
IC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2Nv
bF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAg
dm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQs
NyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWlu
Il9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Cisg
ICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAg
Q29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2Nv
bF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xf
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQor
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUo
cHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNv
bW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgog
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRS
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9p
ZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9j
b2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRs
ZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1
ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmlu
YWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsK
ICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFu
ZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9z
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90
b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
Q29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
LCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAt
NzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3Qg
RnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwog
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVu
dCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFp
bi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDQ3NWI4N2JkMGM4ZGE4NTJiNWY5OTBjYjIxY2IzYzJl
MDc2MDk5ODQuLjQxOWY5MmVkYTEzYWVjMjJkOGY0YWYyYWYxN2YwNWY3NWQyNDFhNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC03OSw3ICs3
OSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApA
QCAtOTcsMTkgKzk3LDE5IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsK
IAogY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRl
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIo
bG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNh
bGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTUxLDExICsxNTEsMTQgQEAgcHVibGlj
OgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+Cisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOwpAQCAtMTY0LDIwICsxNjcsMjAgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjsKIAogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewog
cHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAw
OworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNl
MSgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOwogfTsKIAogY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5n
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2U2KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U3KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlMSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTIoKSA9IDA7CisgICAgdmlydHVhbCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UzKCkgPSAwOworICAgIHZp
cnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNCgpID0gMDsK
KyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTUo
KSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVz
b3VyY2U2KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
bG9hZFJlc291cmNlNygpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE4NSw5ICsxODgsOSBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkg
ZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2Fn
ZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2Nv
bF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDIsMTUgKzIwNSwxNSBA
QCBwcml2YXRlOgogY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxv
bmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1l
dGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2U2KGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjU5LDkgKzI2Miw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI4NCwzOCArMjg1LDM4IEBA
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFy
YW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAg
IGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZTEo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9k
ID09ICJsb2FkUmVzb3VyY2UxIikgeworICAgICAgICBsb2FkUmVzb3VyY2UxKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisgICAgYXV0
byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCk7CisgICAgaWYgKCFyZXN1bHQpIHsK
KyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xf
anNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
PiBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CkBAIC0zMzAsMTQgKzMzMSwxMyBAQCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3Ms
IHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBt
ZXNzYWdlKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcyk7CiAKLSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpOworICAgIHVzaW5nIENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSk7CiAgICAgdXNpbmcgRGlzcGF0Y2hNYXAgPSBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRj
aE1hcD4gZGlzcGF0Y2hNYXA7CiAgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkg
ewpAQCAtMzU4LDE0NiArMzU4LDE1MyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUgogICAgICAg
ICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ld
LmhhbmRsZXIpOwogICAgIH0KIAotICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdl
dCgpLmZpbmQobWV0aG9kKTsKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQo
KS5maW5kKHByb3RvY29sX21ldGhvZCk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hN
YXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMu
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazMuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1
ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAoKCp0aGlzKS4qZmluZFJl
c3VsdC0+dmFsdWUpKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJz
KSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlMShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2Ux
KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5p
c0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTIocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKCk7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUo
cHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhs
b25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
MyhyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZTMocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMyhlcnJvcik7CisgICAgYXV0byByZXN1
bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1l
c3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHByb3RvY29sX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOwor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocHJvdG9jb2xfY2Fs
bElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5s
b2FkUmVzb3VyY2U0KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1
bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVy
cm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7
CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlNShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KCk7
CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0Vt
cHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmxvYWRSZXNvdXJjZTYocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7Cisg
ICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KCk7CisgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25n
IHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhy
ZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTco
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3Nh
Z2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNTM4LDYgKzU0
NSw3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CkBAIC01ODEsNyArNTg5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjIyLDcgKzYyOSw5IEBAIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApAQCAtNjgxLDggKzY5MCw3IEBAIHVzaW5nIExvYWRlcklkID0gU3RyaW5nOwogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzM5LDcg
Kzc0Nyw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFjCiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZp
bmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC03NDgsMTMgKzc1NiwxMyBAQCBjbGFzcyBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVOZXR3b3JrM0JhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25n
IHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZTIobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291
cmNlMyhsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9u
ZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHBy
b3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9j
b2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtODAyLDE2MSArODEw
LDE2OSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVz
b3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSks
IGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHByb3Rv
Y29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTInIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBub3QgZm91
bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90
b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAK
ICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAK
ICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVl
c3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTMobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVz
b3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSks
IGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHByb3Rv
Y29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3QgZm91
bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90
b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAK
ICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAK
ICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVl
c3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTYobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVz
b3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSks
IGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNldpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Vu
dW0tdmFsdWVzLmpzb24tcmVzdWx0CmluZGV4IDc5NTNjYmYyMTgzODhmODQ3NzcyYmQ0MTNkMTgw
MjYyOWE3YjgwNWIuLjk5M2Y5YWEyOGM3MTM2NmRkZWU3YWRhMWYxYzYxMGM2NzFjMWZiMjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQKQEAgLTMwLDE4ICszMCwxOSBAQAogCiAvLyBUeXBlRG9tYWluCiBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFyZWQi
LCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIs
IDE6ICIxIiwgMjogIjIifSk7CiBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJUeXBl
RG9tYWluIiwgbnVsbCk7CiAKIC8vIENvbW1hbmREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwg
bnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kIiwgbnVsbCwgW3sibmFtZSI6ICJlbnVtUmVxdWly
ZWQiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogImVudW1PcHRpb25hbCIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGFyYW1ldGVyUmVxdWlyZWQi
LCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwgInR5cGUi
OiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImVudW1SZXF1aXJlZCIsICJlbnVtT3B0
aW9uYWwiLCAicmV0dXJuUmVxdWlyZWQiLCAicmV0dXJuT3B0aW9uYWwiXSk7CiBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CiAKIC8vIEV2ZW50
RG9tYWluCiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVudERvbWFpbiIsIG51
bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxhY2s6ICJibGFj
ayIsIFdoaXRlOiAid2hpdGUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBhcmFtZXRlciJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFBhcmFtZXRl
clJlcXVpcmVkIiwge1NoYXJlZDogInNoYXJlZCIsIFNoYXJlZFJlcXVpcmVkOiAic2hhcmVkUmVx
dWlyZWQiLCBHcmV5OiAiZ3JleSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJF
dmVudERvbWFpbi5FdmVudFBhcmFtZXRlck9wdGlvbmFsIiwge1NoYXJlZDogInNoYXJlZCIsIFNo
YXJlZE9wdGlvbmFsOiAic2hhcmVkT3B0aW9uYWwiLCBHcmVlbjogImdyZWVuIn0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVudCIsIG51bGwsIFsiZW51
bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJwYXJhbWV0
ZXJPcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3Rv
ckJhY2tlbmQsICJFdmVudERvbWFpbiIpOwogSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRXZlbnREb21haW4iLCBudWxsKTsKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzLmluCkBAIC04MCw3ICs4MSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTgsNyArOTksNyBAQCBwcml2YXRlOgogY2xh
c3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBlbnVtUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0
ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTQwLDExICsxNDEsMTQgQEAgcHVibGlj
OgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+Cisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7CkBAIC0xNTIsMTQgKzE1Niw3IEBAIGNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1
cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlLgotICAgIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQg
PSAwLAotICAgICAgICBDeWFuID0gNiwKLSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFll
bGxvdyA9IDgsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwg
dm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJv
dG9jb2w6OlR5cGVEb21haW46OkVudW0gLyogZW51bVJlcXVpcmVkICovLCBPcHRpb25hbDxQcm90
b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gLyogb3B0X2VudW1PcHRpb25hbCAqLywgU3RyaW5nIC8q
IHJldHVyblJlcXVpcmVkICovLCBTdHJpbmcgLyogb3B0X3JldHVybk9wdGlvbmFsICovPj4gY29t
bWFuZChQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFBy
b3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFs
KSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE2Nyw5ICsxNjQsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFz
cyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisgICAgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVy
KEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBA
IC0yMTgsOSArMjE1LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjQyLDQyICsyMzcsNjMgQEAgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXIKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkNvbW1hbmREb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpCiB7CiAgICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICBpZiAobWV0aG9kID09ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIpIHsKLSAgICAg
ICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJjb21tYW5kIikgeworICAgICAgICBj
b21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5k
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOwogfQogCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZChsb25nIHBy
b3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KQogeworICAgIGF1dG8gaW5fZW51bVJlcXVpcmVkX2pzb24gPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImVudW1SZXF1aXJlZCJfcywg
dHJ1ZSk7CisgICAgYXV0byBpbl9vcHRfZW51bU9wdGlvbmFsX2pzb24gPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImVudW1PcHRpb25h
bCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fcGFyYW1ldGVyUmVxdWlyZWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInBhcmFtZXRl
clJlcXVpcmVkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgp
LCAicGFyYW1ldGVyT3B0aW9uYWwiX3MsIGZhbHNlKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdDb21tYW5kRG9tYWluLmNvbW1hbmQnIGNhbid0IGJl
IHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21t
YW5kKHByb3RvY29sX2NhbGxJZCwgaW5fZW51bVJlcXVpcmVkX2pzb24sIGluX29wdF9lbnVtT3B0
aW9uYWxfanNvbiwgaW5fcGFyYW1ldGVyUmVxdWlyZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25h
bCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5W
YWx1ZTsKLSAgICBtX2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91
dF9yZXR1cm5WYWx1ZSk7CisgICAgYXV0byBpbl9lbnVtUmVxdWlyZWQgPSBQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6
RW51bT4oaW5fZW51bVJlcXVpcmVkX2pzb24pOworICAgIGlmICghaW5fZW51bVJlcXVpcmVkKSB7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGVudW1SZXF1aXJl
ZDogIl9zLCBpbl9lbnVtUmVxdWlyZWRfanNvbikpOworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJl
dHVyblZhbHVlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUob3V0X3JldHVyblZhbHVlKSk7CisgICAgYXV0byBpbl9vcHRfZW51bU9wdGlv
bmFsID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJv
dG9jb2w6OlR5cGVEb21haW46OkVudW0+KGluX29wdF9lbnVtT3B0aW9uYWxfanNvbik7CiAKLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5jb21tYW5kKCppbl9lbnVtUmVxdWlyZWQsIFdURk1vdmUoaW5fb3B0X2VudW1P
cHRpb25hbCksIGluX3BhcmFtZXRlclJlcXVpcmVkLCBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwp
OworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNF
bXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gW291dF9lbnVtUmVxdWlyZWQsIG91dF9vcHRf
ZW51bU9wdGlvbmFsLCBvdXRfcmV0dXJuUmVxdWlyZWQsIG91dF9vcHRfcmV0dXJuT3B0aW9uYWxd
ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUob3V0X2VudW1SZXF1aXJlZCkpOworICAgIGlmICghIW91dF9vcHRfZW51
bU9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJlbnVt
T3B0aW9uYWwiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
Km91dF9vcHRfZW51bU9wdGlvbmFsKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygicmV0dXJuUmVxdWlyZWQiX3MsIG91dF9yZXR1cm5SZXF1aXJlZCk7CisgICAgaWYgKCEh
b3V0X29wdF9yZXR1cm5PcHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicmV0dXJuT3B0aW9uYWwiX3MsIG91dF9vcHRfcmV0dXJuT3B0aW9uYWwpOworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgpAQCAtMzE4LDYgKzMzNCw3IEBAIHZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMyOCwxMyArMzQ1LDE5IEBAIGNsYXNz
IEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVu
ZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRl
cikgeyB9Ci0gICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGls
ZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KLSAgICAg
ICAgZW51bSBjbGFzcyBQYXJhbWV0ZXIgeworICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0
ZXIgJ3BhcmFtZXRlclJlcXVpcmVkJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZl
bnQuCisgICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyUmVxdWlyZWQgewogICAgICAgICAgICAg
U2hhcmVkID0gMCwKLSAgICAgICAgICAgIEJsYWNrID0gNCwKLSAgICAgICAgICAgIFdoaXRlID0g
NSwKLSAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXIKLSAgICB2b2lkIGV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcik7CisgICAgICAgICAgICBTaGFyZWRS
ZXF1aXJlZCA9IDMsCisgICAgICAgICAgICBHcmV5ID0gNCwKKyAgICAgICAgfTsgLy8gZW51bSBj
bGFzcyBQYXJhbWV0ZXJSZXF1aXJlZAorICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIg
J3BhcmFtZXRlck9wdGlvbmFsJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnQu
CisgICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyT3B0aW9uYWwgeworICAgICAgICAgICAgU2hh
cmVkID0gMCwKKyAgICAgICAgICAgIFNoYXJlZE9wdGlvbmFsID0gNSwKKyAgICAgICAgICAgIEdy
ZWVuID0gNiwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXJPcHRpb25hbAorICAg
IHZvaWQgZXZlbnQoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gZW51bVJlcXVpcmVkLCBPcHRp
b25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4mJiBvcHRfZW51bU9wdGlvbmFsLCBjb25z
dCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0ZXJP
cHRpb25hbCk7CiBwcml2YXRlOgogICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVy
OwogfTsKQEAgLTM3NiwxOSArMzk5LDIzIEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZl
bnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQordm9pZCBFdmVudERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnQoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gZW51
bVJlcXVpcmVkLCBPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4mJiBvcHRfZW51
bU9wdGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcm
IG9wdF9wYXJhbWV0ZXJPcHRpb25hbCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1ldGVyKSk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09i
amVjdCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkV2ZW50RG9tYWluLmV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoImVudW1SZXF1aXJlZCJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShlbnVtUmVxdWlyZWQpKTsKKyAgICBpZiAoISFvcHRfZW51bU9wdGlvbmFsKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9z
LCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfZW51bU9w
dGlvbmFsKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRl
clJlcXVpcmVkIl9zLCBwYXJhbWV0ZXJSZXF1aXJlZCk7CisgICAgaWYgKCEhb3B0X3BhcmFtZXRl
ck9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFy
YW1ldGVyT3B0aW9uYWwiX3MsIG9wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
c09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTQyOCw3ICs0NTUsOSBAQCB2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NDAsNyArNDY5LDcgQEAgbmFt
ZXNwYWNlIFByb3RvY29sIHsKIAogLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCiBuYW1lc3BhY2Ug
VHlwZURvbWFpbiB7Ci1lbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtOworZW51bSBjbGFzcyBFbnVt
OwogfSAvLyBUeXBlRG9tYWluCiAvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCiAKQEAg
LTQ2MCwxMiArNDg5LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIAogbmFtZXNwYWNlIFR5cGVEb21haW4gewogCi1lbnVt
IGNsYXNzIFR5cGVEb21haW5FbnVtIHsKK2VudW0gY2xhc3MgRW51bSB7CiAgICAgU2hhcmVkID0g
MCwKLSAgICBSZWQgPSAxLAotICAgIEdyZWVuID0gMiwKLSAgICBCbHVlID0gMywKLX07IC8vIGVu
dW0gY2xhc3MgVHlwZURvbWFpbkVudW0KKyAgICAxID0gMSwKKyAgICAyID0gMiwKK307IC8vIGVu
dW0gY2xhc3MgRW51bQogCiB9IC8vIFR5cGVEb21haW4KIApAQCAtNDc4LDcgKzUwNiw3IEBAIE9w
dGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRl
PD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5F
bnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6
OlR5cGVEb21haW46OkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlw
ZURvbWFpbjo6RW51bT4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCiAKQEAgLTQ5Miw3ICs1MjAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7CiAKIC8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9t
YWluCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IDogSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4geyB9Oworc3RydWN0IERlZmF1bHRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+IDogSW50SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiB7IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgog
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKQEAgLTUzMCw4ICs1NTgsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURv
bWFpbkVudW0+IDogSW50SGFzaDxJbgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTQxLDE0ICs1NjgsMTYgQEAgbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7CiAgICAgInNoYXJlZCIsCi0gICAgInJlZCIsCisgICAgIjEiLAorICAgICIyIiwK
KyAgICAic2hhcmVkUmVxdWlyZWQiLAorICAgICJncmV5IiwKKyAgICAic2hhcmVkT3B0aW9uYWwi
LAogICAgICJncmVlbiIsCi0gICAgImJsdWUiLAogICAgICJibGFjayIsCisgICAgInJlZCIsCiAg
ICAgIndoaXRlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAor
ICAgICJibHVlIiwKIH07CiAKIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
ewpAQCAtNTU4LDE3ICs1ODcsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgogCiB0ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9u
YWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
IHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06
OlNoYXJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWlu
OjpUeXBlRG9tYWluRW51bTo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6U2hhcmVkLAorICAgICAg
ICAoc2l6ZV90KVByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtOjoxLAorICAgICAgICAoc2l6ZV90
KVByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtOjoyLAogICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCA0OyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5
cGVEb21haW46OlR5cGVEb21haW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAg
cmV0dXJuIChQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSljb25zdGFudFZhbHVlc1tpXTsKIAog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC02MjUsNyArNjUzLDcgQEAgY2xhc3MgT2Jq
Q0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVDb21tYW4KICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBo
YW5kbGVyOyB9Ci0gICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisgICAgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25z
dCBTdHJpbmcmIGVudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9wdGlvbmFsLCBj
b25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0
ZXJPcHRpb25hbCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNjczLDI2
ICs3MDEsNDcgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0
IFN0cmluZyYgaW5fZW51bVJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIGluX29wdF9lbnVtT3B0aW9u
YWwsIGNvbnN0IFN0cmluZyYgaW5fcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgaW5f
b3B0X3BhcmFtZXRlck9wdGlvbmFsKQogewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdh
cyBub3QgZm91bmQiX3MpOworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihjb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmVudW1S
ZXF1aXJlZDplbnVtT3B0aW9uYWw6cGFyYW1ldGVyUmVxdWlyZWQ6cGFyYW1ldGVyT3B0aW9uYWw6
KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihw
cm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21t
YW5kRG9tYWluLmNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVy
blZhbHVlIHJldHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtIG91dF9lbnVtUmVxdWlyZWQsIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtICpvdXRfb3B0X2VudW1PcHRpb25hbCwgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbihhbm9ueW1vdXMpIG91dF9yZXR1cm5SZXF1aXJlZCwgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbihhbm9ueW1vdXMpICpvdXRfb3B0X3JldHVybk9wdGlvbmFsKSB7CisgICAgICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3MsIHRvUHJvdG9j
b2xTdHJpbmcob3V0X2VudW1SZXF1aXJlZCkpOworICAgICAgICBpZiAoISFvdXRfb3B0X2VudW1P
cHRpb25hbCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVu
dW1PcHRpb25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicmV0dXJuUmVxdWlyZWQi
X3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X3JldHVyblJlcXVpcmVkKSk7CisgICAgICAgIGlmICgh
IW91dF9vcHRfcmV0dXJuT3B0aW9uYWwpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJyZXR1cm5PcHRpb25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29w
dF9yZXR1cm5PcHRpb25hbCkpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFs
c2UpOwogICAgIH07CiAKLSAgICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IG9faW5f
ZW51bVJlcXVpcmVkID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPihpbl9lbnVtUmVxdWlyZWQpOworICAgIGlmICghb19pbl9lbnVtUmVxdWlyZWQpIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAnZW51bVJlcXVpcmVkJyBvZiBtZXRo
b2QgJ0NvbW1hbmREb21haW4uY29tbWFuZCcgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW0+IG9faW5fb3B0X2VudW1PcHRpb25hbDsKKyAgICBpZiAoISFpbl9vcHRfZW51bU9wdGlvbmFs
KQorICAgICAgICBvX2luX29wdF9lbnVtT3B0aW9uYWwgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW0+KGluX29wdF9lbnVtT3B0aW9uYWwpOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4gb19pbl9wYXJhbWV0ZXJS
ZXF1aXJlZCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFu
b255bW91cyk+KGluX3BhcmFtZXRlclJlcXVpcmVkKTsKKyAgICBpZiAoIW9faW5fcGFyYW1ldGVy
UmVxdWlyZWQpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAncGFyYW1l
dGVyUmVxdWlyZWQnIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBjYW5ub3QgYmUg
cHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+IG9faW5fb3B0X3BhcmFtZXRlck9wdGlv
bmFsOworICAgIGlmICghIWluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAgb19pbl9v
cHRfcGFyYW1ldGVyT3B0aW9uYWwgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbihhbm9ueW1vdXMpPihpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpOworICAgIFtt
X2RlbGVnYXRlIGNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZW51bVJlcXVpcmVkOm9faW5fZW51bVJlcXVpcmVkLnZh
bHVlKCkgZW51bU9wdGlvbmFsOighIWluX29wdF9lbnVtT3B0aW9uYWwgPyAmb19pbl9vcHRfZW51
bU9wdGlvbmFsLnZhbHVlKCkgOiBuaWwpIHBhcmFtZXRlclJlcXVpcmVkOm9faW5fcGFyYW1ldGVy
UmVxdWlyZWQudmFsdWUoKSBwYXJhbWV0ZXJPcHRpb25hbDooISFpbl9vcHRfcGFyYW1ldGVyT3B0
aW9uYWwgPyAmb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwudmFsdWUoKSA6IG5pbCldOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTg4NywxNiArOTM2LDIxIEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZXZlbnRX
aXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZl
bnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0ZXIKKy0gKHZvaWQpZXZlbnRXaXRo
RW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQgZW51
bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBwYXJh
bWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJhbWV0
ZXJSZXF1aXJlZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5v
bnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsCiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1Q
YXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRl
ciJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xf
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50Il9zKTsKKyAg
ICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywgdG9Q
cm90b2NvbFN0cmluZyhlbnVtUmVxdWlyZWQpKTsKKyAgICBpZiAoZW51bU9wdGlvbmFsKQorICAg
ICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCgqZW51bU9wdGlvbmFsKSkpOworICAgIHByb3RvY29sX3BhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJSZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhw
YXJhbWV0ZXJSZXF1aXJlZCkpOworICAgIGlmIChwYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAg
cHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlck9wdGlvbmFsIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCgqcGFyYW1ldGVyT3B0aW9uYWwpKSk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09i
amVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKIH0KIAogQGVuZApAQCAtOTQzLDIxICs5OTcsMjAgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIAogdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW0pIHsKICAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwK
LSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bUdyZWVuLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKKyAg
ICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTEsCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW0yLAogfTsKIAogCiAKIEBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKLS0gKHZvaWQpY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSlz
dWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIGVudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0gKmVudW1PcHRpb25hbCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9u
eW1vdXMpIHJldHVyblJlcXVpcmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91
cykgKnJldHVybk9wdGlvbmFsKSlzdWNjZXNzQ2FsbGJhY2sgZW51bVJlcXVpcmVkOihUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQgZW51bU9wdGlvbmFsOihUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBwYXJhbWV0ZXJSZXF1aXJlZDooVGVzdFBy
b3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRl
ck9wdGlvbmFsOihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKilwYXJhbWV0
ZXJPcHRpb25hbDsKIEBlbmQKIAogX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCiBAaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0
ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRl
cilwYXJhbWV0ZXI7CistICh2b2lkKWV2ZW50V2l0aEVudW1SZXF1aXJlZDooVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW0pZW51bVJlcXVpcmVkIGVudW1PcHRpb25hbDooVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0gKillbnVtT3B0aW9uYWwgcGFyYW1ldGVyUmVxdWlyZWQ6KFRlc3RQcm90b2Nv
bEV2ZW50RG9tYWluKGFub255bW91cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9u
YWw6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluKGFub255bW91cykgKilwYXJhbWV0ZXJPcHRpb25h
bDsKIEBlbmQKIAogCkBAIC0xMDUwLDEyICsxMTAzLDEwIEBAIGlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSB2YWx1ZSkKICAgICBzd2l0Y2go
dmFsdWUpIHsKICAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOgogICAg
ICAgICByZXR1cm4gInNoYXJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkOgotICAgICAgICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtR3JlZW46Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMToKKyAgICAgICAgcmV0dXJuICIx
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0yOgorICAgICAgICByZXR1
cm4gIjIiX3M7CiAgICAgfQogfQogCkBAIC0xMDY0LDEyICsxMTE1LDEwIEBAIGlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsCiB7CiAgICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQogICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJy
ZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ7Ci0gICAg
aWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bUdyZWVuOwotICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU7CisgICAgaWYgKHZhbHVlID09ICIxIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMTsKKyAgICBpZiAodmFsdWUg
PT0gIjIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0yOwogICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKQEAgLTExMTcsMTcgKzExNjYsMTcgQEAgdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKFR5cGVEb21haW5Eb21haW4pCiAKLSsgKHZvaWQpX3BhcnNlVHlwZURvbWFpbkVudW06
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClf
cGFyc2VFbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
IAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChU
eXBlRG9tYWluRG9tYWluKQogCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorKyAodm9pZClfcGFyc2VFbnVt
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAogewogICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CiAg
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IHJlc3VsdCA9IEluc3BlY3Rv
cjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihwYXlsb2Fk
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUeXBl
RG9tYWluRW51bSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVz
dWx0LCBAIkVudW0iKTsKICAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0CmluZGV4IGUyZWQ5Zjg4OTRjZTc3NmIyNzJkNjExM2U1MzZjYWE3NDZl
YmNiODUuLmJlOTRiMzU5NDAwMzJiM2U5YTMzNmQ1NDEzNDQ3N2I5NjVjZDNhNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKIGNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElk
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0g
MDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAsMTQgQEAg
cHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVw
bGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2
aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7CiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2
b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBDb21t
YW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
ICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDEsOSAr
MjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGEK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRv
bWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7Ci0gICAg
ICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJv
dG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIHByb3Rv
Y29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewot
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2NhbGxJZCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1h
bmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAgcHJpdmF0
ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1f
ZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5OSw5IEBA
IHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNwYWNlIFBy
b3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZAogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQp
IGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAgcHJpdmF0
ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQp
CiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNz
YWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
QEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNv
bnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIo
KTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdAppbmRleCA5MGUxNGU4YzdiYjRmMDUxNTEzY2JkN2MzYzZkYzdiOTZm
Y2MxYTc0Li44NDdiNDkzZjcxYzU3ZTQyNzNkODQ5NjJiYWU5ZjZjOTIwZmRjOWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNiwx
MSArMTI2LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBA
IC0xNzEsOSArMTc0LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMSw2ICsyMjIsNyBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKQEAgLTIzMSw4ICsyMzMsOCBAQCBjbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRl
bmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBz
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKTsKLSAgICB2b2lk
IGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29s
b3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90
ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcm
IG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYm
IG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpOworICAg
IHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3Rh
bXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9h
ZCwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CiBwcml2YXRlOgogICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwogfTsKQEAgLTI3NCw1NSArMjc2LDU0IEBA
IHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBEYXRh
YmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3Rl
cywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywg
UmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlz
cGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9w
dGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9w
dF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgUmVmUHRyPFByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9z
Y3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwot
ICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgaWYg
KHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpw
YXlsb2FkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3Ip
OwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRD
b2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpw
cmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1v
dmUocGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Cisg
ICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGlmICghIW9wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG9wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3B0X25vdGVzKTsKKyAgICBpZiAoISFvcHRfdGltZXN0
YW1wKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCAqb3B0X3RpbWVzdGFtcCk7CisgICAgaWYgKCEhb3B0X3ZhbHVlcykKKyAgICAgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3B0X3ZhbHVlcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvcHRfcGF5bG9hZCkKKyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxvYWQucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgb3B0X3NjcmVlbkNvbG9yKTsK
KyAgICBpZiAoISFvcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG9wdF9hbHRlcm5hdGVDb2xvcnMu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvcHRfcHJpbnRD
b2xvcik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQog
Ci12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZh
bHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250
ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+
JiYgcGF5bG9hZCwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCB2YWx1ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IHBheWxvYWQpOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3Fs
RXJyb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2Ny
ZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCBXVEZNb3ZlKGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUocGF5bG9h
ZCkpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
V1RGTW92ZShzcWxFcnJvcikpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
cHJpbnRDb2xvcik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJv
dXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM2Miw3ICszNjMsOSBAQCB2b2lk
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMoUmVmUHRyPEpTT046OkFycgogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzkxLDcgKzM5NCw3IEBAIHVzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8
U3RyaW5nPjsKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9yLiAqLwot
Y2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciBmaW5h
bCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDE4LDE3ICs0MjEsMTcgQEAgcHVibGljOgogICAgICAg
ICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBp
bl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29k
ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGlu
X2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAg
ICB9CiAKQEAgLTQ5OCw4ICs1MDEsNyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC03NzgsMjkgKzc4MCwyOSBAQCB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3Is
IEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2Uu
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5h
bWVzKSkpOwogICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCAoKm5vdGVzKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOwogICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAg
IHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7Cisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgq
dGltZXN0YW1wKSk7CiAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgWygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWygqdmFsdWVzKSB0b0pT
T05PYmplY3RdKTsKICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsoKnBheWxvYWQpIHRv
SlNPTk9iamVjdF0pOwogICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3Fs
RXJyb3IpIHRvSlNPTk9iamVjdF0pOwogICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7Cisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
KCpzY3JlZW5Db2xvcikpOwogICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFt
c09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXko
KCphbHRlcm5hdGVDb2xvcnMpKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVD
b2xvcnMpKSk7CiAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgICAgICBwcm90b2Nv
bF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKCpwcmludENvbG9yKSk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3Zl
KHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogLSAodm9pZClkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3Ig
YWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMg
cHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCkBAIC04MTYsMjAgKzgxOCwyMCBAQCB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50
Q29sb3IiKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
YXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09O
OjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNv
bHVtbk5hbWVzKSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rl
cyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1w
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNP
Tk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXls
b2FkIHRvSlNPTk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29s
b3JzKSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50
Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRv
IHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgIHByb3Rv
Y29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9i
amVjdF0pOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJf
cywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsK
KyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24tcmVzdWx0CmluZGV4IDI5NGJhOTA4MTIxOGEzNTAyZDk2ZDQ1NWQ0ZDYzZDJiM2Y1YWFlOWEu
LjM5YzM2NjNhZmYyZjZmYjljMGVhN2I4NDljZjM5MGFmZGEzYmZiYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtNzQsNyArNzQsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTky
LDcgKzkyLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzQsMTEgKzEzNCwxNCBAQCBwdWJsaWM6CiAKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3
dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0x
NDYsNyArMTQ5LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsK
IAogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVh
bCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UoKSA9IDA7CiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
IH07CkBAIC0xNTQsOSArMTU3LDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KQEAgLTIwNSw5ICsyMDgsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjksMzggKzIzMCwzOCBAQCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5n
JiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkK
IHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRl
cnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAo
bWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxv
YWRSZXNvdXJjZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBwcm90b2NvbF9t
ZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1
ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShwcm90
b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9h
Z2VudC0+bG9hZFJlc291cmNlKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzAxLDYgKzMwMiw3IEBA
IHZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC0zNTMsMTYgKzM1NSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKIHZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNl
TG9hZGVkKCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAi
TmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKIAotICAg
IG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MDIsNyAr
NDAzLDkgQEAgdm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQo
KQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDIzLDcgKzQy
Niw3IEBAIGNsYXNzIE5ldHdvcmtFcnJvcjsKIAogbmFtZXNwYWNlIE5ldHdvcmsyIHsKIAotY2xh
c3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgTmV0d29y
a0Vycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00NTAsMTcgKzQ1MywxNyBAQCBwdWJs
aWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAgICAgcHVibGljOgogCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFs
dWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVz
c2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2Nv
ZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2Rl
U2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldElu
dGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTUzMCw4ICs1MzMsNyBAQCBwdWJsaWM6CiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
ODcsNyArNTg5LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWMKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQp
IGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02MzUsMjEgKzYzNywyMiBAQCBwcml2
YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQordm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcg
cHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3Jr
MS5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNl
KTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC04NTEsOSArODU0LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRl
ciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQi
X3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3Jr
My5yZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKaW5kZXggNDUzZWY2ZTQ5NDhlYWIwMjVhYjU2MTM3OGQyYjhhYTk0
ZjU1Yzg4ZC4uNTZlZjYzNGRlOTgwNjg1ODZkYmRjZDA4ODFiOTFkODQ5ZTJmYmExNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEx
OSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAog
CkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUs
NyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zNjIsOCArMzY1LDcgQEAgdXNpbmcgUmVtb3RlT2JqZWN0SWQgPSBTdHJpbmc7CiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCA1ZjJjZDc5MzMwNDI0N2U3NjU1
ZjNlOTgxZWE3MDBmNTdjNzcwZmQ5Li44ZWNlY2M3MDEwMzQwNGRhN2RjMjc4Y2E5NzUxOWEyZGVi
ZmMwMDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTYz
LDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5
OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMzMxLDcgKzMzNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBSdW50aW1l
IHsKIAogLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgeworY2xhc3MgS2V5UGF0aCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
IHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBn
ZW5lcmF0aW5nIEtleVBhdGguCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKQEAgLTMzOSw2ICszNDIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyA9IDEsCiAgICAgICAgIEFycmF5ID0gMiwKICAg
ICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKwogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCkBAIC0zNjMsMTAgKzM2NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBLZXlQYXRoOwogICAgIHB1YmxpYzoKIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgaW5fdHlwZSkKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9w
ZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJf
cywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbl90eXBlKSk7
CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgIH0KIApA
QCAtMzkyLDE0ICszOTYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJp
bmcmIGluX29wdF9zdHJpbmcpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRT
dHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRT
dHJpbmcoInN0cmluZyJfcywgaW5fb3B0X3N0cmluZyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRB
cnJheShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEFy
cmF5KFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fb3B0X2FycmF5KQogICAgIHsKLSAg
ICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKHZhbHVl
KSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92
ZShpbl9vcHRfYXJyYXkpKTsKICAgICB9CiB9OwogCkBAIC00MTQsNyArNDE4LDcgQEAgT3B0aW9u
YWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmlu
ZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGU+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBh
dGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5
UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CiAKQEAgLTQ1Niw4ICs0NjAsNyBAQCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SQogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDc4LDE2
ICs0ODEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBF
bnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpL
ZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6
OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3Ry
aW5nLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBh
dGg6OlR5cGU6OkFycmF5LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlOjpOdWxsLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU6OkFycmF5LAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAz
OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAg
ICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFs
dWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVz
dWx0CmluZGV4IDM0OGFjZTkzYmFiMDk0N2RhZjg1YjQ1ZjU5YzlmY2FhNjcwMmRlMDAuLjAwYWEz
NmZhM2QwMjQ5MTNjNWI4ZDI3MzgxMWRhNWEwMTU0ODMxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3Ry
aXAtY29tbWVudHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJl
c3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNTIsOCArMzU1LDcgQEAgbmFtZXNwYWNlIFBy
b3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24tcmVzdWx0CmluZGV4IDc5Y2I5ODU0NTlmODgyNDU2NzdjNWUzYzI2MDVmNzM0NGUxMTZiZmMu
LjM0YjFhY2JiY2FlYzgxMmQ4NGQxNjlmZTNiMmI4MjcyNTY3YWJkNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAtNjMsNyAr
NjMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAg
LTIxNCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRl
cjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCkBAIC0zNTcsOCArMzYwLDcgQEAgdXNpbmcgUmVtb3RlT2JqZWN0SWQgPSBpbnQ7
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAppbmRleCBkODg4MGM2M2UzMzc4YzVj
ZmUzMDhjYWZkZjg0Y2M5ODc0OTJiYmZjLi45NDBmMTU4MGJkYzFkOWJjYTQ0MDE0NzQxNTJhMjNi
YjI1NGIxOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTY4LDcg
KzY4LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxs
KTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgog
CkBAIC0xMjQsMTEgKzEyNCwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KwogCiAKIApAQCAtMTY5LDkgKzE3Miw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTks
NiArMjIwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CkBAIC0yNjIsNyArMjY0LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAj
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzAzLDcgKzMwNCw5IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzMxLDcgKzMzNCw3IEBAIHVzaW5nIEx1Y2t5TnVtYmVycyA9IEpTT046OkFycmF5
T2Y8aW50PjsKIHVzaW5nIEJhYnlOYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjsKIHVzaW5n
IE5ld09iamVjdHMgPSBKU09OOjpBcnJheU9mPGludD47CiB1c2luZyBPbGRPYmplY3RzID0gSlNP
Tjo6QXJyYXlPZjxpbnQ+OwotdXNpbmcgU3RvcFJlYXNvbnMgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+OwordXNpbmcgU3RvcFJlYXNvbnMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPjsKIH0gLy8gUnVudGltZQog
Ly8gRW5kIG9mIHR5cGVkZWZzLgogCkBAIC0zNjUsNyArMzY4LDcgQEAgT3B0aW9uYWw8UHJvdG9j
b2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAv
LyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcm
KTsKK09wdGlvbmFsPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC00MTcsOCArNDIwLDcgQEAgc3RydWN0IERl
ZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IDogSW50SGFz
aDxJbnNwZWN0b3I6OlAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTQzOSwxNiArNDQxLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCiAK
IHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdy
eSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RmFpbnRlZCwKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAppbmRleCAzYTJjMjA1MjgzMDQ0ZTAwMDZiMzMx
ZWUzMTViMDQzN2E0ZmE1YmY5Li45NTExNmJjNTBhYmYyNzk0MDY0NTkwNzEwZmNkM2UyNDZiZjBj
NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC02OSw3ICs2OSw3IEBA
IEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjUs
MTEgKzEyNSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApA
QCAtMTcwLDkgKzE3Myw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjAsNiArMjIxLDcg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC0yNjMsNyArMjY1LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzYyLDkgKzM2NSw5IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBE
b21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwogCkBAIC00MTgsOCArNDIxLDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IDogSW50SGFzaDxJ
bnMKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKQEAgLTQ0NCwzMyArNDQ2LDMzIEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSkgewogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIAogdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5p
bWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpS
dW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNv
d3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6
OkZhcm1BbmltYWxzOjpQaWdzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpG
YXJtQW5pbWFsczo6Q293cywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFy
bUFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpIZW5zLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kp
CiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0
dXJuIChQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CiAK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
cz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
CiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6
OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpEdWNr
cywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6
SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
czo6Q3Jvd3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM6OkZsYW1pbmdvcywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsg
KytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAg
ICAgICAgcmV0dXJuIChQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFu
dFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IDMyOGZlZDIzZGM0Y2E3ZjE4ODU5MGI2MzQ0ZDVi
ZjdlNDczZGRjMDMuLmJhOWYxN2M2MjUwZGNlMDY4Y2Y5NDY1NTk0NzBkZDQ1YjYxNzc0MDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIElu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDEx
ICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAg
LTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBA
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMjY0LDcgKzI2Niw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwNSw3ICszMDYsOSBAQCBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMz
Myw3ICszMzYsNyBAQCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAKIC8vIFR5cGVkZWZzLgogbmFt
ZXNwYWNlIERhdGFiYXNlIHsKLXVzaW5nIEVycm9yTGlzdCA9IEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPjsKK3VzaW5nIEVycm9yTGlzdCA9IEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj47CiB9IC8vIERhdGFiYXNlCiAvLyBF
bmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM1MSw3ICszNTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiBuYW1lc3BhY2UgRGF0
YWJhc2UgewogCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAg
LTM3OCwxNyArMzgxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwog
ICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1l
c3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCkBAIC00MjQsMTMgKzQyNywx
NCBAQCBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsKICAgICBSaWdodCA9IDMsCiB9OyAvLyBlbnVt
IGNsYXNzIE1vdXNlQnV0dG9uCiAKLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgZmlu
YWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7CiAgICAg
ICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJl
Y3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAg
ICAgQWxsRmllbGRzU2V0ID0gMApAQCAtNDc1LDU5ICs0NzksNjAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAg
ICAgfQogCi0gICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiYgaW5fb3B0X2NvbHVtbk5hbWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9v
cHRfY29sdW1uTmFtZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4g
dmFsdWUpCisgICAgdm9pZCBzZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b24+PiYmIGluX29wdF9idXR0b25zKQogICAgIHsKLSAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUodmFsdWUpKTsK
KyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUo
aW5fb3B0X2J1dHRvbnMpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldERpcmVjdGlvbmFsaXR5KERp
cmVjdGlvbmFsaXR5IHZhbHVlKQorICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9u
YWxpdHkgaW5fb3B0X2RpcmVjdGlvbmFsaXR5KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoaW5fb3B0X2RpcmVjdGlvbmFsaXR5KSk7CiAg
ICAgfQogCi0gICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHZvaWQg
c2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9vcHRfbm90ZXMpCiAgICAgewotICAgICAgICBKU09O
OjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90ZXMiX3MsIGluX29wdF9ub3Rlcyk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHZvaWQgc2V0VGltZXN0
YW1wKGRvdWJsZSBpbl9vcHRfdGltZXN0YW1wKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIGluX29wdF90aW1lc3RhbXApOwogICAg
IH0KIAotICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAg
IHZvaWQgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3ZhbHVlcykKICAgICB7
Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3Zl
KHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9z
LCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFBheWxvYWQo
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFBheWxvYWQoUmVmPEpTT046
OlZhbHVlPiYmIGluX29wdF9wYXlsb2FkKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fb3B0X3BheWxvYWQp
KTsKICAgICB9CiAKLSAgICB2b2lkIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3IoUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiYgaW5fb3B0X2Vycm9yKQogICAgIHsKLSAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKGluX29wdF9l
cnJvcikpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9y
TGlzdChSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+JiYgaW5fb3B0X2Vycm9yTGlz
dCkKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJlcnJvckxpc3Qi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImVycm9yTGlzdCJfcywgV1RGTW92ZShpbl9vcHRfZXJyb3JMaXN0KSk7CiAgICAgfQogfTsKIAot
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3Mg
UGFyYW1ldGVyQnVuZGxlIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGlj
OgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGls
ZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFs
aXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAgICAgUlRMID0gNSwKICAgICB9OyAvLyBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKQEAgLTU2MCw2NiArNTY1LDY2
IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29s
dW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFtZXMpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVt
bk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCks
IHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJy
YXkoImJ1dHRvbnMiX3MsIFdURk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxp
dHkgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IGluX2RpcmVjdGlvbmFsaXR5KQogICAgICAg
ICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlT
ZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbl9kaXJlY3Rpb25hbGl0eSkpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKICAgICAgICAgfQog
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgaW5fbm90ZXMpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJs
ZSBpbl90aW1lc3RhbXApCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOwot
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIGluX3RpbWVzdGFt
cCk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNT
ZXQ+JiBzZXRWYWx1ZXMoUmVmPEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0
eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFdURk1vdmUoaW5fdmFsdWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFZhbHVlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXls
b2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYm
IGluX3BheWxvYWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShpbl9wYXlsb2FkKSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgaW5fZXJyb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92ZShpbl9lcnJvcikpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yTGlzdD4mJiBpbl9lcnJvckxpc3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvckxpc3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3Rf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3Qi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9z
LCBXVEZNb3ZlKGluX2Vycm9yTGlzdCkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxF
cnJvckxpc3RTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNjU1LDcgKzY2MCw3IEBAIHB1YmxpYzoK
IH07CiAKIC8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3Nl
dHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8K
LWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGZpbmFsIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02ODUsMzggKzY5MCwzOCBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwogICAgIHB1YmxpYzoK
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJ
bnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5faW50ZWdlcikKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIGlu
X2ludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXko
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYg
c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBpbl9hcnJheSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYXJyYXkiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCBpbl9hcnJheSk7
CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5n
KGNvbnN0IFN0cmluZyYgaW5fc3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIGluX3ZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiX3MsIGluX3ZhbHVlKTsKICAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5n
JiBpbl9vYmplY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIGluX29iamVjdCk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKICAgICAgICAgfQogCkBAIC03NDcsMTcgKzc1
Miw2NiBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAorLyogQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vz
bid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiAqLworY2xhc3MgRHVtbXlPYmplY3QgZmlu
YWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypEdW1t
eU9iamVjdCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRHVtbXlPYmplY3Q7CisgICAgcHVibGlj
OgorCisgICAgICAgIFJlZjxEdW1teU9iamVjdD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRHVtbXlPYmplY3Qp
ID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxE
dW1teU9iamVjdD4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKKyAgICAgKiBSZWY8RHVtbXlPYmplY3Q+IHJlc3VsdCA9IER1bW15T2JqZWN0OjpjcmVhdGUo
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKIH0gLy8gRGF0YWJh
c2UKIAogbmFtZXNwYWNlIFRlc3QgewogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkg
bmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgog
ICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAgICAg
ICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIERpcmVjdGlvbmFsaXR5U2V0
ID0gMSA8PCAwLApAQCAtNzg5LDU5ICs4NDMsNTkgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0
RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNl
dCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+
IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMo
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5f
YnV0dG9ucykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKGluX2J1dHRvbnMpKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiYmIGluX2NvbHVtbk5hbWVzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBX
VEZNb3ZlKGluX2NvbHVtbk5hbWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
bHVtbk5hbWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2Jq
ZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9w
YXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
clNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBX
VEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwogICAgICAgICB9CiAKQEAgLTg4NiwxNSArOTQwLDE1IEBAIE9wdGlvbmFsPFByb3RvY29s
RW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8g
RW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0
IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNv
bnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9u
YWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CiB0ZW1w
bGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7
CiAKIC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFy
YW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQ
cm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApA
QCAtOTQ2LDggKzEwMDAsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiA6IEludEhhc2g8SW5zcGVjdAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtOTcxLDQ1ICsx
MDI0LDQ1IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51
bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6
TWlkZGxlLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbjo6UmlnaHQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbjo6Tm9uZSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uOjpMZWZ0LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b246Ok1pZGRsZSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uOjpSaWdodCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsg
KytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAg
ICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNb
aV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFz
ZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAg
ICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyAr
K2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFs
dWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQpAQCAtMTAxNywxNSArMTA3MCwxNSBAQCBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4g
cGFyc2VFbgogLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIs
CisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk6OlJUTCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytp
KQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDI2Yjc1MGM2
NmIyMDFiMGQ0ZWNiZjJmMzc0OGFiOWY0MDMwOWE5ZWMuLjRkZTA0YWI0YjZkOTFkYzk3ZjAwNjM1
OWE4ZDZjNzY4MGQ5MmYzN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0
CkBAIC02OSw3ICs2OSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlRlc3Qi
LCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgogCkBAIC0xMjUsMTEgKzEyNSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKwogCiAKIApAQCAtMTcwLDkgKzE3Myw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBA
IC0yMjAsNiArMjIxLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjMsNyArMjY1LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzA0LDcgKzMwNSw5
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIApAQCAtMzQ2LDcgKzM0OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBUZXN0IHsKIAog
LyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBu
b24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBo
ZWxwZXJzLiAqLwotY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0z
NzYsMzggKzM3OSwzOCBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGlu
Z0Nhc3Q7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+
JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIGluX3N0cmluZykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3Bl
cnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0
cmluZyJfcywgaW5fc3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5n
U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4m
IHNldE51bWJlcihpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+
JiBzZXROdW1iZXIoaW50IGluX251bWJlcikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCBpbl9udW1iZXIp
OwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzIGluX2FuaW1hbHMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFuaW1hbHMiX3MsIFByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoaW5fYW5pbWFscykpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSWRTZXQ+JiBzZXRJZChpbnQgaW5faWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEludGVnZXIoImlkIl9zLCBpbl9pZCk7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPElkU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+
JiBzZXRUcmVlKFJlZjxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4mJiBpbl90cmVl
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNl
dCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE9iamVjdCgidHJlZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVj
dCgidHJlZSJfcywgV1RGTW92ZShpbl90cmVlKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRyZWVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDUyLDcgKzQ1NSw3IEBAIGVudW0gY2xh
c3MgQ2FzdGVkQW5pbWFscyB7CiAgICAgRmxhbWluZ29zID0gMywKIH07IC8vIGVudW0gY2xhc3Mg
Q2FzdGVkQW5pbWFscwogCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QxIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgeworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSBmaW5hbCA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LApAQCAtNDk4LDEzICs1MDEsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+
IHZhbHVlKQorICAgIHZvaWQgc2V0T2JqKFJlZjxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0Mj4mJiBpbl9vcHRfb2JqKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0
T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUoaW5fb3B0X29iaikpOwogICAgIH0KIH07CiAK
LWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFz
cyBSZWN1cnNpdmVPYmplY3QyIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01NTAsMjUgKzU1
MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgdm9p
ZCBzZXRPYmooUmVmPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX29wdF9v
YmopCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywg
V1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9i
aiJfcywgV1RGTW92ZShpbl9vcHRfb2JqKSk7CiAgICAgfQogfTsKIAogfSAvLyBUZXN0CiAKLXRl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscz4gewordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7CitzdGF0aWMgUmVmPFByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7CiBz
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsK
LXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYm
IHZhbHVlKTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+IHsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CiBz
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsK
LXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj4gewordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gewogc3RhdGljIHZvaWQgYXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKIH07CiAKQEAgLTU3OSw5ICs1ODIsOSBA
QCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiB0ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmlu
ZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5n
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTYzNSw4ICs2MzgsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4gOiBJbnRIYXNoPEluc3BlY3RvcgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjYxLDMzICs2NjMsMzMgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFp
bgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitP
cHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0
YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRp
b25hbDxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1pbmdvcywKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpUHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCiAgICAgfTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tp
XTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMpY29u
c3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtNjk2LDEx
NSArNjk4LDEwMSBAQCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcAogCiAKIAotdm9pZCBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFs
dWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwot
ICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3Ry
aW5nKHJlc3VsdCk7Ci0gICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgQVNTRVJUKHJl
c3VsdCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIg
fHwgcmVzdWx0ID09ICJGbGFtaW5nb3MiKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9
CiAKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUp
Cit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NF
UlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRf
QVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3Qg
PSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQob2JqZWN0KTsKICAgICB7CiAgICAgICAg
IGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOwogICAgICAgICBBU1NF
UlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPFN0
cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkp
OworICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKHN0cmluZ1Bvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8g
bnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKCJudW1iZXIiX3MpOwogICAgICAgICBBU1NFUlQobnVt
YmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBv
cy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gYW5pbWFsc1BvcyA9
IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7CiAgICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9
IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmlt
YWxzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9z
LT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byBpZFBvcyA9IG9iamVj
dC0+ZmluZCgiaWQiX3MpOwogICAgICAgICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7
Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
aWRQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAg
ICAgICAgIGF1dG8gdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7CiAgICAgICAgIEFT
U0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogCi0gICAgaW50IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gNTsKKyAgICBzaXplX3QgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1Owog
ICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKICAgICAgICAg
RkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRv
SlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlm
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQorUmVmPFByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2Vl
ZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJl
c3VsdC5nZXQoKSk7Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0
eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJh
c2UqPihyZXN1bHQuZ2V0KCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CisgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09O
OjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4oc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEpTT046Ok9iamVjdEJhc2U+KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9
CiAKIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFs
dWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAg
QVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNT
RVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsK
LSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gb2Jq
ZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CiAKLSAgICBpbnQg
Zm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3Vu
dCA9IDA7CiAgICAgewogICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9z
KTsKICAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLnB0cigpKTsKICAgICAgICAg
ICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZv
dW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5l
eHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURf
UEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVj
dDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lk
IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VO
VVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2
YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5V
U0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gb2JqZWN0ID0gdmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CiAKLSAgICBpbnQgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSAwOworICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CiAg
ICAgewogICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKICAgICAg
ICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIEJp
bmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLnB0cigpKTsKICAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZvdW5kUHJvcGVy
dGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBw
cm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggN2Q1Nzc2MmE4
ZmY4YmU0YTlhZTQ5ZGM5ZWY1NDdiOWQzMjEzZGM3Yi4uYjk4NGNiMDdjMmIzNzU1MWExZjc3YzIz
YjA5NDA2MjI5MTZlZTVlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTYz
LDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5
OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMzIwLDcgKzMyMyw3IEBAIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwog
CiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzIGZpbmFsIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC0zNDcsMTcgKzM1MCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBOb09wZW5QYXJhbWV0ZXJzOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE9uZVNldD4mIHNldE9uZShkb3VibGUgaW5fb25lKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgT25lU2V0KSwgcHJvcGVydHlfb25lX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgib25lIl9zLCBpbl9vbmUpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgaW5fdHdvKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHdvU2V0KSwgcHJvcGVydHlfdHdvX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInR3byJfcywgdmFs
dWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCBpbl90d28pOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUd29TZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
Mzg1LDcgKzM4OCw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBPcGVuUGFyYW1ldGVy
cyA6IHB1YmxpYyBKU09OOjpPYmplY3QgeworY2xhc3MgT3BlblBhcmFtZXRlcnMgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLApAQCAtNDEyLDE3ICs0MTUsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgT3BlblBhcmFtZXRlcnM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91YmxlIGluX2FscGhhKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9h
bHBoYV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBo
YSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYWxwaGEiX3Ms
IGluX2FscGhhKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QWxwaGFTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91
YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91
YmxlIGluX2JldGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJiZXRhIl9zLCBpbl9iZXRhKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QmV0YVNldD4oKTsKICAgICAgICAgfQogCkBAIC00NTAsNyArNDUzLDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBv
cGVuLgotICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOworICAgIE5vbmUgc3RhdGlj
IGNvbnN0IGNoYXIqIGFscGhhS2V5OwogfTsKIAogfSAvLyBUZXN0CkBAIC00OTUsMTQgKzQ5OCwx
MyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiBuYW1lc3BhY2UgUHJvdG9jb2wgewogCi1jb25zdCBjaGFyKiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAiYWxwaGEiOworY29u
c3QgY2hhciogUHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJhbWV0ZXJzOjphbHBoYUtleSA9ICJhbHBo
YSI7CiAKIH0gLy8gbmFtZXNwYWNlIFByb3RvY29sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKaW5kZXggZWY3NzhhMDZjN2YyNTExZjZjMjM0MTg2
NzI1NTA1NjgzN2ZiZmEzZi4uYzA0YWI1OTczZTc2NjEyMWU2YmU4Njk5OTg1NDFkNWE3MTI3MmU4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQK
QEAgLTY4LDcgKzY4LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVmVyc2lv
bkRvbWFpbiIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjksOSArMTcyLDcgQEAgdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQsNiBAQCBjbGFzcyBGcm9u
dGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMDMs
NyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOCArMzY1LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBWRVJTSU9OID0gNDI7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuY3BwCmluZGV4IGQ5OWZmMzExZGI3NTU0YTJiMDEzMGQyNzIyNDljN2IwNGQwNWI4YTUuLjY1
ZWEzNTQ1OWM0NDk3ODQyYjU4YWEzYjRkMmMxNmFiY2M5ZmUxNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCkBAIC01MDEsMTQgKzUwMSwxNCBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVy
ZVNoYXBlOjppbnNwZWN0bwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogY3VycmVu
dFNoYXBlLT5tX29wdGlvbmFsRmllbGRzKQogICAgICAgICAgICAgb3B0aW9uYWxGaWVsZHMtPmFk
ZEl0ZW0oZmllbGQuZ2V0KCkpOwogCi0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcygm
ZmllbGRzLmdldCgpKTsKLSAgICAgICAgY3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMo
Jm9wdGlvbmFsRmllbGRzLmdldCgpKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRz
KFdURk1vdmUoZmllbGRzKSk7CisgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldE9wdGlvbmFsRmll
bGRzKFdURk1vdmUob3B0aW9uYWxGaWVsZHMpKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
Q29uc3RydWN0b3JOYW1lKGN1cnJlbnRTaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOwogICAgICAg
ICBjdXJyZW50T2JqZWN0LT5zZXRJc0ltcHJlY2lzZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rp
b25hcnlNb2RlKTsKIAogICAgICAgICBpZiAoY3VycmVudFNoYXBlLT5tX3Byb3RvKSB7CiAgICAg
ICAgICAgICBhdXRvIG5leHRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCkucmVsZWFzZSgpOwotICAgICAgICAgICAgY3Vy
cmVudE9iamVjdC0+c2V0UHJvdG90eXBlU3RydWN0dXJlKCZuZXh0T2JqZWN0LmdldCgpKTsKKyAg
ICAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldFByb3RvdHlwZVN0cnVjdHVyZShuZXh0T2JqZWN0
LmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gV1RGTW92ZShuZXh0T2Jq
ZWN0KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVz
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCmluZGV4IDQwNTIwNzhmM2Y5N2My
ZTkwZmFjZDA1MWRjMTkyZWM2NTI2MTRjMzQuLjQ5YjNmMGNhMmZmMWY4ZTY5ZDBjNGY0M2FhYWNm
Y2M2YWJkYTZiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIGVudW0g
Y2xhc3MgVG9rZW4gewogICAgIEludmFsaWQsCiB9OwogCi1jb25zdCBjaGFyKiBjb25zdCBudWxs
U3RyaW5nID0gIm51bGwiOwotY29uc3QgY2hhciogY29uc3QgdHJ1ZVN0cmluZyA9ICJ0cnVlIjsK
LWNvbnN0IGNoYXIqIGNvbnN0IGZhbHNlU3RyaW5nID0gImZhbHNlIjsKK2NvbnN0IGNoYXIqIGNv
bnN0IG51bGxUb2tlbiA9ICJudWxsIjsKK2NvbnN0IGNoYXIqIGNvbnN0IHRydWVUb2tlbiA9ICJ0
cnVlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IGZhbHNlVG9rZW4gPSAiZmFsc2UiOwogCiBib29sIHBh
cnNlQ29uc3RUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0
IFVDaGFyKiogdG9rZW5FbmQsIGNvbnN0IGNoYXIqIHRva2VuKQogewpAQCAtMjA5LDE1ICsyMDks
MTUgQEAgVG9rZW4gcGFyc2VUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBl
bmQsIGNvbnN0IFVDaGFyKiogdG9rZW5TdGFydCwKIAogICAgIHN3aXRjaCAoKnN0YXJ0KSB7CiAg
ICAgY2FzZSAnbic6Ci0gICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9r
ZW5FbmQsIG51bGxTdHJpbmcpKQorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBl
bmQsIHRva2VuRW5kLCBudWxsVG9rZW4pKQogICAgICAgICAgICAgcmV0dXJuIFRva2VuOjpOdWxs
OwogICAgICAgICBicmVhazsKICAgICBjYXNlICd0JzoKLSAgICAgICAgaWYgKHBhcnNlQ29uc3RU
b2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgdHJ1ZVN0cmluZykpCisgICAgICAgIGlmIChwYXJz
ZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIHRydWVUb2tlbikpCiAgICAgICAgICAg
ICByZXR1cm4gVG9rZW46OkJvb2xUcnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlICdmJzoK
LSAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgZmFsc2VT
dHJpbmcpKQorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5k
LCBmYWxzZVRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbEZhbHNlOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlICdbJzoKQEAgLTM4MCw3ICszODAsNyBAQCBSZWZQdHI8SlNP
Tjo6VmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5k
LCBjb25zdCBVQ2hhcgogICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBhcnJheU5vZGUg
PSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKICAgICAgICAg
ICAgIGlmICghYXJyYXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShXVEZNb3ZlKGFycmF5Tm9kZSkpOworICAgICAgICAg
ICAgYXJyYXktPnB1c2hWYWx1ZShhcnJheU5vZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAg
ICAgICAgIC8vIEFmdGVyIGEgbGlzdCB2YWx1ZSwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVu
ZCBvZiB0aGUgbGlzdC4KICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CkBAIC00MjAsNyAr
NDIwLDcgQEAgUmVmUHRyPEpTT046OlZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFy
dCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIKICAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGgg
KyAxKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICBvYmplY3QtPnNldFZhbHVlKGtleSwgV1RGTW92ZSh2YWx1ZSkp
OworICAgICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIHZhbHVlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKIAogICAgICAgICAgICAgLy8gQWZ0
ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUK
QEAgLTQ4OSw0MCArNDg5LDM4IEBAIFJlZjxWYWx1ZT4gVmFsdWU6OmNyZWF0ZShjb25zdCBjaGFy
KiB2YWx1ZSkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWYWx1ZSh2YWx1ZSkpOwogfQogCi1i
b29sIFZhbHVlOjphc1ZhbHVlKFJlZlB0cjxWYWx1ZT4mIHZhbHVlKQorUmVmUHRyPFZhbHVlPiBW
YWx1ZTo6YXNWYWx1ZSgpCiB7Ci0gICAgdmFsdWUgPSB0aGlzOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiB0aGlzOwogfQogCi1ib29sIFZhbHVlOjphc09iamVjdChSZWZQdHI8T2JqZWN0
PiYpCitSZWZQdHI8T2JqZWN0PiBWYWx1ZTo6YXNPYmplY3QoKQogewotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBWYWx1ZTo6YXNBcnJheShSZWZQdHI8
QXJyYXk+JikKK1JlZlB0cjxBcnJheT4gVmFsdWU6OmFzQXJyYXkoKQogewotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBWYWx1ZTo6cGFyc2VKU09OKGNv
bnN0IFN0cmluZyYganNvbklucHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpCitSZWZQdHI8VmFs
dWU+IFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIHdob2xlIGZpbGUgc2hvdWxkIGp1c3QgdXNlIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBV
Q2hhci9sZW5ndGggYW5kIGF2b2lkIHVwY29udmVydGluZy4KLSAgICBhdXRvIGNoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KGpzb25JbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0
byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhqc29uKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
ICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBzdGFydCArIGpzb25JbnB1dC5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogZW5kID0g
c3RhcnQgKyBqc29uLmxlbmd0aCgpOwogICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKICAgICBh
dXRvIHJlc3VsdCA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5kLCAwKTsKICAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGZvciAoY29uc3QgVUNoYXIqIHZhbHVlRW5kID0gdG9rZW5FbmQ7IHZhbHVlRW5k
IDwgZW5kOyArK3ZhbHVlRW5kKSB7CiAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZSgqdmFs
dWVFbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgb3V0cHV0ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgVmFsdWU6OmVzY2FwZVN0cmlu
ZyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBTdHJpbmdWaWV3IHN0cmluZykKQEAgLTU3Myw5NCAr
NTcxLDMyIEBAIFN0cmluZyBWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLWJvb2wgVmFsdWU6OmFzQm9vbGVhbihib29sJiBvdXRw
dXQpIGNvbnN0CitPcHRpb25hbDxib29sPiBWYWx1ZTo6YXNCb29sZWFuKCkgY29uc3QKIHsKICAg
ICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xlYW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG91dHB1dCA9IG1fdmFsdWUuYm9vbGVhbjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbV92YWx1ZS5ib29sZWFuOwogfQogCi1i
b29sIFZhbHVlOjphc0RvdWJsZShkb3VibGUmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJs
ZT4gVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRv
dWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5udW1i
ZXI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUgJiYg
dHlwZSgpICE9IFR5cGU6OkludGVnZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIG1fdmFsdWUubnVtYmVyOwogfQogCi1ib29sIFZhbHVlOjphc0RvdWJsZShmbG9h
dCYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8aW50PiBWYWx1ZTo6YXNJbnRlZ2VyKCkgY29uc3QK
IHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUubnVtYmVyKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkg
IT0gVHlwZTo6SW50ZWdlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PihtX3ZhbHVlLm51bWJlcik7CiB9CiAKLWJvb2wgVmFsdWU6OmFz
SW50ZWdlcihpbnQmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6Oklu
dGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8aW50PihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCYgb3V0cHV0KSBj
b25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlw
ZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFZhbHVlOjphc0ludGVnZXIobG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nPihtX3ZhbHVlLm51
bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25n
IGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIg
JiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
b3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJiBvdXRw
dXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAh
PSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYgb3V0cHV0
KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0g
VHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNTdHJpbmcoU3RyaW5nJiBvdXRwdXQpIGNvbnN0CitT
dHJpbmcgVmFsdWU6OmFzU3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6
OlN0cmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5z
dHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIG1fdmFsdWUuc3RyaW5nOwogfQogCiB2b2lkIFZhbHVlOjp3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdApAQCAtNzAzLDc2ICs2MzksNzQgQEAgT2JqZWN0QmFz
ZTo6fk9iamVjdEJhc2UoKQogewogfQogCi1ib29sIE9iamVjdEJhc2U6OmFzT2JqZWN0KFJlZlB0
cjxPYmplY3Q+JiBvdXRwdXQpCitSZWZQdHI8T2JqZWN0PiBPYmplY3RCYXNlOjphc09iamVjdCgp
CiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdCkgPT0gc2l6ZW9mKE9iamVjdEJh
c2UpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxPYmplY3QqPih0
aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotT2JqZWN0KiBPYmplY3RCYXNlOjpvcGVuQWNj
ZXNzb3JzKCkKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0KSA9PSBzaXplb2Yo
T2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxPYmpl
Y3QqPih0aGlzKTsKIH0KIAogc2l6ZV90IE9iamVjdEJhc2U6Om1lbW9yeUNvc3QoKSBjb25zdAog
ewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGVudHJ5IDogbV9tYXApIHsKLSAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRy
eS5rZXkuc2l6ZUluQnl0ZXMoKTsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlKQotICAgICAgICAg
ICAgbWVtb3J5Q29zdCArPSBlbnRyeS52YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9tYXApCisgICAgICAgIG1lbW9yeUNvc3QgKz0gZW50
cnkua2V5LnNpemVJbkJ5dGVzKCkgKyBlbnRyeS52YWx1ZS0+bWVtb3J5Q29zdCgpOwogICAgIHJl
dHVybiBtZW1vcnlDb3N0OwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxib29sPiBPYmplY3RC
YXNlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8
VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOworICAg
IGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB2YWx1ZS0+YXNCb29sZWFuKCk7CiB9CiAK
LWJvb2wgT2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBv
dXRwdXQpIGNvbnN0CitPcHRpb25hbDxkb3VibGU+IE9iamVjdEJhc2U6OmdldERvdWJsZShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBp
ZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1
ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiB2YWx1ZS0+YXNEb3VibGUoKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBjb25zdAor
T3B0aW9uYWw8aW50PiBPYmplY3RCYXNlOjpnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QKIHsKLSAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFt
ZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFz
T2JqZWN0KG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVl
LT5hc0ludGVnZXIoKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxBcnJheT4mIG91dHB1dCkgY29uc3QKK1N0cmluZyBPYmplY3RCYXNl
OjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1
ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNBcnJheShvdXRwdXQpOworICAgIGF1dG8g
dmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4g
bnVsbFN0cmluZygpOworICAgIHJldHVybiB2YWx1ZS0+YXNTdHJpbmcoKTsKIH0KIAotYm9vbCBP
YmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mIG91
dHB1dCkgY29uc3QKK1JlZlB0cjxPYmplY3Q+IE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgZmlu
ZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5h
bWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biB2YWx1ZS0+YXNPYmplY3QoKTsKK30KKworUmVmUHRyPEFycmF5PiBPYmplY3RCYXNlOjpnZXRB
cnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IGdldFZh
bHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiB2YWx1ZS0+YXNBcnJheSgpOworfQorCitSZWZQdHI8VmFsdWU+IE9iamVjdEJhc2U6
OmdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIGZpbmRSZXN1
bHQgPSBtX21hcC5maW5kKG5hbWUpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBmaW5kUmVzdWx0LT52YWx1
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlLmNvcHlSZWYoKTsKIH0KIAogdm9pZCBPYmplY3RCYXNlOjpyZW1v
dmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNzk4LDggKzczMiw2IEBAIHZvaWQgT2JqZWN0QmFz
ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogT2JqZWN0QmFzZTo6
T2JqZWN0QmFzZSgpCiAgICAgOiBWYWx1ZShUeXBlOjpPYmplY3QpCi0gICAgLCBtX21hcCgpCi0g
ICAgLCBtX29yZGVyKCkKIHsKIH0KIApAQCAtODA3LDE3ICs3MzksMTYgQEAgQXJyYXlCYXNlOjp+
QXJyYXlCYXNlKCkKIHsKIH0KIAotYm9vbCBBcnJheUJhc2U6OmFzQXJyYXkoUmVmUHRyPEFycmF5
PiYgb3V0cHV0KQorUmVmUHRyPEFycmF5PiBBcnJheUJhc2U6OmFzQXJyYXkoKQogewogICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihBcnJheUJhc2UpID09IHNpemVvZihBcnJheSksIGNhbm5vdF9j
YXN0KTsKLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxBcnJheSo+KHRoaXMpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheSo+KHRoaXMpOwogfQogCiB2b2lk
IEFycmF5QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIHsKICAg
ICBvdXRwdXQuYXBwZW5kKCdbJyk7Ci0gICAgZm9yIChWZWN0b3I8UmVmUHRyPFZhbHVlPj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQp
IHsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBtX21hcC5lbmQoKTsg
KytpdCkgewogICAgICAgICBpZiAoaXQgIT0gbV9tYXAuYmVnaW4oKSkKICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoJywnKTsKICAgICAgICAgKCppdCktPndyaXRlSlNPTihvdXRwdXQpOwpAQCAt
ODI3LDExICs3NTgsMTAgQEAgdm9pZCBBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVy
JiBvdXRwdXQpIGNvbnN0CiAKIEFycmF5QmFzZTo6QXJyYXlCYXNlKCkKICAgICA6IFZhbHVlKFR5
cGU6OkFycmF5KQotICAgICwgbV9tYXAoKQogewogfQogCi1SZWZQdHI8VmFsdWU+IEFycmF5QmFz
ZTo6Z2V0KHNpemVfdCBpbmRleCkgY29uc3QKK1JlZjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6
ZV90IGluZGV4KSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaW5kZXggPCBtX21hcC5zaXplKCkpOwogICAgIHJldHVybiBtX21hcFtpbmRleF07
CkBAIC04NTAsMTAgKzc4MCw4IEBAIFJlZjxBcnJheT4gQXJyYXk6OmNyZWF0ZSgpCiBzaXplX3Qg
QXJyYXlCYXNlOjptZW1vcnlDb3N0KCkgY29uc3QKIHsKICAgICBzaXplX3QgbWVtb3J5Q29zdCA9
IFZhbHVlOjptZW1vcnlDb3N0KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbV9tYXAp
IHsKLSAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGl0ZW0tPm1l
bW9yeUNvc3QoKTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbV9tYXApCisg
ICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwogICAgIHJldHVybiBtZW1v
cnlDb3N0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmggYi9T
b3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmgKaW5kZXggZWJhYmM0NDlmODgwYjM5ZDNmYWRlNzhj
ZDYxYjFjNGQ1ZTBlNjg2My4uNDMwNzQ1M2Q5Y2M4Zjg4Y2MxNjk5Y2Q4ODU3MjE2ODc3ZmRjOWIw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0pTT05WYWx1ZXMuaApAQCAtOTIsMjIgKzkyLDE1IEBAIHB1YmxpYzoKICAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIGlzTnVsbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpOdWxsOyB9CiAKLSAgICBib29sIGFzQm9vbGVhbihi
b29sJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIoaW50JikgY29uc3Q7Ci0gICAgYm9vbCBh
c0ludGVnZXIodW5zaWduZWQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25nJikgY29u
c3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIobG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9vbCBhc0lu
dGVnZXIodW5zaWduZWQgbG9uZyYpIGNvbnN0OwotICAgIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVk
IGxvbmcgbG9uZyYpIGNvbnN0OwotICAgIGJvb2wgYXNEb3VibGUoZG91YmxlJikgY29uc3Q7Ci0g
ICAgYm9vbCBhc0RvdWJsZShmbG9hdCYpIGNvbnN0OwotICAgIGJvb2wgYXNTdHJpbmcoU3RyaW5n
JikgY29uc3Q7Ci0gICAgYm9vbCBhc1ZhbHVlKFJlZlB0cjxWYWx1ZT4mKTsKKyAgICBPcHRpb25h
bDxib29sPiBhc0Jvb2xlYW4oKSBjb25zdDsKKyAgICBPcHRpb25hbDxpbnQ+IGFzSW50ZWdlcigp
IGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4gYXNEb3VibGUoKSBjb25zdDsKKyAgICBTdHJp
bmcgYXNTdHJpbmcoKSBjb25zdDsKKyAgICBSZWZQdHI8VmFsdWU+IGFzVmFsdWUoKTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxPYmplY3Q+IGFzT2JqZWN0KCk7CisgICAgdmlydHVhbCBSZWZQdHI8QXJy
YXk+IGFzQXJyYXkoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0
PiYpOwotICAgIHZpcnR1YWwgYm9vbCBhc0FycmF5KFJlZlB0cjxBcnJheT4mKTsKLQotICAgIHN0
YXRpYyBib29sIHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRyPFZhbHVl
PiYgb3V0cHV0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFZhbHVlPiBwYXJzZUpTT04oY29uc3QgU3Ry
aW5nJik7CiAgICAgc3RhdGljIHZvaWQgZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBTdHJp
bmdWaWV3KTsKIAogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKQEAgLTE3Miw5NSAr
MTY1LDYzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBPYmplY3RCYXNl
IDogcHVibGljIFZhbHVlIHsKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPFZhbHVlPj4gRGljdGlvbmFyeTsKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IEhhc2hN
YXA8U3RyaW5nLCBSZWY8VmFsdWU+PjsKKyAgICB1c2luZyBPcmRlclN0b3JhZ2UgPSBWZWN0b3I8
U3RyaW5nPjsKIAogcHVibGljOgotICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6aXRlcmF0b3IgaXRl
cmF0b3I7Ci0gICAgdHlwZWRlZiBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKKyAgICB1c2luZyBpdGVyYXRvciA9IERhdGFTdG9yYWdlOjppdGVyYXRvcjsKKyAgICB1
c2luZyBjb25zdF9pdGVyYXRvciA9IERhdGFTdG9yYWdlOjpjb25zdF9pdGVyYXRvcjsKIAotICAg
IE9iamVjdCogb3BlbkFjY2Vzc29ycygpOworICAgIFJlZlB0cjxPYmplY3Q+IGFzT2JqZWN0KCkg
ZmluYWw7CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IGZpbmFsOwogCiBwcm90ZWN0
ZWQ6CiAgICAgfk9iamVjdEJhc2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNPYmplY3QoUmVm
UHRyPE9iamVjdD4mIG91dHB1dCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBGSVhNRTogdXNlIHRlbXBs
YXRlcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGVkIHNldCooKSBtZXRob2RzLgog
ICAgIHZvaWQgc2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpOwogICAgIHZvaWQg
c2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIGludCk7CiAgICAgdm9pZCBzZXREb3VibGUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mJik7Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3Ry
aW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0QmFzZT4mJik7Ci0gICAgdm9pZCBzZXRBcnJheShjb25z
dCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJhc2U+JiYpOworICAgIHZvaWQgc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+JiYpOworICAgIHZvaWQgc2V0T2JqZWN0KGNv
bnN0IFN0cmluZyYgbmFtZSwgUmVmPE9iamVjdEJhc2U+JiYpOworICAgIHZvaWQgc2V0QXJyYXko
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QXJyYXlCYXNlPiYmKTsKIAogICAgIGl0ZXJhdG9yIGZp
bmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogdXNlIHRlbXBsYXRlcyB0byByZWR1
Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGVkIGdldCooKSBtZXRob2RzLgotICAgIGJvb2wgZ2V0
Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRw
dXQpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgICAgICBp
ZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICByZXR1cm4gdmFsdWUtPmFzRG91YmxlKG91dHB1dCk7Ci0gICAgfQotICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IGJvb2wgZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlm
ICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiB2YWx1ZS0+YXNJbnRlZ2VyKG91dHB1dCk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgVD4gT3B0aW9uYWw8VD4gZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICgh
Z2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgICAgICBUIHJlc3VsdDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNEb3VibGUocmVzdWx0
KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBib29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYgb3V0cHV0KSBjb25zdDsKLSAgICBib29sIGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5h
bWUsIFJlZlB0cjxPYmplY3Q+JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRBcnJheShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxBcnJheT4mKSBjb25zdDsKLSAgICBib29sIGdldFZhbHVlKGNvbnN0
IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYpIGNvbnN0OworICAgIE9wdGlvbmFsPGJvb2w+
IGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBPcHRpb25hbDxkb3Vi
bGU+IGdldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGlu
dD4gZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFN0cmluZyBnZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBSZWZQdHI8T2JqZWN0PiBnZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBSZWZQdHI8QXJyYXk+IGdldEFy
cmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPFZhbHVlPiBnZXRWYWx1
ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKIAotICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0
KSBjb25zdCBmaW5hbDsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVn
aW4oKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAgICAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAg
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KIAot
ICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgT2JqZWN0QmFzZSgpOwogCiBwcml2YXRlOgotICAgIERpY3Rpb25hcnkgbV9tYXA7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbV9vcmRlcjsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsKKyAgICBPcmRl
clN0b3JhZ2UgbV9vcmRlcjsKIH07CiAKIGNsYXNzIE9iamVjdCA6IHB1YmxpYyBPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxPYmplY3Q+IGNy
ZWF0ZSgpOwogCi0gICAgdXNpbmcgT2JqZWN0QmFzZTo6YXNPYmplY3Q7Ci0KICAgICAvLyBUaGlz
IGNsYXNzIGV4cGVjdGVkIG5vbi1jeWNsaWMgdmFsdWVzLCBhcyB3ZSBjYW5ub3Qgc2VyaWFsaXpl
IGN5Y2xlcyBpbiBKU09OLgogICAgIHVzaW5nIE9iamVjdEJhc2U6OnNldEJvb2xlYW47CiAgICAg
dXNpbmcgT2JqZWN0QmFzZTo6c2V0SW50ZWdlcjsKQEAgLTI3NCw3ICsyMzUsNiBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNl
OjpnZXRJbnRlZ2VyOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldERvdWJsZTsKLSAgICB1c2lu
ZyBPYmplY3RCYXNlOjpnZXROdW1iZXI7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0U3RyaW5n
OwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE9iamVjdDsKICAgICB1c2luZyBPYmplY3RCYXNl
OjpnZXRBcnJheTsKQEAgLTI5MCw0OSArMjUwLDQ5IEBAIHB1YmxpYzoKIAogCiBjbGFzcyBXVEZf
RVhQT1JUX1BSSVZBVEUgQXJyYXlCYXNlIDogcHVibGljIFZhbHVlIHsKK3ByaXZhdGU6CisgICAg
dXNpbmcgRGF0YVN0b3JhZ2UgPSBWZWN0b3I8UmVmPFZhbHVlPj47CisKIHB1YmxpYzoKLSAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPFZhbHVlPj46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OworICAgIHVzaW5nIGl0ZXJhdG9yID0gRGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5n
IGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbWFw
LnNpemUoKSk7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6
ZSgpOyB9CiAKLSAgICBSZWZQdHI8VmFsdWU+IGdldChzaXplX3QgaW5kZXgpIGNvbnN0OworICAg
IFJlZjxWYWx1ZT4gZ2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CiAKICAgICBzaXplX3QgbWVtb3J5
Q29zdCgpIGNvbnN0IGZpbmFsOwogCisgICAgUmVmUHRyPEFycmF5PiBhc0FycmF5KCkgZmluYWw7
CisKIHByb3RlY3RlZDoKICAgICB+QXJyYXlCYXNlKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFz
QXJyYXkoUmVmUHRyPEFycmF5PiYpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBwdXNoQm9vbGVhbihi
b29sKTsKICAgICB2b2lkIHB1c2hJbnRlZ2VyKGludCk7CiAgICAgdm9pZCBwdXNoRG91YmxlKGRv
dWJsZSk7CiAgICAgdm9pZCBwdXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHVz
aFZhbHVlKFJlZlB0cjxWYWx1ZT4mJik7Ci0gICAgdm9pZCBwdXNoT2JqZWN0KFJlZlB0cjxPYmpl
Y3RCYXNlPiYmKTsKLSAgICB2b2lkIHB1c2hBcnJheShSZWZQdHI8QXJyYXlCYXNlPiYmKTsKLQot
ICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwdXNoVmFsdWUoUmVmPFZhbHVlPiYmKTsKKyAgICB2b2lkIHB1c2hPYmplY3Qo
UmVmPE9iamVjdEJhc2U+JiYpOworICAgIHZvaWQgcHVzaEFycmF5KFJlZjxBcnJheUJhc2U+JiYp
OwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIHZvaWQgd3JpdGVK
U09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAg
ICBBcnJheUJhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8UmVmUHRyPFZhbHVlPj4gbV9t
YXA7CisgICAgRGF0YVN0b3JhZ2UgbV9tYXA7CiB9OwogCi1jbGFzcyBBcnJheSA6IHB1YmxpYyBB
cnJheUJhc2UgeworY2xhc3MgQXJyYXkgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxBcnJheT4gY3JlYXRlKCk7CiAK
LSAgICB1c2luZyBBcnJheUJhc2U6OmFzQXJyYXk7Ci0KICAgICAvLyBUaGlzIGNsYXNzIGV4cGVj
dGVkIG5vbi1jeWNsaWMgdmFsdWVzLCBhcyB3ZSBjYW5ub3Qgc2VyaWFsaXplIGN5Y2xlcyBpbiBK
U09OLgogICAgIHVzaW5nIEFycmF5QmFzZTo6cHVzaEJvb2xlYW47CiAgICAgdXNpbmcgQXJyYXlC
YXNlOjpwdXNoSW50ZWdlcjsKQEAgLTM0OCw3ICszMDgsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QXJyYXlCYXNlOjplbmQ7CiB9OwogCi0KIGlubGluZSBPYmplY3RCYXNlOjppdGVyYXRvciBPYmpl
Y3RCYXNlOjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gbV9tYXAuZmlu
ZChuYW1lKTsKQEAgLTM3OSwyMyArMzM4LDIwIEBAIGlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNl
dFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2V0
VmFsdWUobmFtZSwgVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBPYmpl
Y3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mJiB2YWx1
ZSkKK2lubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwg
UmVmPFZhbHVlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFw
LnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5h
cHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldE9iamVjdChjb25z
dCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQg
T2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPE9iamVjdEJhc2U+
JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUs
IFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1l
KTsKIH0KIAotaW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBu
YW1lLCBSZWZQdHI8QXJyYXlCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6
c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewot
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFwLnNldChuYW1lLCBXVEZNb3ZlKHZhbHVl
KSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CkBAIC00MjAs
MjYgKzM3NiwyMyBAQCBpbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICBtX21hcC5hcHBlbmQoVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwogfQog
Ci1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hWYWx1ZShSZWZQdHI8VmFsdWU+JiYgdmFsdWUp
CitpbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hWYWx1ZShSZWY8VmFsdWU+JiYgdmFsdWUpCiB7
Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwog
fQogCi1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+
JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hPYmplY3QoUmVmPE9iamVjdEJh
c2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBtX21hcC5hcHBlbmQoV1RG
TW92ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWZQ
dHI8QXJyYXlCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoQXJyYXko
UmVmPEFycmF5QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1fbWFw
LmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBBcnJheU9mIDogcHVibGljIEFycmF5QmFzZSB7CitjbGFzcyBBcnJheU9mIGZpbmFsIDogcHVi
bGljIEFycmF5QmFzZSB7CiBwcml2YXRlOgogICAgIEFycmF5T2YoKSB7IH0KIApAQCAtNDUwLDcg
KzQwMyw3IEBAIHByaXZhdGU6CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgdm9pZCBhZGRJdGVtKFJl
ZlB0cjxUPiYmIHZhbHVlKQorICAgIHZvaWQgYWRkSXRlbShSZWY8VD4mJiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGNhc3RlZEFycmF5KCkucHVzaFZhbHVlKFdURk1vdmUodmFsdWUpKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3Qv
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKaW5kZXggOGRj
NzZmYTJlNTllYTY3ZTAyMTczOGMzMTFhMzU3N2Y0ZDM2ZTY5MS4uZjg4Y2FkYTY2MGYzOWFkZWZh
MDA2ZDA5NWVjNTg3ZmIyOTM0NjIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmNwcApAQCAtNTQsMTQgKzU0LDE0IEBAIEFwcGxpY2F0aW9uTWFuaWZlc3Qg
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VNYW5pZmVzdChjb25zdCBTdHJpbmcmIHRl
eHQsCiB7CiAgICAgbV9tYW5pZmVzdFVSTCA9IG1hbmlmZXN0VVJMOwogCi0gICAgUmVmUHRyPEpT
T046OlZhbHVlPiBqc29uVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHRl
eHQsIGpzb25WYWx1ZSkpIHsKKyAgICBhdXRvIGpzb25WYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04odGV4dCk7CisgICAgaWYgKCFqc29uVmFsdWUpIHsKICAgICAgICAgbG9nRGV2ZWxvcGVy
V2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCB2YWxpZCBKU09OIGRhdGEuIl9zKTsKICAgICAg
ICAganNvblZhbHVlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtYW5pZmVzdDsKLSAgICBpZiAoIWpzb25WYWx1ZS0+YXNPYmplY3Qo
bWFuaWZlc3QpKSB7CisgICAgYXV0byBtYW5pZmVzdCA9IGpzb25WYWx1ZS0+YXNPYmplY3QoKTsK
KyAgICBpZiAoIW1hbmlmZXN0KSB7CiAgICAgICAgIGxvZ0RldmVsb3Blcldhcm5pbmcoIlRoZSBt
YW5pZmVzdCBpcyBub3QgYSBKU09OIHZhbHVlIG9mIHR5cGUgXCJvYmplY3RcIi4iX3MpOwogICAg
ICAgICBtYW5pZmVzdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgfQpAQCAtOTYsMTIg
Kzk2LDEyIEBAIHZvaWQgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6bG9nRGV2ZWxvcGVyV2Fy
bmluZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAKIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyOjpwYXJzZVN0YXJ0VVJMKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVS
TCYgZG9jdW1lbnRVUkwpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBp
ZiAoIW1hbmlmZXN0LmdldFZhbHVlKCJzdGFydF91cmwiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1
ZSA9IG1hbmlmZXN0LmdldFZhbHVlKCJzdGFydF91cmwiX3MpOworICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHJldHVybiBkb2N1bWVudFVSTDsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAg
ICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1Zh
bHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAg
ICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygic3RhcnRfdXJsIl9zKTsKICAgICAgICAg
cmV0dXJuIGRvY3VtZW50VVJMOwogICAgIH0KQEAgLTEyNywxMiArMTI3LDEyIEBAIFVSTCBBcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVN0YXJ0VVJMKGNvbnN0IEpTT046Ok9iamVjdCYg
bWFuaWZlc3QsIGNvbnN0CiAKIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXkgQXBwbGljYXRp
b25NYW5pZmVzdFBhcnNlcjo6cGFyc2VEaXNwbGF5KGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZl
c3QpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0
LmdldFZhbHVlKCJkaXNwbGF5Il9zLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0
LmdldFZhbHVlKCJkaXNwbGF5Il9zKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
QXBwbGljYXRpb25NYW5pZmVzdDo6RGlzcGxheTo6QnJvd3NlcjsKIAotICAgIFN0cmluZyBzdHJp
bmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBh
dXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1
ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygiZGlzcGxheSJfcyk7
CiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5OjpCcm93c2VyOwog
ICAgIH0KQEAgLTE5NSwxMiArMTk1LDEyIEBAIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
OjpwYXJzZVNjb3BlKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSCiB7CiAg
ICAgVVJMIGRlZmF1bHRTY29wZSB7IHN0YXJ0VVJMLCAiLi8iIH07CiAKLSAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInNjb3BlIiwgdmFs
dWUpKQorICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiKTsKKyAgICBp
ZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZGVmYXVsdFNjb3BlOwogCi0gICAgU3RyaW5nIHN0
cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAg
IGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1Zh
bHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5nKCJzY29wZSJfcyk7
CiAgICAgICAgIHJldHVybiBkZWZhdWx0U2NvcGU7CiAgICAgfQpAQCAtMjMxLDEyICsyMzEsMTIg
QEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6
T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIAogU3RyaW5nIEFwcGxpY2F0aW9uTWFuaWZlc3RQ
YXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyhjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSkpCisg
ICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZhbHVlKHByb3BlcnR5TmFtZSk7CisgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsK
LSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmlu
Z1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAg
ICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZyhwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCmluZGV4IDNiMjVkMDZiMTIz
YTFhNTFhMGEyYWNmYjRmNjU2ZjhkOTRhZGIzZmMuLjZhYjJmODc4YTNmOGNhOThlODJiMGU0MmU1
ZjBiYWFhMjI4YjFjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcApAQCAtNjIsMjIgKzYyLDIyIEBA
IHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBleHRyYWN0S2V5SURz
S2V5aWRzKGNvbnN0IFNoYXJlZEJ1ZmZlCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVm
ZmVyLnNpemUoKSkgfTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYg
KCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0Owot
ICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgYXV0byBvYmplY3QgPSB2YWx1
ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2lkc0FycmF5OwotICAgIGlmICghb2Jq
ZWN0LT5nZXRBcnJheSgia2lkcyIsIGtpZHNBcnJheSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBv
YmplY3QtPmdldEFycmF5KCJraWRzIl9zKTsKKyAgICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4ga2V5
SURzOwogICAgIGZvciAoYXV0byYgdmFsdWUgOiAqa2lkc0FycmF5KSB7Ci0gICAgICAgIFN0cmlu
ZyBrZXlJRDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBh
dXRvIGtleUlEID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5SUQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5SUREYXRhOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRleCBk
Y2UzNTllNzY4ZWY5YTEzYTZjNmRlMTZkMWY4ZDNjOGJiZmY3YTk3Li45NGQwM2Q4NWQ2ZGE5ZjRm
ODhmOGNkMTJlNGJmZmJkMzNiNGRjNTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIENvbW1hbmRM
aW5lQVBJSG9zdDo6ZGlzY29ubmVjdCgpCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzID0gbnVs
bHB0cjsKIH0KIAotdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlVG9JbnNwZWN0
LCBKU0M6OkpTVmFsdWUgaGludHNWYWx1ZSkKK3ZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNw
ZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBvYmplY3QsIEpTQzo6SlNWYWx1ZSBoaW50cykKIHsKICAgICBpZiAoIW1faW5zdHJ1bWVudGlu
Z0FnZW50cykKICAgICAgICAgcmV0dXJuOwpAQCAtODIsMTIgKzgyLDIwIEBAIHZvaWQgQ29tbWFu
ZExpbmVBUElIb3N0OjppbnNwZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6CiAgICAgaWYgKCFpbnNwZWN0b3JBZ2VudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaGludHNPYmplY3Q7Ci0gICAgaWYgKCFJbnNwZWN0
b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIGhpbnRzVmFsdWUpLT5h
c09iamVjdChoaW50c09iamVjdCkpCisgICAgYXV0byBvYmplY3RWYWx1ZSA9IEluc3BlY3Rvcjo6
dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICBpZiAo
IW9iamVjdFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlbW90ZU9iamVjdCA9
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
Pjo6cnVudGltZUNhc3QoSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZVRvSW5zcGVjdCkpOwotICAgIGluc3BlY3RvckFnZW50LT5pbnNwZWN0KFdU
Rk1vdmUocmVtb3RlT2JqZWN0KSwgV1RGTW92ZShoaW50c09iamVjdCkpOworICAgIGF1dG8gaGlu
dHNWYWx1ZSA9IEluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVj
dCwgaGludHMpOworICAgIGlmICghaGludHNWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byBoaW50c09iamVjdCA9IGhpbnRzVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFoaW50
c09iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZW1vdGVPYmplY3QgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVu
dGltZUNhc3Qob2JqZWN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaW5zcGVjdG9yQWdl
bnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmplY3QpLCBoaW50c09iamVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKIH0KIAogQ29tbWFuZExpbmVBUElIb3N0OjpFdmVudExpc3RlbmVyc1JlY29yZCBD
b21tYW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50TGlzdGVuZXJzKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFdmVudFRhcmdldCYgdGFyZ2V0KQpAQCAtMTM2LDggKzE0NCw3IEBA
IHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiAgICAgaWYg
KCFjb25zb2xlQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgY29uc29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKGlnbm9yZWQpOworICAgIGNvbnNv
bGVBZ2VudC0+Y2xlYXJNZXNzYWdlcygpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6
Y29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHAKaW5kZXggMDAx
NDhlMGZmNDk0NGFiZDA5MGI4MzZlYTkzMDVlY2Y3NDhjNmZhNC4uYjdmZjBlMTA0YTU1MDY5MTZj
Y2ZhOWQyMzBjOGIyYmJiMzYzZGYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3QuY3BwCkBAIC0xMDUsNyAr
MTA1LDcgQEAgRXhjZXB0aW9uT3I8SW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Q6OlJlc291
cmNlQ29udGVudD4gSW5zcGVjdG9yQXVkaXRSZXNvdXIKICAgICBpZiAoIWNhY2hlZFJlc291cmNl
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwgbWFrZVN0cmluZygi
VW5rbm93biBpZGVudGlmaWVyICJfcywgaWQpIH07CiAKLSAgICBFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgUmVzb3Vy
Y2VDb250ZW50IHJlc291cmNlQ29udGVudDsKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291
cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIGNhY2hlZFJlc291cmNlLT51cmwoKSwgJnJl
c291cmNlQ29udGVudC5kYXRhLCAmcmVzb3VyY2VDb250ZW50LmJhc2U2NEVuY29kZWQpOwogICAg
IGlmICghZXJyb3JTdHJpbmcuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmNwcAppbmRleCA1YzU3YjYwNTc0ZWNhNTcyMmQxNTQ5OTJhZmRiZGM3
NTVlNjMxOTlmLi5hNjFiOGVlZGEwNDE2Y2Y3ZjE1NGFhMDExYzg2MGNlOGZiMGIzMjViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcApAQCAtMzU2LDEz
ICszNTYsMTMgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OnJlY29yZEFjdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWMKICAgICB9CiAKICAgICBpZiAoIW1f
ZnJhbWVzKQotICAgICAgICBtX2ZyYW1lcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVjb3JkaW5nOjpGcmFtZT46OmNyZWF0ZSgpOworICAgICAgICBtX2ZyYW1lcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU+OjpjcmVhdGUoKTsKIAogICAg
IGlmICghbV9jdXJyZW50QWN0aW9ucykgewogICAgICAgICBtX2N1cnJlbnRBY3Rpb25zID0gSlNP
Tjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwogCi0gICAgICAgIGF1dG8gZnJhbWUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lOjpjcmVhdGUoKQotICAgICAg
ICAgICAgLnNldEFjdGlvbnMobV9jdXJyZW50QWN0aW9ucykKKyAgICAgICAgYXV0byBmcmFtZSA9
IFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldEFj
dGlvbnMoKm1fY3VycmVudEFjdGlvbnMpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAg
ICAgIG1fZnJhbWVzLT5hZGRJdGVtKFdURk1vdmUoZnJhbWUpKTsKQEAgLTM3NSw3ICszNzUsNyBA
QCB2b2lkIEluc3BlY3RvckNhbnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwg
c3RkOjppbml0aWFsaXplcl9saXN0PFJlYwogCiAgICAgbV9sYXN0UmVjb3JkZWRBY3Rpb24gPSBi
dWlsZEFjdGlvbihuYW1lLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBtX2J1ZmZlclVzZWQg
Kz0gbV9sYXN0UmVjb3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKLSAgICBtX2N1cnJlbnRBY3Rp
b25zLT5hZGRJdGVtKG1fbGFzdFJlY29yZGVkQWN0aW9uLmdldCgpKTsKKyAgICBtX2N1cnJlbnRB
Y3Rpb25zLT5hZGRJdGVtKCptX2xhc3RSZWNvcmRlZEFjdGlvbik7CiAKICAgICBhdXRvKiBjb250
ZXh0ID0gY2FudmFzQ29udGV4dCgpOwogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTM5OCw3ICsz
OTgsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhczo6ZmluYWxpemVGcmFtZSgpCiAgICAgYXBwZW5k
QWN0aW9uU25hcHNob3RJZk5lZWRlZCgpOwogCiAgICAgaWYgKG1fZnJhbWVzICYmIG1fZnJhbWVz
LT5sZW5ndGgoKSAmJiAhc3RkOjppc25hbihtX2N1cnJlbnRGcmFtZVN0YXJ0VGltZSkpIHsKLSAg
ICAgICAgYXV0byBjdXJyZW50RnJhbWUgPSBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZWNvcmRpbmc6OkZyYW1lKj4obV9mcmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAx
KS5nZXQoKSk7CisgICAgICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0KG1fZnJhbWVzLT5s
ZW5ndGgoKSAtIDEpKTsKICAgICAgICAgY3VycmVudEZyYW1lLT5zZXREdXJhdGlvbigoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBtX2N1cnJlbnRGcmFtZVN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkp
OwogCiAgICAgICAgIG1fY3VycmVudEZyYW1lU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bmFu
KCk7CkBAIC00MTIsNyArNDEyLDggQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6Om1hcmtDdXJyZW50
RnJhbWVJbmNvbXBsZXRlKCkKICAgICBpZiAoIW1fY3VycmVudEFjdGlvbnMgfHwgIW1fZnJhbWVz
IHx8ICFtX2ZyYW1lcy0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpY19j
YXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1lcy0+Z2V0
KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgpKS0+c2V0SW5jb21wbGV0ZSh0cnVlKTsKKyAg
ICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6UmVj
b3JkaW5nOjpGcmFtZT4obV9mcmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKSk7Cisg
ICAgY3VycmVudEZyYW1lLT5zZXRJbmNvbXBsZXRlKHRydWUpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhczo6c2V0QnVmZmVyTGltaXQobG9uZyBtZW1vcnlMaW1pdCkKQEAgLTQzOCwyOSArNDM5
LDI5IEBAIGJvb2wgSW5zcGVjdG9yQ2FudmFzOjpvdmVyRnJhbWVDb3VudCgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZnJhbWVDb3VudCAmJiBtX2ZyYW1lc0NhcHR1cmVkID49IG1fZnJhbWVDb3VudC52
YWx1ZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IElu
c3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNl
KQorUmVmPFByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9i
amVjdEZvckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpCiB7Ci0gICAgdXNpbmcgQ29udGV4
dFR5cGVUeXBlID0gT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0
VHlwZT47CisgICAgdXNpbmcgQ29udGV4dFR5cGVUeXBlID0gT3B0aW9uYWw8UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU+OwogICAgIGF1dG8gY29udGV4dFR5cGUgPSBXVEY6OnN3aXRjaE9u
KG1fY29udGV4dCwKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIpIC0+IENvbnRleHRUeXBlVHlwZSB7CiAgICAg
ICAgICAgICBhdXRvJiBjb250ZXh0ID0gY29udGV4dFdyYXBwZXIuZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250ZXh0KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2Fu
dmFzMkQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRU
eXBlOjpDYW52YXMyRDsKICAgICAgICAgICAgIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkJpdG1hcFJlbmRlcmVyOwog
I2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdF
QkdMMikKICAgICAgICAgICAgIGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6V2ViR0wyOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR0wyOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICB9LAogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgICAgIFtdIChz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURldmljZT4pIHsKLSAgICAgICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHUFU7CisgICAg
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdQVTsKICAg
ICAgICAgfSwKICNlbmRpZgogICAgICAgICBbXSAoTW9ub3N0YXRlKSB7CkBAIC00NzAsMTAgKzQ3
MSwxMCBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3Rv
ckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgICk7CiAgICAgaWYgKCFjb250ZXh0
VHlwZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY29udGV4dFR5
cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsK
KyAgICAgICAgY29udGV4dFR5cGUgPSBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2Fu
dmFzMkQ7CiAgICAgfQogCi0gICAgYXV0byBjYW52YXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNhbnZhczo6Y3JlYXRlKCkKKyAgICBhdXRvIGNhbnZhcyA9IFByb3RvY29sOjpDYW52
YXM6OkNhbnZhczo6Y3JlYXRlKCkKICAgICAgICAgLnNldENhbnZhc0lkKG1faWRlbnRpZmllcikK
ICAgICAgICAgLnNldENvbnRleHRUeXBlKGNvbnRleHRUeXBlLnZhbHVlKCkpCiAgICAgICAgIC5y
ZWxlYXNlKCk7CkBAIC00ODYsMTIgKzQ4NywxMiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgog
ICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3ODI4Mj4gV2ViIEluc3Bl
Y3Rvcjogc2VuZCBhIERPTSBub2RlIHdpdGggZWFjaCBDYW52YXMgcGF5bG9hZCBhbmQgZWxpbWlu
YXRlIENhbnZhcy5yZXF1ZXN0Tm9kZQogICAgIH0KIAotICAgIHVzaW5nIENvbnRleHRBdHRyaWJ1
dGVzVHlwZSA9IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRy
aWJ1dGVzPjsKKyAgICB1c2luZyBDb250ZXh0QXR0cmlidXRlc1R5cGUgPSBSZWZQdHI8UHJvdG9j
b2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+OwogICAgIGF1dG8gY29udGV4dEF0dHJpYnV0
ZXMgPSBXVEY6OnN3aXRjaE9uKG1fY29udGV4dCwKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIpIC0+IENvbnRl
eHRBdHRyaWJ1dGVzVHlwZSB7CiAgICAgICAgICAgICBhdXRvJiBjb250ZXh0ID0gY29udGV4dFdy
YXBwZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoaXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0Pihjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQ
YXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6
Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9
IFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVz
UGF5bG9hZC0+c2V0QWxwaGEoZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihj
b250ZXh0KS5oYXNBbHBoYSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dEF0dHJp
YnV0ZXNQYXlsb2FkOwpAQCAtNTAwLDcgKzUwMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhi
CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KGNvbnRleHQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIGF0
dHJpYnV0ZXMgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS5n
ZXRDb250ZXh0QXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udGV4
dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0
QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0
cmlidXRlc1BheWxvYWQgPSBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0QWxwaGEoYXR0cmlidXRlcy0+YWxw
aGEpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQtPnNldERl
cHRoKGF0dHJpYnV0ZXMtPmRlcHRoKTsKQEAgLTUzMCw3ICs1MzEsNyBAQCBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RG
b3JDYW52YXMoYgogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHUFVEZXZp
Y2U+IGRldmljZVdyYXBwZXIpIC0+IENvbnRleHRBdHRyaWJ1dGVzVHlwZSB7CiAgICAgICAgICAg
ICBhdXRvJiBkZXZpY2UgPSBkZXZpY2VXcmFwcGVyLmdldCgpOwogICAgICAgICAgICAgaWYgKGNv
bnN0IGF1dG8mIG9wdGlvbnMgPSBkZXZpY2UuYWRhcHRlcigpLm9wdGlvbnMoKSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAg
ICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpDYW52YXM6OkNvbnRl
eHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwog
ICAgICAgICAgICAgICAgIGlmIChjb25zdCBhdXRvJiBwb3dlclByZWZlcmVuY2UgPSBvcHRpb25z
LT5wb3dlclByZWZlcmVuY2UpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwb3dlclBy
ZWZlcmVuY2UudmFsdWUoKSkgewpAQCAtNTU0LDcgKzU1NSw3IEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNh
bnZhcyhiCiAgICAgICAgIH0KICAgICApOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcykKLSAg
ICAgICAgY2FudmFzLT5zZXRDb250ZXh0QXR0cmlidXRlcyhXVEZNb3ZlKGNvbnRleHRBdHRyaWJ1
dGVzKSk7CisgICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJpYnV0ZXMoY29udGV4dEF0dHJp
YnV0ZXMucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE4MDgzMz4gV2ViIEluc3BlY3Rvcjogc3VwcG9ydCBPZmZzY3JlZW5DYW52YXMgZm9y
IENhbnZhcyByZWxhdGVkIG9wZXJhdGlvbnMKIApAQCAtNTcxLDcgKzU3Miw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9i
amVjdEZvckNhbnZhcyhiCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VP
YmplY3RGb3JSZWNvcmRpbmcoKQorUmVmPFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4g
SW5zcGVjdG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCkKIHsKICAgICBBU1NF
UlQoIW1fY3VycmVudEFjdGlvbnMpOwogICAgIEFTU0VSVCghbV9sYXN0UmVjb3JkZWRBY3Rpb24p
OwpAQCAtNTgxLDI2ICs1ODIsMjYgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGlu
Zzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmplY3RGb3IKICAgICBBU1NF
UlQoY29udGV4dCk7CiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+
IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2Vi
R1BVRGV2aWNlCiAKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGUgdHlw
ZTsKKyAgICBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlIHR5cGU7CiAgICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOworICAgICAgICB0eXBlID0gUHJv
dG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzMkQ7CiAgICAgZWxzZSBpZiAoaXM8SW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzQml0bWFwUmVuZGVyZXI7CisgICAg
ICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNCaXRtYXBSZW5kZXJl
cjsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgZWxzZSBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6VHlwZTo6Q2FudmFzV2ViR0w7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3Jk
aW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAg
ZWxzZSBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5
cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsK
KyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsK
ICNlbmRpZgogICAgIGVsc2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzMkQ7
CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKICAg
ICB9CiAKLSAgICBhdXRvIHJlY29yZGluZyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGlu
Zzo6UmVjb3JkaW5nOjpjcmVhdGUoKQotICAgICAgICAuc2V0VmVyc2lvbihJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZWNvcmRpbmc6OlZFUlNJT04pCisgICAgYXV0byByZWNvcmRpbmcgPSBQcm90b2Nv
bDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRWZXJzaW9uKFBy
b3RvY29sOjpSZWNvcmRpbmc6OlZFUlNJT04pCiAgICAgICAgIC5zZXRUeXBlKHR5cGUpCiAgICAg
ICAgIC5zZXRJbml0aWFsU3RhdGUobV9pbml0aWFsU3RhdGUucmVsZWFzZU5vbk51bGwoKSkKICAg
ICAgICAgLnNldERhdGEobV9zZXJpYWxpemVkRHVwbGljYXRlRGF0YS5yZWxlYXNlTm9uTnVsbCgp
KQpAQCAtNjE0LDcgKzYxNSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6
OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0Rm9yCiAgICAgcmV0dXJu
IHJlY29yZGluZzsKIH0KIAotU3RyaW5nIEluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVu
dEFzRGF0YVVSTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitTdHJpbmcgSW5zcGVjdG9yQ2Fu
dmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcpCiB7CiAgICAgYXV0byogbm9kZSA9IGNhbnZhc0VsZW1lbnQoKTsKICAgICBpZiAo
IW5vZGUpIHsKQEAgLTY1MSw3ICs2NTIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhczo6YXBwZW5k
QWN0aW9uU25hcHNob3RJZk5lZWRlZCgpCiAgICAgaWYgKG1fY29udGVudENoYW5nZWQpIHsKICAg
ICAgICAgbV9idWZmZXJVc2VkIC09IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7
CiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICAgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIG1fbGFzdFJlY29yZGVkQWN0aW9uLT5hZGRJdGVtKGlu
ZGV4Rm9yRGF0YShnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGlnbm9yZWQpKSk7CiAKICAgICAg
ICAgbV9idWZmZXJVc2VkICs9IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7CkBA
IC03NzUsNyArNzc2LDcgQEAgaW50IEluc3BlY3RvckNhbnZhczo6aW5kZXhGb3JEYXRhKER1cGxp
Y2F0ZURhdGFWYXJpYW50IGRhdGEpCiAKICAgICBpZiAoaXRlbSkgewogICAgICAgICBtX2J1ZmZl
clVzZWQgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgICAgICBtX3NlcmlhbGl6ZWREdXBsaWNh
dGVEYXRhLT5hZGRJdGVtKFdURk1vdmUoaXRlbSkpOworICAgICAgICBtX3NlcmlhbGl6ZWREdXBs
aWNhdGVEYXRhLT5hZGRJdGVtKGl0ZW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgbV9p
bmRleGVkRHVwbGljYXRlRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgIGluZGV4ID0gbV9pbmRl
eGVkRHVwbGljYXRlRGF0YS5zaXplKCkgLSAxOwpAQCAtODEwLDEzICs4MTEsMTMgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gYnVp
bGRBcnJheUZvclZlY3RvcigKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWls
ZEluaXRpYWxTdGF0ZSgpCitSZWY8UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJ
bnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0YXRlKCkKIHsKICAgICBhdXRvKiBjb250ZXh0
ID0gY2FudmFzQ29udGV4dCgpOwogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBw
b3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIGF1dG8gaW5pdGlh
bFN0YXRlUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0
YXRlOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0g
UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAK
ICAgICBhdXRvIGF0dHJpYnV0ZXNQYXlsb2FkID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBhdHRyaWJ1dGVzUGF5bG9hZC0+c2V0SW50ZWdlcigid2lkdGgiX3MsIGNvbnRleHQtPmNhbnZh
c0Jhc2UoKS53aWR0aCgpKTsKQEAgLTkwOCw3ICs5MDksNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0
aWFsUwogICAgIGlmIChwYXJhbWV0ZXJzUGF5bG9hZC0+bGVuZ3RoKCkpCiAgICAgICAgIGluaXRp
YWxTdGF0ZVBheWxvYWQtPnNldFBhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzUGF5bG9hZCkp
OwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBpbml0aWFsU3RhdGVQYXlsb2FkLT5zZXRDb250ZW50KGdldENhbnZhc0Nv
bnRlbnRBc0RhdGFVUkwoaWdub3JlZCkpOwogCiAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZVBheWxv
YWQ7CkBAIC05NDYsNyArOTQ3LDcgQEAgUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJ
bnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAg
ICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5kLnZhbHVlT3IoMSkpOwogICAgICAgICAgICAg
ICAgIGFycmF5LT5hZGRJdGVtKHZhbHVlLmUudmFsdWVPcigwKSk7CiAgICAgICAgICAgICAgICAg
YXJyYXktPmFkZEl0ZW0odmFsdWUuZi52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICBhZGRQ
YXJhbWV0ZXIoYXJyYXkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6RE9NTWF0cml4KTsK
KyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoV1RGTW92ZShhcnJheSksIFJlY29yZGluZ1N3
aXp6bGVUeXBlczo6RE9NTWF0cml4KTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbJl0g
KGNvbnN0IEVsZW1lbnQqIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CkBA
IC0xMTA2LDE2ICsxMTA3LDE2IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5z
cGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAgICAgICAgICAg
ICAgICAgYXV0byBkZWR1cGxpY2F0ZWQgPSB2YWx1ZS5tYXAoWyZdIChjb25zdCBTdHJpbmcmIGl0
ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Rm9yRGF0YShpdGVtKTsKICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJh
eUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OlN0
cmluZyk7CisgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3Io
ZGVkdXBsaWNhdGVkKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpTdHJpbmcpOwogICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpIHsgYWRk
UGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OkFycmF5KTsgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLCBSZWNv
cmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgVmVj
dG9yPHVpbnQzMl90PiYgdmFsdWUpIHsKICAgICAgICAgICAgICAgICBhdXRvIG1hcHBlZCA9IHZh
bHVlLm1hcChbJl0gKHVpbnQzMl90IGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4oaXRlbSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IobWFwcGVkKS5wdHIoKSwg
UmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7CisgICAgICAgICAgICAgICAgYWRkUGFyYW1l
dGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IobWFwcGVkKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpB
cnJheSk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8aW50
MzJfdD4mIHZhbHVlKSB7IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKS5w
dHIoKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7IH0sCisgICAgICAgICAgICBbJl0g
KGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlG
b3JWZWN0b3IodmFsdWUpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsgfSwKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgICAgICAgICBbJl0gKGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkZsb2F0MzJMaXN0OjpWYXJpYW50VHlwZSYgdmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBXVEY6OnZpc2l0KHBhcnNlUGFyYW1ldGVyLCB2YWx1ZSk7CkBAIC0xMTU5LDcgKzExNjAsNyBA
QCBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRB
Y3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLAogUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+
PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudChjb25zdCBDYW52
YXNHcmFkaWVudCYgY2FudmFzR3JhZGllbnQpCiB7CiAgICAgQVNDSUlMaXRlcmFsIHR5cGUgPSAi
bGluZWFyLWdyYWRpZW50Il9zOwotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8
ZmxvYXQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpBcnJheU9mPGRv
dWJsZT46OmNyZWF0ZSgpOwogICAgIFdURjo6c3dpdGNoT24oY2FudmFzR3JhZGllbnQuZ3JhZGll
bnQoKS5kYXRhKCksCiAgICAgICAgIFsmXSAoY29uc3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRh
dGEpIHsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAppbmRleCA3OGNiNmE4
YTNiOGFiNzgwZTk1ZmIzZmFlZDNhYmM1OTRkMTQ2NTk4Li5iMjdiYzhkNDkyMzkxMTdiZWU1MjVk
NWZlNmFjMjZlMmQ2MTZiNWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhcy5oCkBAIC01OCw4ICs1OCw2IEBAIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNz
IFR5cGVkT01DU1NJbWFnZVZhbHVlOwogI2VuZGlmCiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bnNwZWN0b3JDYW52YXM+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEluc3BlY3RvckNhbnZh
cz4gY3JlYXRlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKQEAgLTEwNyw3ICsxMDUsNyBAQCBw
dWJsaWM6CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBidWls
ZE9iamVjdEZvckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpOwogICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gcmVsZWFzZU9iamVjdEZvclJlY29y
ZGluZygpOwogCi0gICAgU3RyaW5nIGdldENhbnZhc0NvbnRlbnRBc0RhdGFVUkwoRXJyb3JTdHJp
bmcmKTsKKyAgICBTdHJpbmcgZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYpOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMmU5MGMxMTk0OGE3ZTBlYjYxMDVhODNlMmMw
OGNiNGY4MmE4ZjJmZS4uNjMwZGY3MTc5MGM2M2I2ZTc1ODczNDUxYTE3NDBmODZmNjdlMDJkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cApAQCAtNDc4LDEwICs0NzgsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5k
SW5pdGlhbGl6ZWQoKQogewogICAgIGlmIChtX3BhdXNlQWZ0ZXJJbml0aWFsaXphdGlvbikgewog
ICAgICAgICBtX3BhdXNlQWZ0ZXJJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAo
YXV0byogZGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+ZW5hYmxlZFBhZ2VE
ZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAg
ICAgICAgICBkZWJ1Z2dlckFnZW50LT5wYXVzZShpZ25vcmVkKTsKLSAgICAgICAgfQorICAgICAg
ICBpZiAoYXV0byogZGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+ZW5hYmxl
ZFBhZ2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgICAgICBkZWJ1Z2dlckFnZW50LT5wYXVzZSgp
OwogICAgIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCA1MGUwYzgz
YmM5MjA2NjJlNzY4MDI1NTc3NTJiMzZmMjM3NWIwMzljLi5hNmJiODc3YTIyYTBhYTg2YmY4OTk4
MzlhNzVmNWFmZjZlZjhkZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAtNjA3LDcgKzYwNyw3IEBAIGJvb2wgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0OjpkaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpCiAgICAgcmV0dXJu
IG1fY2xpZW50ICYmIG1fY2xpZW50LT5kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZD4g
dmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZShjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1
ZSkKK3N0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2Fk
PiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsK
ICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBl
OjpBcnJheToKQEAgLTYxNywyNCArNjE3LDE2IEBAIHN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBl
OjpCb29sZWFuOgotICAgICAgICBib29sIGJvb2xWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzQm9v
bGVhbihib29sVmFsdWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6
OlZhbHVlUGF5bG9hZChib29sVmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNCb29sZWFuKCkudmFsdWVPcihmYWxzZSkp
OwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlOgotICAgICAgICBkb3VibGUg
ZG91YmxlVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGRvdWJsZVZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQodmFsdWUtPmFzRG91YmxlKCkudmFsdWVPcigwKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVl
OjpUeXBlOjpJbnRlZ2VyOgotICAgICAgICBsb25nIGxvbmcgaW50VmFsdWU7Ci0gICAgICAgIHZh
bHVlLT5hc0ludGVnZXIoaW50VmFsdWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQ6OlZhbHVlUGF5bG9hZChpbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmFs
dWUtPmFzSW50ZWdlcigpLnZhbHVlT3IoMCkpKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5
cGU6OlN0cmluZzoKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICB2YWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQ6OlZhbHVlUGF5bG9hZChzdHJpbmdWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHZhbHVlLT5hc1N0cmluZygpKTsKICAgICB9
CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTY0NiwxNyArNjM4LDE3IEBAIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBl
dmVudE5hbWUsIGNvbnN0IFN0CiAgICAgaWYgKCFzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZFZhbHVl
OwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihwYXlsb2FkU3RyaW5nLCBwYXlsb2Fk
VmFsdWUpKQorICAgIGF1dG8gcGF5bG9hZFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihw
YXlsb2FkU3RyaW5nKTsKKyAgICBpZiAoIXBheWxvYWRWYWx1ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGF5bG9hZE9iamVjdDsKLSAgICBpZiAoIXBheWxv
YWRWYWx1ZS0+YXNPYmplY3QocGF5bG9hZE9iamVjdCkpCisgICAgYXV0byBwYXlsb2FkT2JqZWN0
ID0gcGF5bG9hZFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcGF5bG9hZE9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlv
bmFyeSBkaWN0aW9uYXJ5OwotICAgIGZvciAoY29uc3QgYXV0byYgW2tleSwgdmFsdWVdIDogKnBh
eWxvYWRPYmplY3QpIHsKLSAgICAgICAgaWYgKGF1dG8gdmFsdWVQYXlsb2FkID0gdmFsdWVQYXls
b2FkRnJvbUpTT05WYWx1ZSh2YWx1ZSkpCisgICAgZm9yIChhdXRvJiBba2V5LCB2YWx1ZV0gOiAq
cGF5bG9hZE9iamVjdCkgeworICAgICAgICBpZiAoYXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBh
eWxvYWRGcm9tSlNPTlZhbHVlKFdURk1vdmUodmFsdWUpKSkKICAgICAgICAgICAgIGRpY3Rpb25h
cnkuc2V0KGtleSwgV1RGTW92ZSh2YWx1ZVBheWxvYWQudmFsdWUoKSkpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4
IGFlMGZlZjVkZmUzOWI5YTUxNmU1NTEwMzA3ZWFiY2I2NjBkMWFiY2IuLjk3NjY5ZWZiNjg3ZDMz
NTU0ZDUyYmM2OGUxOGM2ODQxYWViNGNmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIFN0
eWxlU2hlZXRIYW5kbGVyOjpvYnNlcnZlQ29tbWVudCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KQogICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2subGFzdCgpLT5zdHls
ZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoQ1NTUHJvcGVydHlTb3VyY2VEYXRhKHBy
b3BlcnR5RGF0YS5uYW1lLCBwcm9wZXJ0eURhdGEudmFsdWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBT
b3VyY2VSYW5nZShzdGFydE9mZnNldCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZE9mZnNl
dCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChj
b25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBsaW5lRW5kaW5n
cywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikKK3N0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkNT
Uzo6U291cmNlUmFuZ2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoY29uc3QgU291cmNlUmFuZ2Um
IHJhbmdlLCBjb25zdCBWZWN0b3I8c2l6ZV90PiYgbGluZUVuZGluZ3MsIGludCogZW5kaW5nTGlu
ZSA9IG51bGxwdHIpCiB7CiAgICAgaWYgKGxpbmVFbmRpbmdzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RhdGljIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNv
bnMKICAgICBpZiAoZW5kaW5nTGluZSkKICAgICAgICAgKmVuZGluZ0xpbmUgPSBlbmQubV9saW5l
Lnplcm9CYXNlZEludCgpOwogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
U291cmNlUmFuZ2U6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlNvdXJjZVJh
bmdlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U3RhcnRMaW5lKHN0YXJ0Lm1fbGluZS56ZXJvQmFz
ZWRJbnQoKSkKICAgICAgICAgLnNldFN0YXJ0Q29sdW1uKHN0YXJ0Lm1fY29sdW1uLnplcm9CYXNl
ZEludCgpKQogICAgICAgICAuc2V0RW5kTGluZShlbmQubV9saW5lLnplcm9CYXNlZEludCgpKQpA
QCAtNDI4LDM0ICs0MjgsMzQgQEAgc3RhdGljIFJlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxl
TGlzdChDU1NSdWxlKiBydWxlKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxk
QXJyYXlGb3JHcm91cGluZ3MoQ1NTUnVsZSYgcnVsZSkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoQ1NTUnVs
ZSYgcnVsZSkKIHsKLSAgICBhdXRvIGdyb3VwaW5nc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGdy
b3VwaW5nc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPjo6
Y3JlYXRlKCk7CiAKICAgICBhdXRvKiBwYXJlbnRSdWxlID0gJnJ1bGU7CiAgICAgd2hpbGUgKHBh
cmVudFJ1bGUpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3Jv
dXBpbmc+IHJ1bGVHcm91cGluZ1BheWxvYWQ7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NT
OjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9hZDsKIAogICAgICAgICBpZiAoaXM8Q1NTTWVk
aWFSdWxlPihwYXJlbnRSdWxlKSkgewogICAgICAgICAgICAgYXV0byogbWVkaWEgPSBkb3duY2Fz
dDxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpLT5tZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1l
ZGlhICYmIG1lZGlhLT5sZW5ndGgoKSAmJiBtZWRpYS0+bWVkaWFUZXh0KCkgIT0gImFsbCIpIHsK
LSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQ
YXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAgICAg
ICAgICAgIC5zZXRUZXh0KG1lZGlhLT5tZWRpYVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAg
LnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFS
dWxlKQorICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGlu
Zzo6VHlwZTo6TWVkaWFSdWxlKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0ltcG9ydFJ1bGU+KHBhcmVudFJ1
bGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBtZWRpYSA9IGRvd25jYXN0PENTU0ltcG9ydFJ1bGU+
KHBhcmVudFJ1bGUpLT5tZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1lZGlhLmxlbmd0aCgpICYm
IG1lZGlhLm1lZGlhVGV4dCgpICE9ICJhbGwiKSB7Ci0gICAgICAgICAgICAgICAgcnVsZUdyb3Vw
aW5nUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgp
CisgICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdy
b3VwaW5nOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0VGV4dChtZWRpYS5tZWRp
YVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFJbXBvcnRSdWxlKQorICAgICAgICAgICAgICAg
ICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFJbXBvcnRS
dWxlKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzPENTU1N1cHBvcnRzUnVsZT4ocGFyZW50UnVsZSkpIHsKLSAgICAg
ICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdy
b3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IFByb3Rv
Y29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRUZXh0KGRv
d25jYXN0PENTU1N1cHBvcnRzUnVsZT4ocGFyZW50UnVsZSktPmNvbmRpdGlvblRleHQoKSkKLSAg
ICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5n
OjpUeXBlOjpTdXBwb3J0c1J1bGUpCisgICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6
OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRzUnVsZSkKICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICB9CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlG
b3JHcm91cAogICAgICAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkLT5zZXRTb3Vy
Y2VVUkwoc291cmNlVVJMKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ3JvdXBpbmdz
UGF5bG9hZC0+YWRkSXRlbShXVEZNb3ZlKHJ1bGVHcm91cGluZ1BheWxvYWQpKTsKKyAgICAgICAg
ICAgIGdyb3VwaW5nc1BheWxvYWQtPmFkZEl0ZW0ocnVsZUdyb3VwaW5nUGF5bG9hZC5yZWxlYXNl
Tm9uTnVsbCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwYXJlbnRSdWxlLT5wYXJlbnRS
dWxlKCkpIHsKQEAgLTQ4Miw5ICs0ODIsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cAogICAg
ICAgICB3aGlsZSAoc3R5bGVTaGVldCkgewogICAgICAgICAgICAgYXV0byogbWVkaWEgPSBzdHls
ZVNoZWV0LT5tZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1lZGlhICYmIG1lZGlhLT5sZW5ndGgo
KSAmJiBtZWRpYS0+bWVkaWFUZXh0KCkgIT0gImFsbCIpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IHNoZWV0R3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGlu
Zzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIHNoZWV0R3JvdXBpbmdQYXlsb2FkID0g
UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5z
ZXRUZXh0KG1lZGlhLT5tZWRpYVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUo
aXM8SFRNTFN0eWxlRWxlbWVudD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFTdHlsZU5vZGU6IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhTGlua05vZGUpCisgICAgICAg
ICAgICAgICAgICAgIC5zZXRUeXBlKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KHN0eWxlU2hlZXQtPm93
bmVyTm9kZSgpKSA/IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVN0eWxlTm9k
ZTogUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhTGlua05vZGUpCiAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNl
VVJMOwpAQCAtNTIzLDI4ICs1MjMsMzAgQEAgSW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxl
KGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBSZWY8Q1NTU3R5bGVEZWNsYXIKIAogSW5z
cGVjdG9yU3R5bGU6On5JbnNwZWN0b3JTdHlsZSgpID0gZGVmYXVsdDsKIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVj
dEZvclN0eWxlKCkgY29uc3QKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAogewotICAgIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7
Ci0gICAgaWYgKCFtX3N0eWxlSWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFN0eWxl
SWQobV9zdHlsZUlkLmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlSWQ+KCkpOworICAgIFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0g
c3R5bGVXaXRoUHJvcGVydGllcygpOworICAgIGlmIChhdXRvIHN0eWxlSWQgPSBtX3N0eWxlSWQu
YXNQcm90b2NvbFZhbHVlPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQ+KCkpCisgICAgICAgIHJl
c3VsdC0+c2V0U3R5bGVJZChzdHlsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmVzdWx0
LT5zZXRXaWR0aChtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKICAgICByZXN1
bHQtPnNldEhlaWdodChtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CiAKICAg
ICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBleHRyYWN0U291cmNlRGF0
YSgpOwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxk
U291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHls
ZVNoZWV0LT5saW5lRW5kaW5ncygpKSk7CisgICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAg
aWYgKGF1dG8gcmFuZ2UgPSBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVC
b2R5UmFuZ2UsIG1fcGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKSkpCisgICAgICAgICAg
ICByZXN1bHQtPnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxk
QXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1JlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+IEluc3BlY3RvclN0eWxlOjpidWlsZEFy
cmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpD
U1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOwogICAgIGZvciAoYXV0byYg
cHJvcGVydHkgOiBjb2xsZWN0UHJvcGVydGllcyh0cnVlKSkgewogICAgICAgICBjb25zdCBDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhOwot
ICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRl
ZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
TmFtZShwcm9wZXJ0eUVudHJ5Lm5hbWUpCiAgICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlF
bnRyeS52YWx1ZSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC02MjMsMTMgKzYyNSwxMyBA
QCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4gSW5zcGVjdG9yU3R5bGU6OmNvbGxlY3RQ
cm9wZXJ0aWVzKGJvb2wgaW5jbHVkZUFsbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVX
aXRoUHJvcGVydGllcygpIGNvbnN0CitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBhdXRvIHByb3Bl
cnRpZXMgPSBjb2xsZWN0UHJvcGVydGllcyhmYWxzZSk7CiAKLSAgICBhdXRvIHByb3BlcnRpZXNP
YmplY3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVy
dHk+OjpjcmVhdGUoKTsKLSAgICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKTsKLSAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+
PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisgICAgYXV0byBwcm9wZXJ0
aWVzT2JqZWN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gc2hvcnRoYW5kRW50cmllcyA9IEFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3Ry
aW5nIHByZXZpb3VzUHJpb3JpdHk7CiAgICAgU3RyaW5nIHByZXZpb3VzU3RhdHVzOwpAQCAtNjQx
LDkgKzY0Myw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAgICAgICAgIGNvbnN0IENTU1By
b3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9IGl0LT5zb3VyY2VEYXRhOwogICAgICAg
ICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9wZXJ0eUVudHJ5Lm5hbWU7CiAKLSAgICAgICAgYXV0
byBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5U3RhdHVzOjpEaXNhYmxlZCA6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJv
cGVydHlTdGF0dXM6OkFjdGl2ZTsKKyAgICAgICAgYXV0byBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQg
PyBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlOwogCi0gICAgICAgIGF1dG8gcHJvcGVydHkg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpjcmVhdGUoKQorICAgICAg
ICBhdXRvIHByb3BlcnR5ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAuc2V0TmFtZShuYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpCiAgICAg
ICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSkKICAgICAgICAgICAgIC5yZWxl
YXNlKCk7CkBAIC02NjksNyArNjcxLDggQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAgICAg
ICAgICAgIFNvdXJjZVJhbmdlIGFic29sdXRlUHJvcGVydHlSYW5nZSA9IHByb3BlcnR5RW50cnku
cmFuZ2U7CiAgICAgICAgICAgICBhYnNvbHV0ZVByb3BlcnR5UmFuZ2Uuc3RhcnQgKz0gcnVsZUJv
ZHlSYW5nZVN0YXJ0OwogICAgICAgICAgICAgYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLmVuZCArPSBy
dWxlQm9keVJhbmdlU3RhcnQ7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UoYnVpbGRT
b3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdzKSk7Cisg
ICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoYWJzb2x1
dGVQcm9wZXJ0eVJhbmdlLCBsaW5lRW5kaW5ncykpCisgICAgICAgICAgICAgICAgcHJvcGVydHkt
PnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFpdC0+ZGlzYWJsZWQpIHsKQEAgLTY4MywzMCArNjg2LDM1IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVy
dGllcygpIGNvCiAKICAgICAgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgcHJvcGVydHkgbmFt
ZXMgdG8gdHJlYXQgbm9uLXByZWZpeGVkIGFuZCB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgbmFt
ZXMgdGhlIHNhbWUgKG9wYWNpdHkgdnMuIC13ZWJraXQtb3BhY2l0eSkuCiAgICAgICAgICAgICAg
ICAgU3RyaW5nIGNhbm9uaWNhbFByb3BlcnR5TmFtZSA9IHByb3BlcnR5SWQgPyBnZXRQcm9wZXJ0
eU5hbWVTdHJpbmcocHJvcGVydHlJZCkgOiBuYW1lOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+Ojpp
dGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5m
aW5kKGNhbm9uaWNhbFByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+OjppdGVyYXRvciBhY3RpdmVJ
dCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFBy
b3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFt
ZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHlFbnRyeS5wYXJzZWRPaykgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzUHJpb3JpdHkgPSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpQcmlvcml0eSwgcHJldmlvdXNQcmlvcml0eSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3NTdGF0dXMgPSBhY3RpdmVJdC0+
dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpT
dGF0dXMsIHByZXZpb3VzU3RhdHVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzU3RhdHVzICYmIHByZXZpb3VzU3RhdHVzICE9ICJpbmFjdGl2ZSIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgfHwgIXN1Y2Nlc3NQ
cmlvcml0eSkgLy8gUHJpb3JpdHkgbm90IHNldCA9PSAibm90IGltcG9ydGFudCIuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJvcGVydHkgZm9s
bG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG5l
d1ByaW9yaXR5ID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHk6OnByaW9yaXR5S2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5l
d1ByaW9yaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUHJpb3JpdHkg
PSBuZXdQcmlvcml0eTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBuZXdTdGF0dXMg
PSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6
c3RhdHVzS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5ld1N0YXR1cykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU3RhdHVzID0gbmV3U3RhdHVzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXR1cyAhPSBQcm90b2Nv
bDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVy
dHlTdGF0dXM6OkluYWN0aXZlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgfHwgISFuZXdQcmlvcml0eSkgLy8gUHJpb3JpdHkg
bm90IHNldCA9PSAibm90IGltcG9ydGFudCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpBY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElu
YWN0aXZhdGUgYSBub24taW1wb3J0YW50IHByb3BlcnR5IGZvbGxvd2luZyB0aGUgc2FtZS1uYW1l
ZCBpbXBvcnRhbnQgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXZpb3VzUGFyc2VkT2s7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBhY3RpdmVJdC0+dmFsdWUtPmdl
dEJvb2xlYW4oSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ss
IHByZXZpb3VzUGFyc2VkT2spOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgIXByZXZpb3VzUGFyc2VkT2spCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHByZXZp
b3VzUGFyc2VkT2sgPSBhY3RpdmVJdC0+dmFsdWUtPmdldEJvb2xlYW4oUHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk6OnBhcnNlZE9rS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2aW91c1BhcnNlZE9rICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9w
ZXJ0eS5jb3B5UmVmKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRTdGF0dXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpOworICAgICAg
ICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhQcm90b2NvbDo6Q1NTOjpD
U1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwg
cHJvcGVydHkuY29weVJlZigpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewpAQCAtNzE0LDEzICs3MjIsMTMgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAgICAg
ICAgICAgICAgICAvLyBEZWZhdWx0ICJpbXBsaWNpdCIgPT0gZmFsc2UuCiAgICAgICAgICAgICAg
ICAgaWYgKGltcGxpY2l0KQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0SW1wbGlj
aXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6U3R5bGU7CisgICAgICAgICAgICAgICAgc3RhdHVzID0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlOwogCiAgICAgICAgICAgICAg
ICAgU3RyaW5nIHNob3J0aGFuZCA9IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUp
OwogICAgICAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTaG9ydGhhbmRFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeTo6Y3JlYXRlKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShzaG9ydGhhbmQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnNldFZhbHVlKHNob3J0aGFuZFZhbHVlKHNob3J0aGFuZCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTczMSwxMSArNzM5LDExIEBA
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWZhdWx0
ICJzdGF0dXMiID09ICJzdHlsZSIuCi0gICAgICAgIGlmIChzdGF0dXMgIT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6U3R5bGUpCisgICAgICAgIGlmIChzdGF0
dXMgIT0gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlKQogICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0YXR1cyhzdGF0dXMpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMo
V1RGTW92ZShwcm9wZXJ0aWVzT2JqZWN0KSkKICAgICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMo
V1RGTW92ZShzaG9ydGhhbmRFbnRyaWVzKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTgwNSw3
ICs4MTMsNyBAQCBWZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JTdHlsZTo6bG9uZ2hhbmRQcm9wZXJ0
aWVzKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydAogICAgIHJldHVybiBwcm9wZXJ0aWVz
OwogfQogCi1SZWY8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3Jl
YXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwg
TGlzdGVuZXIqIGxpc3RlbmVyKQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3Ry
aW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJM
LCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVj
dG9yU3R5bGVTaGVldChwYWdlQWdlbnQsIGlkLCBXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSwgb3Jp
Z2luLCBkb2N1bWVudFVSTCwgbGlzdGVuZXIpKTsKIH0KQEAgLTgxNyw3ICs4MjUsNyBAQCBTdHJp
bmcgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdl
U3R5bGVTaGVldCkKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotSW5zcGVjdG9yU3R5
bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hl
ZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0
eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdl
bnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNo
ZWV0LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogbV9wYWdlQWdlbnQocGFn
ZUFnZW50KQogICAgICwgbV9pZChpZCkKICAgICAsIG1fcGFnZVN0eWxlU2hlZXQoV1RGTW92ZShw
YWdlU3R5bGVTaGVldCkpCkBAIC05NDcsNyArOTU1LDcgQEAgRXhjZXB0aW9uT3I8Q1NTU3R5bGVS
dWxlKj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9y
KQogICAgIHNldFRleHQoc3R5bGVTaGVldFRleHQudG9TdHJpbmcoKSk7CiAKICAgICAvLyBJbnNw
ZWN0b3IgU3R5bGUgU2hlZXRzIGFyZSBhbHdheXMgdHJlYXRlZCBhcyB0aG91Z2ggdGhlaXIgcGFy
c2VkIGRhdGEgaXMgcmVhZHkuCi0gICAgaWYgKG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yKQorICAgIGlmIChtX29yaWdpbiA9
PSBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IpCiAgICAgICAgIGZp
cmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgIGVsc2UKICAgICAgICAgcmVwYXJzZVN0eWxlU2hl
ZXQoc3R5bGVTaGVldFRleHQudG9TdHJpbmcoKSk7CkBAIC0xMDA3LDcgKzEwMTUsNyBAQCBDU1NT
dHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JD
U1NJZCYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIGlkLm9yZGluYWwoKSA+PSBtX2ZsYXRSdWxlcy5z
aXplKCkgPyBudWxscHRyIDogbV9mbGF0UnVsZXMuYXQoaWQub3JkaW5hbCgpKS5nZXQoKTsKIH0K
IAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IElu
c3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCitSZWZQdHI8UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9
IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAxNSw3ICsxMDIz
LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2IKIAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4g
Y3NzUnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0KHN0eWxlU2hlZXQpOwogCi0gICAgYXV0byByZXN1
bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUo
KQorICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKICAgICAgICAgLnNldFJ1bGVz
KGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpCiAgICAgICAgIC5yZWxl
YXNlKCk7CkBAIC0xMDI3LDcgKzEwMzUsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldEluZm8oKQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewog
ICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlm
ICghc3R5bGVTaGVldCkKQEAgLTEwMzUsNyArMTA0Myw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkCiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50
KCk7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51
bGxwdHI7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcjo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hlZXRJZChpZCgpKQogICAgICAg
ICAuc2V0T3JpZ2luKG1fb3JpZ2luKQogICAgICAgICAuc2V0RGlzYWJsZWQoc3R5bGVTaGVldC0+
ZGlzYWJsZWQoKSkKQEAgLTEwNDgsOSArMTA1Niw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjb25zdCBT
dHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvckhl
bHBlcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVj
dG9yKQogewotICAgIGF1dG8gaW5zcGVjdG9yU2VsZWN0b3IgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1NlbGVjdG9yOjpjcmVhdGUoKQorICAgIGF1dG8gaW5zcGVjdG9yU2VsZWN0b3Ig
PSBQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRleHQo
c2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwogCkBAIC0xMDY1LDExICsxMDczLDEx
IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVp
bGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjCiAgICAgcmV0dXJuIGluc3BlY3RvclNlbGVjdG9y
OwogfQogCi1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJjZURh
dGEqIHNvdXJjZURhdGEsIGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxlY3Rv
ckxpc3QmIHNlbGVjdG9yTGlzdCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJj
ZURhdGEqIHNvdXJjZURhdGEsIGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlND
OjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbj4gY29tbWVudCgiL1xcKlteXSo/XFwqLyIsIEpTQzo6
WWFycjo6VGV4dENhc2VTZW5zaXRpdmUsIEpTQzo6WWFycjo6TXVsdGlsaW5lRW5hYmxlZCk7CiAK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOwogICAgIGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOwogICAgIGZvciAoYXV0byYg
cmFuZ2UgOiBzb3VyY2VEYXRhLT5zZWxlY3RvclJhbmdlcykgewogICAgICAgICAvLyBJZiB3ZSBk
b24ndCBoYXZlIGEgc2VsZWN0b3IsIHRoYXQgbWVhbnMgdGhlIFNvdXJjZURhdGEgZm9yIHRoaXMg
Q1NTU3R5bGVTaGVldApAQCAtMTA4OSwxNyArMTA5NywxNyBAQCBzdGF0aWMgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zy
b21TbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NT
ZWxlY3Rvcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvcihjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7CiAgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3JIZWxwZXIoc2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLCAqc2VsZWN0b3IpOwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JMaXN0KENTU1N0eWxlUnVsZSogcnVsZSwgaW50
JiBlbmRpbmdMaW5lKQorUmVmPFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxl
LCBpbnQmIGVuZGluZ0xpbmUpCiB7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3Vy
Y2VEYXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAgc291cmNl
RGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKCZydWxlLT5zdHlsZSgpKTsKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0
b3JzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pj4gc2VsZWN0b3JzOwogCiAgICAgLy8gVGhpcyBpbnRlbnRpb25hbGx5IGRvZXMgbm90IHJlbHkg
b24gdGhlIHNvdXJjZSBkYXRhIHRvIGF2b2lkIGNhdGNoaW5nIHRoZSB0cmFpbGluZyBjb21tZW50
cyAoYmVmb3JlIHRoZSBkZWNsYXJhdGlvbiBzdGFydGluZyAneycpLgogICAgIFN0cmluZyBzZWxl
Y3RvclRleHQgPSBydWxlLT5zZWxlY3RvclRleHQoKTsKQEAgLTExMDcsNDEgKzExMTUsNDIgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclMKICAgICBpZiAoc291cmNlRGF0YSkKICAgICAgICAgc2Vs
ZWN0b3JzID0gc2VsZWN0b3JzRnJvbVNvdXJjZShzb3VyY2VEYXRhLmdldCgpLCBtX3BhcnNlZFN0
eWxlU2hlZXQtPnRleHQoKSwgcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCkpOwogICAg
IGVsc2UgewotICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVhdGUoKTsKKyAgICAgICAgc2VsZWN0b3JzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOwogICAg
ICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCA9IHJ1bGUtPnN0eWxlUnVs
ZSgpLnNlbGVjdG9yTGlzdCgpOwogICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKQogICAgICAgICAgICAgc2VsZWN0b3JzLT5hZGRJdGVt
KGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3Ioc2VsZWN0b3IpKTsKICAgICB9Ci0gICAgYXV0byByZXN1
bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdDo6Y3JlYXRlKCkKLSAg
ICAgICAgLnNldFNlbGVjdG9ycyhXVEZNb3ZlKHNlbGVjdG9ycykpCisgICAgYXV0byByZXN1bHQg
PSBQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRTZWxl
Y3RvcnMoc2VsZWN0b3JzLnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgIC5zZXRUZXh0KHNlbGVj
dG9yVGV4dCkKICAgICAgICAgLnJlbGVhc2UoKTsKLSAgICBpZiAoc291cmNlRGF0YSkKLSAgICAg
ICAgcmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1
bGVIZWFkZXJSYW5nZSwgbGluZUVuZGluZ3MoKSwgJmVuZGluZ0xpbmUpKTsKKyAgICBpZiAoc291
cmNlRGF0YSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNlUmFuZ2VPYmpl
Y3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygpLCAmZW5kaW5nTGlu
ZSkpCisgICAgICAgICAgICByZXN1bHQtPnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25OdWxsKCkp
OworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1
bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IElu
c3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUp
CiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAg
ICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGludCBl
bmRpbmdMaW5lID0gMDsKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OkNT
U1J1bGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWxlY3Rvckxpc3QoYnVpbGRPYmplY3RGb3JT
ZWxlY3Rvckxpc3QocnVsZSwgZW5kaW5nTGluZSkpCiAgICAgICAgIC5zZXRTb3VyY2VMaW5lKGVu
ZGluZ0xpbmUpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAgICAgIC5zZXRTdHls
ZShidWlsZE9iamVjdEZvclN0eWxlKCZydWxlLT5zdHlsZSgpKSkKICAgICAgICAgLnJlbGVhc2Uo
KTsKIAotICAgIGlmIChtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OkF1dGhvciB8fCBtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvciB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyKQogICAgICAgICByZXN1bHQtPnNldFNvdXJjZVVS
TChmaW5hbFVSTCgpKTsKIAogICAgIGlmIChjYW5CaW5kKCkpIHsKLSAgICAgICAgSW5zcGVjdG9y
Q1NTSWQgaWQocnVsZUlkKHJ1bGUpKTsKLSAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldFJ1bGVJZChpZC5hc1Byb3RvY29sVmFsdWU8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NSdWxlSWQ+KCkpOworICAgICAgICBpZiAoYXV0byBydWxlSWQgPSB0
aGlzLT5ydWxlSWQocnVsZSkuYXNQcm90b2NvbFZhbHVlPFByb3RvY29sOjpDU1M6OkNTU1J1bGVJ
ZD4oKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKHJ1bGVJZC5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICB9CiAKICAgICBhdXRvIGdyb3VwaW5nc1BheWxvYWQgPSBidWlsZEFycmF5Rm9y
R3JvdXBpbmdzKCpydWxlKTsKQEAgLTExNTEsNyArMTE2MCw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCiB7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VE
YXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKQEAgLTExNTksMTMgKzExNjgs
MTUgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3QKIAogICAgIEluc3BlY3RvckNTU0lkIGlkID0g
cnVsZU9yU3R5bGVJZChzdHlsZSk7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKLSAgICAg
ICAgICAgIC5zZXRDc3NQcm9wZXJ0aWVzKEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQotICAgICAgICAgICAgLnNldFNob3J0aGFuZEVudHJp
ZXMoQXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3Jl
YXRlKCkpCisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkK
KyAgICAgICAgICAgIC5zZXRDc3NQcm9wZXJ0aWVzKEFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHk+OjpjcmVhdGUoKSkKKyAgICAgICAgICAgIC5zZXRTaG9ydGhhbmRFbnRyaWVzKEFy
cmF5T2Y8UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKICAgICAgICAg
ICAgIC5yZWxlYXNlKCk7CiAgICAgfQorCiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNw
ZWN0b3JTdHlsZSA9IGluc3BlY3RvclN0eWxlRm9ySWQoaWQpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+YnVp
bGRPYmplY3RGb3JTdHlsZSgpOworCisgICAgYXV0byByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+
YnVpbGRPYmplY3RGb3JTdHlsZSgpOwogCiAgICAgLy8gU3R5bGUgdGV4dCBjYW5ub3QgYmUgcmV0
cmlldmVkIHdpdGhvdXQgc3R5bGVzaGVldCwgc28gc2V0IGNzc1RleHQgaGVyZS4KICAgICBpZiAo
c291cmNlRGF0YSkgewpAQCAtMTI3NCw3ICsxMjg1LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpzdHlsZVNoZWV0TXV0YXRlZCgpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKIHsKLSAgICBib29sIGFsbG93UGFyc2VkRGF0YSA9
IG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
SW5zcGVjdG9yIHx8ICFzdHlsZVNoZWV0TXV0YXRlZCgpOworICAgIGJvb2wgYWxsb3dQYXJzZWRE
YXRhID0gbV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVj
dG9yIHx8ICFzdHlsZVNoZWV0TXV0YXRlZCgpOwogICAgIHJldHVybiBhbGxvd1BhcnNlZERhdGEg
JiYgZW5zdXJlVGV4dCgpICYmIGVuc3VyZVNvdXJjZURhdGEoKTsKIH0KIApAQCAtMTM3MSw3ICsx
MzgyLDcgQEAgSW5zcGVjdG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUlkKENTU1N0
eWxlUnVsZSogcnVsZSkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpvcmlnaW5h
bFN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogewotICAgIGlmICghbV9wYWdl
U3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OlVzZXJBZ2VudCkKKyAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwgbV9v
cmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGlubGluZVN0eWxlU2hlZXRUZXh0KHJlc3Vs
dCkgfHwgcmVzb3VyY2VTdHlsZVNoZWV0VGV4dChyZXN1bHQpIHx8IGV4dGVuc2lvblN0eWxlU2hl
ZXRUZXh0KHJlc3VsdCk7CiB9CkBAIC0xNDE0LDkgKzE0MjUsOSBAQCBib29sIEluc3BlY3RvclN0
eWxlU2hlZXQ6OmV4dGVuc2lvblN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9yUnVs
ZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlz
dChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRl
KCk7CiAgICAgaWYgKCFydWxlTGlzdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMTQy
NCw4ICsxNDM1LDEwIEBAIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkCiAgICAgQ1NTU3R5bGVSdWxl
VmVjdG9yIHJ1bGVzOwogICAgIGNvbGxlY3RGbGF0UnVsZXMoV1RGTW92ZShyZWZSdWxlTGlzdCks
ICZydWxlcyk7CiAKLSAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykKLSAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlLmdldCgpKSk7CisgICAgZm9yIChhdXRv
JiBydWxlIDogcnVsZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gcnVsZU9iamVjdCA9IGJ1aWxkT2Jq
ZWN0Rm9yUnVsZShydWxlLmdldCgpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShydWxl
T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CkBAIC0xNDQ4LDEyICsxNDYxLDEyIEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVj
dEZsYXRSdWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+JiYgcnVsZUxpc3QsIENTU1N0CiAgICAgfQog
fQogCi1SZWY8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxp
c3RlbmVyKQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVsZW1lbnQsIFBy
b3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlKHBhZ2VBZ2VudCwgaWQsIFdURk1vdmUoZWxlbWVudCksIG9yaWdpbiwgbGlzdGVuZXIp
KTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0
IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikK
K0luc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcm
IGlkLCBSZWY8U3R5bGVkRWxlbWVudD4mJiBlbGVtZW50LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVjdG9yU3R5
bGVTaGVldChwYWdlQWdlbnQsIGlkLCBudWxscHRyLCBvcmlnaW4sIFN0cmluZygpLCBsaXN0ZW5l
cikKICAgICAsIG1fZWxlbWVudChXVEZNb3ZlKGVsZW1lbnQpKQogICAgICwgbV9ydWxlU291cmNl
RGF0YShudWxscHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmgKaW5kZXggNzNkMzYxOGU1YTQ4YTM3NDU3NjI2ZGQ1NDhkY2U3ZTM2YjFkZTEzNS4u
NzhmMTRkMjkxNmJhYTVjMzdlMDEwOTM5MmYyMWVmNjZhNjU1Zjc2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC00NSwxOCArNDUsMTkg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvclN0eWxlU2hlZXQ7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJ
bnNwZWN0b3JDU1NJZCB7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ1NTSWQoKSA9IGRlZmF1bHQ7
CiAKICAgICBleHBsaWNpdCBJbnNwZWN0b3JDU1NJZChjb25zdCBKU09OOjpPYmplY3QmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCJfcywg
bV9zdHlsZVNoZWV0SWQpKQorICAgICAgICBtX3N0eWxlU2hlZXRJZCA9IHZhbHVlLmdldFN0cmlu
Zygic3R5bGVTaGVldElkIl9zKTsKKyAgICAgICAgaWYgKCFtX3N0eWxlU2hlZXRJZCkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoIXZhbHVlLmdldEludGVnZXIoIm9yZGluYWwi
X3MsIG1fb3JkaW5hbCkpCisgICAgICAgIGlmIChhdXRvIG9yZGluYWwgPSB2YWx1ZS5nZXRJbnRl
Z2VyKCJvcmRpbmFsIl9zKSkKKyAgICAgICAgICAgIG1fb3JkaW5hbCA9ICpvcmRpbmFsOworICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX3N0eWxlU2hlZXRJZCA9IFN0cmluZygpOwogICAgIH0K
IApAQCAtMTI2LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB+SW5zcGVjdG9yU3R5bGUoKTsKIAog
ICAgIENTU1N0eWxlRGVjbGFyYXRpb24mIGNzc1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZS5nZXQoKTsgfQotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdDsKICAgICBSZWY8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQ
cm9wZXJ0eT4+IGJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3Q7CiAKICAgICBFeGNl
cHRpb25PcjxTdHJpbmc+IHRleHQoKSBjb25zdDsKQEAgLTE3NSw3ICsxNzYsNyBAQCBwdWJsaWM6
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+
IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldElu
Zm8oKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWls
ZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiopOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWls
ZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKICAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRTdHlsZVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCBjb25zdCBTdHJpbmcmIHRl
eHQsIFN0cmluZyogb2xkVGV4dCk7CiAKICAgICB2aXJ0dWFsIEV4Y2VwdGlvbk9yPFN0cmluZz4g
dGV4dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmNwcAppbmRleCAzNjNkMTY4ZTgwNWVhM2Y4N2Q3YmM5ZDgyOWQ0NmRlNmNi
ZjUyYWFlLi5hMDcwMzM2Yjc1NjFkYTg1ZWNiNWZmZjRjMTRiNjFiZmYzOTYyMTM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcApA
QCAtMTYxLDkgKzE2MSw5IEBAIFJlZjxKU09OOjpPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlUGFpbnREYXRhKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICByZXR1cm4gZGF0
YTsKIH0KIAotdm9pZCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSlNP
Tjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit2b2lkIFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QmIGRhdGEsIGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkKIHsKLSAgICBkYXRhLT5zZXRBcnJheSgicm9vdCJfcywgY3JlYXRlUXVh
ZChxdWFkKSk7CisgICAgZGF0YS5zZXRBcnJheSgicm9vdCJfcywgY3JlYXRlUXVhZChxdWFkKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAppbmRleCA0OGY0MzBlOWJlZDkzZDFhZmQyYmEz
NmU1OTU3ZTdlZjA2MThiM2FhLi5jYTVkYjQxMDg5OGRiOTNjZDBhMzVjMjYyNzkwOWMxZDQ5ZTFj
MjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEpTT046Ok9i
amVjdD4gY3JlYXRlT2JzZXJ2ZXJDYWxsYmFja0RhdGEoY29uc3QgU3RyaW5nJiBjYWxsYmFja1R5
cGUpOwogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVQYWludERhdGEoY29uc3Qg
RmxvYXRRdWFkJik7CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9i
amVjdCogZGF0YSwgY29uc3QgRmxvYXRRdWFkJik7CisgICAgc3RhdGljIHZvaWQgYXBwZW5kTGF5
b3V0Um9vdChKU09OOjpPYmplY3QmIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOwogCiBwcml2YXRl
OgogICAgIFRpbWVsaW5lUmVjb3JkRmFjdG9yeSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcApp
bmRleCA3MTMyNWY1MjJkM2ExMjNhNTM0ZmM3ZmYzYTU4NGI1OGJjOTRmOTM2Li4wMjU3MTJiMDk0
NjRlYzZiMTU0N2VjZjcwNjZlMjBiZGZhYmY0MWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcApA
QCAtNzIsNDUgKzcyLDQ1IEBAIHN0YXRpYyBPcHRpb25hbDxkb3VibGU+IHByb3RvY29sVmFsdWVG
b3JTZWNvbmRzKGNvbnN0IFNlY29uZHMmIHNlY29uZHMpCiAgICAgcmV0dXJuIHNlY29uZHMubWls
bGlzZWNvbmRzKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpB
bmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uPiBwcm90b2NvbFZhbHVlRm9yUGxheWJhY2tEaXJl
Y3Rpb24oUGxheWJhY2tEaXJlY3Rpb24gcGxheWJhY2tEaXJlY3Rpb24pCitzdGF0aWMgT3B0aW9u
YWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+IHByb3RvY29sVmFsdWVG
b3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5YmFja0RpcmVjdGlvbikK
IHsKICAgICBzd2l0Y2ggKHBsYXliYWNrRGlyZWN0aW9uKSB7CiAgICAgY2FzZSBQbGF5YmFja0Rp
cmVjdGlvbjo6Tm9ybWFsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246Ok5vcm1hbDsKICAgICBjYXNlIFBsYXli
YWNrRGlyZWN0aW9uOjpSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6UmV2ZXJzZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpSZXZlcnNlOwogICAgIGNh
c2UgUGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGU7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZToKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJl
Y3Rpb246OkFsdGVybmF0ZVJldmVyc2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0
aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKICAgICB9CiAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1zdGF0
aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZT4gcHJv
dG9jb2xWYWx1ZUZvckZpbGxNb2RlKEZpbGxNb2RlIGZpbGxNb2RlKQorc3RhdGljIE9wdGlvbmFs
PFByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUo
RmlsbE1vZGUgZmlsbE1vZGUpCiB7CiAgICAgc3dpdGNoIChmaWxsTW9kZSkgewogICAgIGNhc2Ug
RmlsbE1vZGU6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmlt
YXRpb246OkZpbGxNb2RlOjpOb25lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlv
bjo6RmlsbE1vZGU6Ok5vbmU7CiAgICAgY2FzZSBGaWxsTW9kZTo6Rm9yd2FyZHM6Ci0gICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpGb3J3YXJk
czsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpGb3J3YXJk
czsKICAgICBjYXNlIEZpbGxNb2RlOjpCYWNrd2FyZHM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpCYWNrd2FyZHM7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6QmFja3dhcmRzOwogICAgIGNhc2Ug
RmlsbE1vZGU6OkJvdGg6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmlt
YXRpb246OkZpbGxNb2RlOjpCb3RoOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlv
bjo6RmlsbE1vZGU6OkJvdGg7CiAgICAgY2FzZSBGaWxsTW9kZTo6QXV0bzoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkF1dG87CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKICAgICB9CiAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
Ci1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0Rm9yS2V5ZnJhbWVzKEtleWZyYW1lRWZmZWN0JiBrZXlm
cmFtZUVmZmVjdCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QW5pbWF0aW9u
OjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0Rm9yS2V5ZnJhbWVzKEtleWZyYW1lRWZmZWN0JiBrZXlm
cmFtZUVmZmVjdCkKIHsKLSAgICBhdXRvIGtleWZyYW1lc1BheWxvYWQgPSBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGtleWZyYW1lc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRp
b246OktleWZyYW1lPjo6Y3JlYXRlKCk7CiAKICAgICBjb25zdCBhdXRvJiBibGVuZGluZ0tleWZy
YW1lcyA9IGtleWZyYW1lRWZmZWN0LmJsZW5kaW5nS2V5ZnJhbWVzKCk7CiAgICAgY29uc3QgYXV0
byYgcGFyc2VkS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QucGFyc2VkS2V5ZnJhbWVzKCk7CkBA
IC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEYKICAgICAgICAgICAgIEFT
U0VSVChibGVuZGluZ0tleWZyYW1lLnN0eWxlKCkpOwogICAgICAgICAgICAgYXV0byYgc3R5bGUg
PSAqYmxlbmRpbmdLZXlmcmFtZS5zdHlsZSgpOwogCi0gICAgICAgICAgICBhdXRvIGtleWZyYW1l
UGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0
ZSgpCisgICAgICAgICAgICBhdXRvIGtleWZyYW1lUGF5bG9hZCA9IFByb3RvY29sOjpBbmltYXRp
b246OktleWZyYW1lOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRPZmZzZXQoYmxlbmRp
bmdLZXlmcmFtZS5rZXkoKSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCkBAIC0xNjcs
NyArMTY3LDcgQEAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEYKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFyc2VkS2V5ZnJhbWUgOiBwYXJzZWRLZXlm
cmFtZXMpIHsKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8g
a2V5ZnJhbWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldE9mZnNldChwYXJzZWRLZXlmcmFtZS5jb21wdXRlZE9mZnNl
dCkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCkBAIC0xODYsOSArMTg2LDkgQEAgc3Rh
dGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5
ZnJhbWU+PiBidWlsZE9iamVjdEYKICAgICByZXR1cm4ga2V5ZnJhbWVzUGF5bG9hZDsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdD4gYnVpbGRP
YmplY3RGb3JFZmZlY3QoQW5pbWF0aW9uRWZmZWN0JiBlZmZlY3QpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpBbmltYXRpb246OkVmZmVjdD4gYnVpbGRPYmplY3RGb3JFZmZlY3QoQW5pbWF0aW9uRWZm
ZWN0JiBlZmZlY3QpCiB7Ci0gICAgYXV0byBlZmZlY3RQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpFZmZlY3Q6OmNyZWF0ZSgpCisgICAgYXV0byBlZmZlY3RQYXlsb2Fk
ID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0OjpjcmVhdGUoKQogICAgICAgICAucmVsZWFz
ZSgpOwogCiAgICAgaWYgKGF1dG8gc3RhcnREZWxheSA9IHByb3RvY29sVmFsdWVGb3JTZWNvbmRz
KGVmZmVjdC5kZWxheSgpKSkKQEAgLTIzOCwyMCArMjM4LDE3IEBAIHZvaWQgSW5zcGVjdG9yQW5p
bWF0aW9uQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlCiAKIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKLSAgICBzdG9wVHJhY2tpbmcoaWdub3JlZCk7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAg
ICBzdG9wVHJhY2tpbmcoKTsKKyAgICBkaXNhYmxlKCk7CiAKICAgICBBU1NFUlQobV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpOwogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50QW5pbWF0aW9uQWdlbnQobnVsbHB0cik7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVu
YWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQW5pbWF0aW9uQWdlbnQo
KSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBkb21h
aW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRF
bmFibGVkQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKQEAgLTI3MCw0OSArMjY3LDUxIEBAIHZvaWQg
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CiAgICAgICAgICAgICAgICAgYmluZEFuaW1hdGlvbigqYW5pbWF0aW9uLCBmYWxzZSk7CiAgICAg
ICAgIH0KICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFuaW1h
dGlvbkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFuaW1hdGlvbkFnZW50KG51bGxwdHIpOwogCiAgICAg
cmVzZXQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9u
QWdlbnQ6OnJlcXVlc3RFZmZlY3RUYXJnZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbklkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnJlcXVl
c3RFZmZlY3RUYXJnZXQoY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmIGFu
aW1hdGlvbklkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFzc2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0
aW9uSWQpOwogICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byogZWZmZWN0ID0gYW5pbWF0aW9uLT5lZmZlY3QoKTsKLSAgICBpZiAoIWlz
PEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1h
dGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBlZmZlY3QiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFpczxLZXlmcmFtZUVmZmVjdD4oZWZmZWN0
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmltYXRpb24gZm9yIGdpdmVuIGFu
aW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYW4gZWZmZWN0Il9zKTsKIAogICAgIGF1dG8mIGtleWZy
YW1lRWZmZWN0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCplZmZlY3QpOwogCiAgICAgYXV0
byogdGFyZ2V0ID0ga2V5ZnJhbWVFZmZlY3QudGFyZ2V0RWxlbWVudE9yUHNldWRvRWxlbWVudCgp
OwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1hdGlvbiBm
b3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYSB0
YXJnZXQiX3MpOwogCi0gICAgKm5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKGVycm9yU3RyaW5nLCB0YXJnZXQpOworICAgIHJldHVybiBkb21BZ2VudC0+cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgdGFyZ2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0aW9uKGNvbnN0IFBy
b3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbklkJiBhbmltYXRpb25JZCwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBhdXRvKiBhbmltYXRpb24gPSBhc3NlcnRBbmltYXRpb24oZXJyb3JTdHJpbmcsIGFu
aW1hdGlvbklkKTsKICAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogc3RhdGUg
PSBhbmltYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXhlY1N0YXRlKCk7CiAgICAg
YXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2Ny
aXB0Rm9yKHN0YXRlKTsKQEAgLTMyOCwzOCArMzI3LDQyIEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0
aW9uQWdlbnQ6OnJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTCiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBBbmltYXRpb24g
Zm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVua25vd24gQW5pbWF0aW9uIGZvciBn
aXZlbiBhbmltYXRpb25JZCJfcyk7CiAgICAgfQogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFt
ZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICBh
dXRvIG9iamVjdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3Vw
KTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRl
cm5hbCBlcnJvcjogdW5hYmxlIHRvIGNhc3QgQW5pbWF0aW9uIik7CisKKyAgICByZXR1cm4gb2Jq
ZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6
OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQog
ewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMudHJhY2tpbmdBbmltYXRpb25BZ2VudCgp
ID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGRvbWFpbiBhbHJl
YWR5IHRyYWNraW5nIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3Ry
dW1lbnRpbmdBZ2VudHMudHJhY2tpbmdBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IHRyYWNraW5n
Il9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRUcmFja2luZ0FuaW1hdGlvbkFn
ZW50KHRoaXMpOwogCiAgICAgQVNTRVJUKG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0
YS5pc0VtcHR5KCkpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nU3RhcnQo
bV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMo
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50
OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgIT0gdGhpcykKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICBtX3RyYWNr
ZWREZWNsYXJhdGl2ZUFuaW1hdGlvbkRhdGEuY2xlYXIoKTsKIAogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT50cmFja2luZ0NvbXBsZXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNo
KCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3Rh
dGljIGJvb2wgaXNEZWxheWVkKENvbXB1dGVkRWZmZWN0VGltaW5nJiBjb21wdXRlZFRpbWluZykK
QEAgLTM4MCwzMSArMzgzLDMxIEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxB
cHBseUtleWZyYW1lRWZmZWN0KEVsZW1lbnQmIHRhcmdldCwgS2V5ZnJhbWVFCiAgICAgfSk7CiAg
ICAgYXV0byYgdHJhY2tpbmdEYXRhID0gZW5zdXJlUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAot
ICAgIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3Rh
dGU+IGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlOworICAgIE9wdGlvbmFsPFByb3RvY29sOjpBbmlt
YXRpb246OkFuaW1hdGlvblN0YXRlPiBhbmltYXRpb25BbmltYXRpb25TdGF0ZTsKIAogICAgIGlm
ICgoZW5zdXJlUmVzdWx0LmlzTmV3RW50cnkgfHwgIWlzRGVsYXllZCh0cmFja2luZ0RhdGEubGFz
dENvbXB1dGVkVGltaW5nKSkgJiYgaXNEZWxheWVkKGNvbXB1dGVkVGltaW5nKSkKLSAgICAgICAg
YW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246
OkFuaW1hdGlvblN0YXRlOjpEZWxheWVkOworICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpEZWxheWVkOwogICAgIGVs
c2UgaWYgKGVuc3VyZVJlc3VsdC5pc05ld0VudHJ5IHx8IHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0
ZWRUaW1pbmcucGhhc2UgIT0gY29tcHV0ZWRUaW1pbmcucGhhc2UpIHsKICAgICAgICAgc3dpdGNo
IChjb21wdXRlZFRpbWluZy5waGFzZSkgewogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBo
YXNlOjpCZWZvcmU6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlJlYWR5OworICAgICAg
ICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmlt
YXRpb25TdGF0ZTo6UmVhZHk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFu
aW1hdGlvbkVmZmVjdFBoYXNlOjpBY3RpdmU6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRp
b25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6
OkFjdGl2ZTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFmdGVyOgotICAgICAgICAgICAg
YW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246
OkFuaW1hdGlvblN0YXRlOjpEb25lOworICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3Rh
dGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RG9uZTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OklkbGU6Ci0g
ICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
dHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5jdXJyZW50SXRlcmF0aW9uICE9IGNvbXB1
dGVkVGltaW5nLmN1cnJlbnRJdGVyYXRpb24pIHsKICAgICAgICAgLy8gSXRlcmF0aW9ucyBhcmUg
cmVwcmVzZW50ZWQgYnkgc2VxdWVudGlhbCAiYWN0aXZlIiBzdGF0ZSBldmVudHMuCi0gICAgICAg
IGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7CiAgICAgfQog
CiAgICAgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZyA9IGNvbXB1dGVkVGltaW5nOwpA
QCAtNDEyLDcgKzQxNSw3IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxBcHBs
eUtleWZyYW1lRWZmZWN0KEVsZW1lbnQmIHRhcmdldCwgS2V5ZnJhbWVFCiAgICAgaWYgKCFhbmlt
YXRpb25BbmltYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBldmVudCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgp
CisgICAgYXV0byBldmVudCA9IFByb3RvY29sOjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpj
cmVhdGUoKQogICAgICAgICAuc2V0VHJhY2tpbmdBbmltYXRpb25JZCh0cmFja2luZ0RhdGEudHJh
Y2tpbmdBbmltYXRpb25JZCkKICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKGFuaW1hdGlvbkFu
aW1hdGlvblN0YXRlLnZhbHVlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC00NDEsOCArNDQ0
LDcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ2hhbmdlV2ViQW5pbWF0aW9u
TmFtZShXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKICAgICBpZiAoYW5pbWF0aW9uSWQuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hbWUgPSBhbmltYXRpb24uaWQoKTsK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsICFuYW1l
LmlzRW1wdHkoKSA/ICZuYW1lIDogbnVsbHB0cik7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
Pm5hbWVDaGFuZ2VkKGFuaW1hdGlvbklkLCBhbmltYXRpb24uaWQoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpZFNldFdlYkFuaW1hdGlvbkVmZmVjdChXZWJBbmltYXRp
b24mIGFuaW1hdGlvbikKQEAgLTUyNSw3ICs1MjcsNyBAQCBTdHJpbmcgSW5zcGVjdG9yQW5pbWF0
aW9uQWdlbnQ6OmZpbmRBbmltYXRpb25JZChXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKICAgICBy
ZXR1cm4gbnVsbFN0cmluZygpOwogfQogCi1XZWJBbmltYXRpb24qIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50Ojphc3NlcnRBbmltYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkKQorV2ViQW5pbWF0aW9uKiBJbnNwZWN0b3JBbmltYXRpb25BZ2Vu
dDo6YXNzZXJ0QW5pbWF0aW9uKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCiB7CiAgICAgYXV0byogYW5pbWF0aW9uID0gbV9hbmlt
YXRpb25JZE1hcC5nZXQoYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0aW9uKQpAQCAtNTM4
LDcgKzU0MCw3IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmJpbmRBbmltYXRpb24o
V2ViQW5pbWF0aW9uJiBhbmltYXRpb24sIGJvb2wgY2FwdHVyCiAgICAgYXV0byBhbmltYXRpb25J
ZCA9IG1ha2VTdHJpbmcoImFuaW1hdGlvbjoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJ
ZGVudGlmaWVyKCkpOwogICAgIG1fYW5pbWF0aW9uSWRNYXAuc2V0KGFuaW1hdGlvbklkLCAmYW5p
bWF0aW9uKTsKIAotICAgIGF1dG8gYW5pbWF0aW9uUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uOjpjcmVhdGUoKQorICAgIGF1dG8gYW5pbWF0aW9uUGF5
bG9hZCA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbjo6Y3JlYXRlKCkKICAgICAgICAg
LnNldEFuaW1hdGlvbklkKGFuaW1hdGlvbklkKQogICAgICAgICAucmVsZWFzZSgpOwogCkBAIC02
MDMsOSArNjA1LDkgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RvcFRyYWNraW5n
RGVjbGFyYXRpdmVBbmltYXRpb24oRGVjbGFyYXRpdmVBbmltYXQKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGl0LT52YWx1ZS5sYXN0Q29tcHV0ZWRUaW1pbmcucGhhc2UgIT0gQW5pbWF0aW9u
RWZmZWN0UGhhc2U6OkFmdGVyICYmIGl0LT52YWx1ZS5sYXN0Q29tcHV0ZWRUaW1pbmcucGhhc2Ug
IT0gQW5pbWF0aW9uRWZmZWN0UGhhc2U6OklkbGUpIHsKLSAgICAgICAgYXV0byBldmVudCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCisg
ICAgICAgIGF1dG8gZXZlbnQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpUcmFja2luZ1VwZGF0ZTo6
Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRUcmFja2luZ0FuaW1hdGlvbklkKGl0LT52YWx1ZS50
cmFja2luZ0FuaW1hdGlvbklkKQotICAgICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQorICAg
ICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlv
blN0YXRlOjpDYW5jZWxlZCkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1VwZGF0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0
b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpLCBXVEZNb3ZlKGV2ZW50KSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
bmltYXRpb25BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JBbmltYXRpb25BZ2VudC5oCmluZGV4IDhiNTExNjI4Yzk3YTIyMmE4ZjlhY2Q4ZDNlNWIyMDJh
OGRiYjZiZWMuLjA2NGFjNDA2M2MzMDlmZGI0MWM3MWJmY2Y2Y2JkOWVhNjRlZDkzMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9u
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFu
aW1hdGlvbkFnZW50LmgKQEAgLTQ0LDI2ICs0NCwyNCBAQCBjbGFzcyBLZXlmcmFtZUVmZmVjdDsK
IGNsYXNzIFBhZ2U7CiBjbGFzcyBXZWJBbmltYXRpb247CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudCBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkFuaW1hdGlvbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQW5pbWF0
aW9uQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIElu
c3BlY3RvckFuaW1hdGlvbkFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQo
KTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQg
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQW5p
bWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHJlcXVlc3RFZmZlY3RUYXJnZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlQW5p
bWF0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwgY29uc3QgU3Ry
aW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZD4gcmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbklkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUFuaW1hdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
bmltYXRpb246OkFuaW1hdGlvbklkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tp
bmcoKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgd2lsbEFw
cGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYsIEtleWZyYW1lRWZmZWN0JiwgQ29tcHV0ZWRFZmZl
Y3RUaW1pbmcpOwpAQCAtNzcsNyArNzUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nIGZpbmRBbmltYXRpb25JZChXZWJBbmltYXRpb24mKTsKLSAgICBXZWJBbmltYXRpb24qIGFz
c2VydEFuaW1hdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpOwor
ICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CiAgICAgdm9pZCBiaW5kQW5p
bWF0aW9uKFdlYkFuaW1hdGlvbiYsIGJvb2wgY2FwdHVyZUJhY2t0cmFjZSk7CiAgICAgdm9pZCB1
bmJpbmRBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CiAgICAgdm9pZCBhbmlt
YXRpb25EZXN0cm95ZWRUaW1lckZpcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAKaW5kZXggOTEyOTI2NDhkNjgyZDljMzgxZTUyNGZkMDk3MDA4YTQ3YzM2NTA0YS4uYWY2
NzM3OGE2ZGRjZDFhZTc3MjQ0ZTg5OTUzNjc3M2E3MDI3YjAzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcApAQCAtNTcsMzEgKzU3LDMwIEBAIHZvaWQgSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRS
b3V0ZXIqCiAKIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgPT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBhbHJlYWR5IGVu
YWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBhbHJlYWR5IGVu
YWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQodGhpcyk7CiAKICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW5pdGlhbCBu
YXZpZ2F0b3Iub25PbmxpbmUuCiAgICAgbmV0d29ya1N0YXRlQ2hhbmdlZCgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFs
cmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5z
dHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgIT0gdGhpcykK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBh
bHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFi
bGVkQXBwbGljYXRpb25DYWNoZUFnZW50KG51bGxwdHIpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQpAQCAtMTA5LDE2ICsxMDgsMTMgQEAgdm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKQogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5uZXR3b3JrU3RhdGVVcGRhdGVkKHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5sb2FkZXJTdHJhdGVneSgpLT5pc09uTGluZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+JiByZXN1bHQpCitFeHBlY3RlZDxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFu
aWZlc3Q+PiwgUHJvdG9jb2w6OkVycm9yU3RyaW5nPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKQogewogICAgIGF1dG8qIHBhZ2VBZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYgKCFwYWdl
QWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5p
ZmVzdD46OmNyZWF0ZSgpOworICAgIGlmICghcGFnZUFnZW50KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKKyAgICBhdXRv
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CiAgICAgICAgIGF1dG8qIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpLmRvY3VtZW50TG9hZGVyKCk7CiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCkBAIC0x
MjcsMTYgKzEyMywxNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0
RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdAogICAgICAgICBhdXRvJiBo
b3N0ID0gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CiAgICAgICAgIFN0
cmluZyBtYW5pZmVzdFVSTCA9IGhvc3QuYXBwbGljYXRpb25DYWNoZUluZm8oKS5tYW5pZmVzdC5z
dHJpbmcoKTsKICAgICAgICAgaWYgKCFtYW5pZmVzdFVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC0+YWRkSXRlbShJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRl
bShQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldEZyYW1lSWQocGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSkK
ICAgICAgICAgICAgICAgICAuc2V0TWFuaWZlc3RVUkwobWFuaWZlc3RVUkwpCiAgICAgICAgICAg
ICAgICAgLnNldFN0YXR1cyhzdGF0aWNfY2FzdDxpbnQ+KGhvc3Quc3RhdHVzKCkpKQogICAgICAg
ICAgICAgICAgIC5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLURvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6
OmFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkKQorRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICBhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwogICAgIGlmICghcGFnZUFnZW50KSB7CkBA
IC0xNTEsMjggKzE0OCwzMiBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50Ojphc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihFcgogICAgIHJldHVybiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRNYW5pZmVz
dEZvckZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKQorRXhwZWN0ZWQ8U3RyaW5nLCBQcm90b2NvbDo6RXJyb3JT
dHJpbmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0TWFuaWZlc3RGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVy
cm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICAqbWFuaWZlc3RVUkwgPSBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5h
cHBsaWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOworICAgIHJldHVybiBkb2N1
bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5hcHBsaWNhdGlvbkNhY2hlSW5mbygp
Lm1hbmlmZXN0LnN0cmluZygpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBw
bGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4mIGFwcGxpY2F0aW9uQ2FjaGUpCitFeHBl
Y3RlZDxSZWY8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+LCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0
QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgYXV0byogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRl
cikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOwogCiAgICAgYXV0byYgaG9zdCA9IGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNh
Y2hlSG9zdCgpOwotICAgIGFwcGxpY2F0aW9uQ2FjaGUgPSBidWlsZE9iamVjdEZvckFwcGxpY2F0
aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNhY2hlSW5mbygp
KTsKKyAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGhvc3QucmVzb3Vy
Y2VMaXN0KCksIGhvc3QuYXBwbGljYXRpb25DYWNoZUluZm8oKSk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShj
b25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8m
IGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQorUmVmPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6
OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0
aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQogewotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBw
bGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE1hbmlmZXN0VVJMKGFwcGxpY2F0
aW9uQ2FjaGVJbmZvLm1hbmlmZXN0LnN0cmluZygpKQogICAgICAgICAuc2V0U2l6ZShhcHBsaWNh
dGlvbkNhY2hlSW5mby5zaXplKQogICAgICAgICAuc2V0Q3JlYXRpb25UaW1lKGFwcGxpY2F0aW9u
Q2FjaGVJbmZvLmNyZWF0aW9uVGltZSkKQEAgLTE4MSwxNSArMTgyLDE1IEBAIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0
b3JBcHBsaWNhdGlvCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZvckFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpSZXNvdXJjZUluZm8+JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQorUmVmPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZvckFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNv
dXJjZUluZm8+JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQogewotICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT46OmNyZWF0ZSgpOwogICAgIGZvciAoYXV0byYgaW5mbyA6IGFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZXMpCiAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVjdEZvckFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZShpbmZvKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3Vy
Y2VJbmZvJiByZXNvdXJjZUluZm8pCitSZWY8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpi
dWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6UmVzb3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCiB7CiAgICAgU3RyaW5nQnVpbGRl
ciB0eXBlczsKIApAQCAtMjA4LDcgKzIwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwCiAg
ICAgaWYgKHJlc291cmNlSW5mby5pc0V4cGxpY2l0KQogICAgICAgICB0eXBlcy5hcHBlbmRMaXRl
cmFsKCJFeHBsaWNpdCAiKTsKIAotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBs
aWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgcmV0
dXJuIFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwocmVzb3VyY2VJbmZvLnJlc291cmNlLnN0cmluZygp
KQogICAgICAgICAuc2V0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlSW5mby5zaXplKSkK
ICAgICAgICAgLnNldFR5cGUodHlwZXMudG9TdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5oCmluZGV4IDUxOTg4ZjYxN2RlMTFlZjExNzA4YTdiMzkyY2YwY2UxOTRiNDg2ZWEu
LjgwNzY3OTdjYWI2MDliOTIzNjc5M2UyMjgxYTU4OWM0Y2QxNDYyNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaApAQCAtMzksMjUgKzM5LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUGFnZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KIGNsYXNzIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KFBhZ2VBZ2VudENv
bnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkgb3ZlcnJpZGU7
CisgICAgfkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBcHBsaWNhdGlvbkNhY2hlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+
JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgU3RyaW5nKiBtYW5pZmVzdFVSTCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNh
dGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+PiBnZXRGcmFtZXNXaXRo
TWFuaWZlc3RzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IGdldE1hbmlmZXN0Rm9yRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
PiBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6RnJhbWVJZCYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAg
ICAgdm9pZCB1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzKEZyYW1lKik7CkBAIC02OCw3ICs2
Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gYnVpbGRBcnJh
eUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpSZXNvdXJjZUluZm8+Jik7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291
cmNlSW5mbyYpOwogCi0gICAgRG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50
TG9hZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBEb2N1bWVu
dExvYWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkJik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hl
RnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckNQVVByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmNwcAppbmRleCBhMGU2ZmM0NTMxNTE2ZDk4OTMy
MTE1YmI0YjljYTJiMmMyMzA1NjkzLi44MjgxMWJlNTFjZjQ2M2M0MTE4MGJkZTgwNDU4MjJkNDdm
ZTFlNTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckNQVVByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTUzLDE2ICs1MywxNSBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChGcm9udGVuZFJvdXRlciosIEJhYwogCiB2b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBzdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgc3Rv
cFRyYWNraW5nKCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudENQ
VVByb2ZpbGVyQWdlbnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJB
Z2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAg
ICBpZiAobV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6YWRkT2JzZXJ2ZXIodGhpcywgQ1BVLCBbdGhpc10g
KGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKSB7CiAgICAgICAgIGNvbGxlY3RTYW1wbGUo
ZGF0YSk7CkBAIC03MSwxOCArNzAsMjIgQEAgdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50
OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIAog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KG1fZW52aXJvbm1lbnQuZXhl
Y3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNlVXNhZ2VU
aHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwog
CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9lbnZpcm9ubWVu
dC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiBzdGF0aWMgUmVmPFByb3RvY29sOjpDUFVQcm9maWxlcjo6VGhyZWFk
SW5mbz4gYnVpbGRUaHJlYWRJbmZvKGNvbnN0IFRocmVhZENQVUluZm8mIHRocmVhZCkKQEAgLTEx
Myw3ICsxMTYsNyBAQCB2b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OmNvbGxlY3RTYW1w
bGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAK
ICAgICBpZiAoIWRhdGEuY3B1VGhyZWFkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPj4gdGhyZWFkcyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPjo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gdGhyZWFkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNQVVBy
b2ZpbGVyOjpUaHJlYWRJbmZvPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoYXV0byYgdGhyZWFk
SW5mbyA6IGRhdGEuY3B1VGhyZWFkcykKICAgICAgICAgICAgIHRocmVhZHMtPmFkZEl0ZW0oYnVp
bGRUaHJlYWRJbmZvKHRocmVhZEluZm8pKTsKICAgICAgICAgZXZlbnQtPnNldFRocmVhZHMoV1RG
TW92ZSh0aHJlYWRzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5oCmluZGV4IDRlZThlOTc4NTNkNzEy
ZDNkYTY0MzliOTg5N2U4NjVhODk2ZGJmZmYuLmZlNWUxODVhYmRiMWM0ZjJmMTNiNGQ4YTA3YTky
YmZkNzllNjlkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5oCkBAIC0zNCwyMiArMzQsMjAgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQog
Y2xhc3MgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNQVVByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0
b3JDUFVQcm9maWxlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50
KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENQ
VVByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzdGFydFRyYWNraW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdFNh
bXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA1NjVlYmUwODJj
MDc4YmI2Njg3NzQwMzg5ZWIzNzJlZTExOWI3NDFiLi41OTRjODQ1YzE4YTMyNWQ1MGQ5ZTVlMDM4
MjEwOWY5MjJiM2JjZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtOTIsMTAgKzkyLDcgQEAgc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soY29uc3QgSlNPTjo6QXJyYXkmIHBzZXVkb0Ns
YXNzQXJyYXkpCiAKICAgICB1bnNpZ25lZCByZXN1bHQgPSBQc2V1ZG9DbGFzc05vbmU7CiAgICAg
Zm9yIChhdXRvJiBwc2V1ZG9DbGFzc1ZhbHVlIDogcHNldWRvQ2xhc3NBcnJheSkgewotICAgICAg
ICBTdHJpbmcgcHNldWRvQ2xhc3M7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHBzZXVkb0NsYXNz
VmFsdWUtPmFzU3RyaW5nKHBzZXVkb0NsYXNzKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gcHNldWRvQ2xhc3MgPSBwc2V1ZG9DbGFz
c1ZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICBpZiAocHNldWRvQ2xhc3MgPT0gYWN0aXZlKQog
ICAgICAgICAgICAgcmVzdWx0IHw9IFBzZXVkb0NsYXNzQWN0aXZlOwogICAgICAgICBlbHNlIGlm
IChwc2V1ZG9DbGFzcyA9PSBob3ZlcikKQEAgLTMxMiw4ICszMDksNyBAQCB2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosCiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBTdHJpbmcgdW51
c2VkOwotICAgIGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnJlc2V0KCkKQEAgLTMyNywxMCArMzIzLDEwIEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnJlc2V0KCkKICAgICByZXNldFBzZXVkb1N0YXRlcygpOwogfQogCi12b2lk
IEluc3BlY3RvckNTU0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQ1NTQWdlbnQoKSA9PSB0aGlzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMu
c2V0RW5hYmxlZENTU0FnZW50KHRoaXMpOwogCkBAIC0zMzgsMTMgKzMzNCwxNyBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICBmb3IgKGF1dG8q
IGRvY3VtZW50IDogZG9tQWdlbnQtPmRvY3VtZW50cygpKQogICAgICAgICAgICAgYWN0aXZlU3R5
bGVTaGVldHNVcGRhdGVkKCpkb2N1bWVudCk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlzYWJsZSgpCiB7CiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDU1NBZ2VudChudWxscHRyKTsKIAog
ICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpkb2N1bWVudERldGFjaGVkKERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTM4Nyw3ICszODcs
NyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3Vt
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgVmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3Rp
dmVTdHlsZVNoZWV0cy5yZW1vdmUoY3NzU3R5bGVTaGVldCk7CiAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZVNoZWV0PiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gbV9jc3NTdHlsZVNoZWV0VG9J
bnNwZWN0b3JTdHlsZVNoZWV0LmdldChjc3NTdHlsZVNoZWV0KTsKICAgICAgICAgaWYgKG1faWRU
b0luc3BlY3RvclN0eWxlU2hlZXQuY29udGFpbnMoaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKSkp
IHsKLSAgICAgICAgICAgIFN0cmluZyBpZCA9IHVuYmluZFN0eWxlU2hlZXQoaW5zcGVjdG9yU3R5
bGVTaGVldC5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIGlkID0gdW5iaW5kU3R5bGVTaGVldChp
bnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKICAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5zdHlsZVNoZWV0UmVtb3ZlZChpZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTYsNyAr
Mzk2LDggQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0QWN0aXZlU3R5bGVTaGVldHNGb3JE
b2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3QKICAgICAgICAgcHJldmlvdXNseUtub3du
QWN0aXZlU3R5bGVTaGVldHMuYWRkKGNzc1N0eWxlU2hlZXQpOwogICAgICAgICBpZiAoIW1fY3Nz
U3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlucyhjc3NTdHlsZVNoZWV0KSkg
ewogICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGJpbmRTdHlsZVNoZWV0KGNzc1N0eWxlU2hlZXQpOwotICAgICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnN0eWxlU2hlZXRBZGRlZChpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpOworICAgICAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5z
cGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAg
ICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zdHlsZVNoZWV0QWRkZWQoaGVhZGVyLnJl
bGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDEwLDcgKzQxMSw3IEBA
IGJvb2wgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoY29uc3QgRWxlbWVudCYg
ZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzCiAgICAgaWYgKCFkb21BZ2VudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZCgmZWxl
bWVudCk7CisgICAgYXV0byBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmVsZW1lbnQp
OwogICAgIGlmICghbm9kZUlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQyOSwzNyAr
NDMwLDM3IEBAIGJvb2wgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoY29uc3Qg
RWxlbWVudCYgZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzCiAgICAgfQogfQogCi1zdGF0aWMgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZv
clBzZXVkb0lkKFBzZXVkb0lkIHBzZXVkb0lkKQorc3RhdGljIE9wdGlvbmFsPFByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CiB7CiAgICAgc3dpdGNoIChwc2V1ZG9JZCkgewogICAgIGNhc2UgUHNldWRvSWQ6OkZpcnN0TGlu
ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZp
cnN0TGluZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpGaXJzdExp
bmU7CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXI6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpGaXJzdExldHRlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpGaXJzdExldHRlcjsKICAgICBjYXNlIFBzZXVk
b0lkOjpNYXJrZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkOjpNYXJrZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
TWFya2VyOwogICAgIGNhc2UgUHNldWRvSWQ6OkJlZm9yZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9yZTsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpDU1M6OlBzZXVkb0lkOjpCZWZvcmU7CiAgICAgY2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpBZnRl
cjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpBZnRlcjsKICAgICBj
YXNlIFBzZXVkb0lkOjpTZWxlY3Rpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2VsZWN0aW9uOwogICAgIGNhc2UgUHNldWRvSWQ6OkhpZ2hsaWdodDoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hs
aWdodDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpIaWdobGlnaHQ7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhcjsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3Jv
bGxiYXJUaHVtYjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNl
dWRvSWQ6OlNjcm9sbGJhclRodW1iOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNl
dWRvSWQ6OlNjcm9sbGJhclRodW1iOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRv
bjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNj
cm9sbGJhckJ1dHRvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXJCdXR0b247CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2s6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJU
cmFjazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJU
cmFjazsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2tQ
aWVjZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJU
cmFja1BpZWNlOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjoKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5l
cjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJDb3Ju
ZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6UmVzaXplcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlJlc2l6ZXI7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6UmVzaXplcjsKIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDY3LDM2ICs0NjgsMzcgQEAgc3RhdGljIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVGb3JQc2V1
ZG9JZChQc2UKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRT
dHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
Ym9vbCogaW5jbHVkZVBzZXVkbywgY29uc3QgYm9vbCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiYgbWF0
Y2hlZENTU1J1bGVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkTWF0Y2hlcz4+JiBwc2V1ZG9JZE1hdGNoZXMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+JiBpbmhl
cml0ZWRFbnRyaWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+Pj4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlk
LCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVQc2V1ZG8sIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVk
ZUluaGVyaXRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisK
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQp
OwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRWxlbWVudCogb3JpZ2luYWxFbGVtZW50
ID0gZWxlbWVudDsKICAgICBQc2V1ZG9JZCBlbGVtZW50UHNldWRvSWQgPSBlbGVtZW50LT5wc2V1
ZG9JZCgpOwogICAgIGlmIChlbGVtZW50UHNldWRvSWQgIT0gUHNldWRvSWQ6Ok5vbmUpIHsKICAg
ICAgICAgZWxlbWVudCA9IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCplbGVtZW50KS5ob3N0RWxl
bWVudCgpOwotICAgICAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgcGFyZW50IG9mIHBzZXVkby1lbGVtZW50IG5vZGUgZm9yIGdpdmVuIG5vZGVJ
ZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWVsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGFyZW50IG9m
IHBzZXVkby1lbGVtZW50IG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAgICAgfQogCiAgICAg
Ly8gTWF0Y2hlZCBydWxlcy4KICAgICBhdXRvJiBzdHlsZVJlc29sdmVyID0gZWxlbWVudC0+c3R5
bGVSZXNvbHZlcigpOwogICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBlbGVtZW50UHNldWRvSWQsIFN0eWxlOjpS
ZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwotICAgIG1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwg
ZWxlbWVudFBzZXVkb0lkKTsKKyAgICBhdXRvIG1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwg
ZWxlbWVudFBzZXVkb0lkKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NT
OjpQc2V1ZG9JZE1hdGNoZXM+PiBwc2V1ZG9FbGVtZW50czsKKyAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4gaW5oZXJpdGVkOwogCiAg
ICAgaWYgKCFvcmlnaW5hbEVsZW1lbnQtPmlzUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIC8v
IFBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgaWYgKCFpbmNsdWRlUHNldWRvIHx8ICppbmNsdWRl
UHNldWRvKSB7Ci0gICAgICAgICAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz46OmNyZWF0ZSgpOwor
ICAgICAgICAgICAgcHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlBzZXVkb0lkTWF0Y2hlcz46OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChQc2V1ZG9JZCBw
c2V1ZG9JZCA9IFBzZXVkb0lkOjpGaXJzdFB1YmxpY1BzZXVkb0lkOyBwc2V1ZG9JZCA8IFBzZXVk
b0lkOjpBZnRlckxhc3RJbnRlcm5hbFBzZXVkb0lkOyBwc2V1ZG9JZCA9IHN0YXRpY19jYXN0PFBz
ZXVkb0lkPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHNldWRvSWQpICsgMSkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYXV0byBwcm90b2NvbFBzZXVkb0lkID0gcHJvdG9jb2xWYWx1ZUZvclBzZXVk
b0lkKHBzZXVkb0lkKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIG1hdGNoZWRSdWxlcyA9
IHN0eWxlUmVzb2x2ZXIucHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRv
SWQsIFN0eWxlOjpSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gbWF0Y2hlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzOjpj
cmVhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWRNYXRjaGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5zZXRQc2V1ZG9JZChwcm90b2NvbFBzZXVkb0lkLnZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnNldE1hdGNoZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdCht
YXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBwc2V1ZG9JZCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTUwNCw2NiArNTA2LDY2IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBzZXVkb0lkTWF0Y2hlcyA9IFdU
Rk1vdmUocHNldWRvRWxlbWVudHMpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSW5oZXJpdGVk
IHN0eWxlcy4KICAgICAgICAgaWYgKCFpbmNsdWRlSW5oZXJpdGVkIHx8ICppbmNsdWRlSW5oZXJp
dGVkKSB7Ci0gICAgICAgICAgICBhdXRvIGVudHJpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT46OmNyZWF0ZSgpOworICAgICAg
ICAgICAgaW5oZXJpdGVkID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDog
YW5jZXN0b3JzT2ZUeXBlPEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1
dG8mIHBhcmVudFN0eWxlUmVzb2x2ZXIgPSBhbmNlc3Rvci5zdHlsZVJlc29sdmVyKCk7CiAgICAg
ICAgICAgICAgICAgYXV0byBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTdHlsZVJlc29sdmVy
LnN0eWxlUnVsZXNGb3JFbGVtZW50KCZhbmNlc3RvciwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7Ci0gICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gUHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICAgICAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyhidWlsZEFycmF5Rm9yTWF0Y2hl
ZFJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwgYW5jZXN0b3IsIFBz
ZXVkb0lkOjpOb25lKSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAg
ICAgICAgICBpZiAoaXM8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpICYmIGRvd25jYXN0PFN0eWxl
ZEVsZW1lbnQ+KGFuY2VzdG9yKS5jc3NvbVN0eWxlKCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgYXV0byYgc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChkb3duY2Fz
dDxTdHlsZWRFbGVtZW50PihhbmNlc3RvcikpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+
c2V0SW5saW5lU3R5bGUoc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQu
c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0LmlkKCksIDApKSkpOwogICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGTW92ZShl
bnRyeSkpOworICAgICAgICAgICAgICAgIGluaGVyaXRlZC0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5
KSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluaGVyaXRlZEVudHJpZXMgPSBXVEZN
b3ZlKGVudHJpZXMpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgeyBXVEZNb3Zl
KG1hdGNoZWRDU1NSdWxlcyksIFdURk1vdmUocHNldWRvRWxlbWVudHMpLCBXVEZNb3ZlKGluaGVy
aXRlZCkgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzU3R5bGUpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyog
YXR0cmlidXRlc1N0eWxlICovPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zv
ck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBlbGVtZW50ID0gZWxlbWVudEZvcklk
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVu
dCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAogICAgIGF1dG8mIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVt
ZW50PigqZWxlbWVudCk7CiAgICAgYXV0byYgc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVT
aGVldChzdHlsZWRFbGVtZW50KTsKLSAgICBpbmxpbmVTdHlsZSA9IHN0eWxlU2hlZXQuYnVpbGRP
YmplY3RGb3JTdHlsZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpOwotICAgIGlmIChhdXRv
IGF0dHJpYnV0ZXMgPSBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShzdHlsZWRFbGVtZW50
KSkKLSAgICAgICAgYXR0cmlidXRlc1N0eWxlID0gV1RGTW92ZShhdHRyaWJ1dGVzKTsKLSAgICBl
bHNlCi0gICAgICAgIGF0dHJpYnV0ZXNTdHlsZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIHsgeyBz
dHlsZVNoZWV0LmJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnN0eWxlZEVsZW1lbnQuY3Nzb21TdHlsZSgp
KSwgYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoc3R5bGVkRWxlbWVudCkgfSB9OwogfQog
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mIHN0eWxlKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRl
ZFN0eWxlRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBhdXRvIGNvbXB1dGVkU3R5bGVJbmZvID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGUoKmVsZW1lbnQsIHRydWUpOwogICAgIGF1dG8gaW5zcGVjdG9yU3R5bGUgPSBJbnNw
ZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIFdURk1vdmUoY29tcHV0ZWRTdHls
ZUluZm8pLCBudWxscHRyKTsKLSAgICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5
Rm9yQ29tcHV0ZWRTdHlsZSgpOworICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVpbGRBcnJh
eUZvckNvbXB1dGVkU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxs
U3R5bGVTaGVldHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+PiYgc3R5bGVJbmZvcykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1N0
eWxlU2hlZXRIZWFkZXI+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKCkK
IHsKLSAgICBzdHlsZUluZm9zID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGhlYWRlcnMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+OjpjcmVhdGUo
KTsKIAogICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVNoZWV0Kj4gaW5zcGVjdG9yU3R5bGVTaGVl
dHM7CiAgICAgY29sbGVjdEFsbFN0eWxlU2hlZXRzKGluc3BlY3RvclN0eWxlU2hlZXRzKTsKLSAg
ICBmb3IgKGF1dG8qIGluc3BlY3RvclN0eWxlU2hlZXQgOiBpbnNwZWN0b3JTdHlsZVNoZWV0cykK
LSAgICAgICAgc3R5bGVJbmZvcy0+YWRkSXRlbShpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclN0eWxlU2hlZXRJbmZvKCkpOworICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKSB7CisgICAgICAgIGlmIChhdXRvIGhlYWRlciA9
IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSkKKyAg
ICAgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oaGVhZGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAg
IH0KKworICAgIHJldHVybiBXVEZNb3ZlKGhlYWRlcnMpOwogfQogCiB2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojpjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxlU2hlZXQq
PiYgcmVzdWx0KQpAQCAtNTk4LDExNiArNjAwLDEyNCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
Ojpjb2xsZWN0U3R5bGVTaGVldHMoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgVmVjdG9yPENT
UwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4mIHN0eWxlU2hlZXRP
YmplY3QpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGVTaGVldEJvZHk+PiBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChjb25zdCBQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxlU2hlZXRJZCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNw
ZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHls
ZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3R5
bGVTaGVldE9iamVjdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVT
aGVldCgpOworICAgIGF1dG8gc3R5bGVTaGVldCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBzdHlsZSBzaGVldCIp
OworCisgICAgcmV0dXJuIHN0eWxlU2hlZXQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0
VGV4dChjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxlU2hlZXRJZCkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JT
dHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVy
cm9yU3RyaW5nLCBzdHlsZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYXV0byB0ZXh0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+dGV4dCgpOwotICAg
IGlmICghdGV4dC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgKnJlc3VsdCA9IHRleHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CisgICAgaWYgKHRleHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyh0ZXh0
LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCisgICAgcmV0dXJuIHRleHQucmVsZWFzZVJldHVyblZh
bHVlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0
IFN0cmluZyYgdGV4dCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNT
U0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dChjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxl
U2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRv
KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsK
LSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9t
QWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJl
IGVuYWJsZWQiX3MpOwogCiAgICAgYXV0byByZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5w
ZXJmb3JtKG1ha2VVbmlxdWU8U2V0U3R5bGVTaGVldFRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxl
U2hlZXQsIHRleHQpKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBl
cnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBmdWxsU3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4+IEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoUmVmPEpTT046
Ok9iamVjdD4mJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgSW5zcGVjdG9y
Q1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChzdHlsZUlkKTsK
ICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JT
dHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9yU3R5
bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVyZm9y
bVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHls
ZVRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHRleHQpKTsKLSAg
ICBpZiAocGVyZm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocGVyZm9ybVJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3Bl
Y3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOworICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3Rv
clN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBKU09OOjpPYmplY3QmIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBydWxlSWQsIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVs
ZUlkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKHJ1bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlz
RW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0
ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hl
ZXRJZCgpKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8q
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwot
ICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBt
dXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21B
Z2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUg
ZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9y
eSgpLT5wZXJmb3JtKG1ha2VVbmlxdWU8U2V0UnVsZVNlbGVjdG9yQWN0aW9uPihpbnNwZWN0b3JT
dHlsZVNoZWV0LCBjb21wb3VuZElkLCBzZWxlY3RvcikpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3Vs
dCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHls
ZVNoZWV0LT5ydWxlRm9ySWQoY29tcG91bmRJZCkpOworICAgIGF1dG8gcnVsZSA9IGluc3BlY3Rv
clN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxl
Rm9ySWQoY29tcG91bmRJZCkpOworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBzdHlsZSBzaGVldCIpOworCisgICAg
cmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y3JlYXRlU3R5bGVTaGVldChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgU3RyaW5nKiBzdHlsZVNoZWV0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVT
dHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIHBhZ2VB
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYg
KCFwYWdlQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBi
ZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGFnZUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfcyk7CiAKICAgICBhdXRvKiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJy
b3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4g
ZnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvY3VtZW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZG9jdW1lbnQgb2YgZnJhbWUg
Zm9yIGdpdmVuIGZyYW1lSWQiX3MpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVj
dG9yU3R5bGVTaGVldCA9IGNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudCgqZG9j
dW1lbnQpOwotICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZvciBkb2N1bWVudCBvZiBmcmFt
ZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291
bGQgbm90IGNyZWF0ZSBzdHlsZSBzaGVldCBmb3IgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVu
IGZyYW1lSWQiX3MpOwogCi0gICAgKnN0eWxlU2hlZXRJZCA9IGluc3BlY3RvclN0eWxlU2hlZXQt
PmlkKCk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQtPmlkKCk7CiB9CiAKIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAtNzUxLDQxICs3NjEsNDIgQEAg
SW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0
eWxlU2hlZXRGb3JEb2N1bWVudChEb2MKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldHNG
b3JEb2N1bWVudC5sYXN0KCkuZ2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFk
ZFJ1bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoY29uc3QgUHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldElkJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRG
b3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxl
U2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIGFjdGlvbiA9
IG1ha2VVbmlxdWU8QWRkUnVsZUFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgc2VsZWN0b3Ip
OwogICAgIGF1dG8mIHJhd0FjdGlvbiA9ICphY3Rpb247CiAgICAgYXV0byBwZXJmb3JtUmVzdWx0
ID0gZG9tQWdlbnQtPmhpc3RvcnkoKS0+cGVyZm9ybShXVEZNb3ZlKGFjdGlvbikpOwotICAgIGlm
IChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
SW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkp
KTsKIAotICAgIEluc3BlY3RvckNTU0lkIHJ1bGVJZCA9IHJhd0FjdGlvbi5uZXdSdWxlSWQoKTsK
LSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQo
cnVsZUlkKTsKLSAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clJ1bGUocnVsZSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChyYXdBY3Rpb24ubmV3
UnVsZUlkKCkpKTsKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3Npbmcgc3R5bGUgc2hlZXQiKTsKKworICAgIHJldHVybiBy
dWxlLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1
cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+JiBjc3NQcm9wZXJ0aWVz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvPj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQ
cm9wZXJ0aWVzKCkKIHsKLSAgICBhdXRvIHByb3BlcnRpZXMgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjc3NQcm9wZXJ0aWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0
eUluZm8+OjpjcmVhdGUoKTsKKwogICAgIGZvciAoaW50IGkgPSBmaXJzdENTU1Byb3BlcnR5OyBp
IDw9IGxhc3RDU1NQcm9wZXJ0eTsgKytpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCA9IGNvbnZlcnRUb0NTU1Byb3BlcnR5SUQoaSk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgdGFrZSBhY2NvdW50IGZvciBmbGFncyBpbiBzZXR0aW5ncygpLgogICAgICAgICBpZiAoaXNJ
bnRlcm5hbENTU1Byb3BlcnR5KHByb3BlcnR5SUQpIHx8ICFpc0VuYWJsZWRDU1NQcm9wZXJ0eShw
cm9wZXJ0eUlEKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gcHJvcGVy
dHkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6Y3JlYXRlKCkK
KyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6
Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9w
ZXJ0eUlEKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTgyMSw2MyArODMyLDY2IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyCiAgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRJbmhl
cml0ZWQodHJ1ZSk7CiAKLSAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEZNb3ZlKHByb3Bl
cnR5KSk7CisgICAgICAgIGNzc1Byb3BlcnRpZXMtPmFkZEl0ZW0oV1RGTW92ZShwcm9wZXJ0eSkp
OwogICAgIH0KLSAgICBjc3NQcm9wZXJ0aWVzID0gV1RGTW92ZShwcm9wZXJ0aWVzKTsKKworICAg
IHJldHVybiBXVEZNb3ZlKGNzc1Byb3BlcnRpZXMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgZm9udEZhbWlseU5hbWVzKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckNTU0FnZW50
OjpnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoKQogewotICAgIGF1dG8gZmFtaWxp
ZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZm9udEZhbWls
eU5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKIAogICAgIFZlY3RvcjxT
dHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVt
Rm9udEZhbWlsaWVzKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBmYW1pbHlOYW1lIDogc3lzdGVt
Rm9udEZhbWlsaWVzKQotICAgICAgICBmYW1pbGllcy0+YWRkSXRlbShmYW1pbHlOYW1lKTsKKyAg
ICAgICAgZm9udEZhbWlseU5hbWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOwogCi0gICAgZm9udEZh
bWlseU5hbWVzID0gV1RGTW92ZShmYW1pbGllcyk7CisgICAgcmV0dXJuIFdURk1vdmUoZm9udEZh
bWlseU5hbWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5
JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5v
ZGVJZCwgUmVmPEpTT046OkFycmF5PiYmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogZG9tQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21B
Z2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxl
ZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsK
IAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb21BZ2VudC0+YXNzZXJ0RWxlbWVudChlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIFJldHVybiBl
YXJseSBpZiB0aGUgZm9yY2VkIHBzZXVkbyBzdGF0ZSB3YXMgYWxyZWFkeSBzZXQgY29ycmVjdGx5
LgogICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKICAgICBpZiAoZm9yY2VkUHNldWRvU3RhdGUpIHsKICAg
ICAgICAgYXV0byBpdGVyYXRvciA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5hZGQobm9k
ZUlkLCAwKS5pdGVyYXRvcjsKICAgICAgICAgaWYgKGZvcmNlZFBzZXVkb1N0YXRlID09IGl0ZXJh
dG9yLT52YWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB7IH07
CiAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZSA9IGZvcmNlZFBzZXVkb1N0YXRlOwogICAgICAgICBt
X2RvY3VtZW50c1dpdGhGb3JjZWRQc2V1ZG9TdGF0ZXMuYWRkKCZlbGVtZW50LT5kb2N1bWVudCgp
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIGlmIChtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuaXNFbXB0eSgp
KQogICAgICAgICAgICAgbV9kb2N1bWVudHNXaXRoRm9yY2VkUHNldWRvU3RhdGVzLmNsZWFyKCk7
CiAgICAgfQogCiAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdl
U3R5bGVTaGVldEVudmlyb25tZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3Rv
clN0eWxlU2hlZXQoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gbV9ub2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuc3VyZSgmZWxlbWVudCwgW3RoaXMsICZlbGVtZW50XSB7
CiAgICAgICAgIFN0cmluZyBuZXdTdHlsZVNoZWV0SWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RT
dHlsZVNoZWV0SWQrKyk7Ci0gICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3IsIHRoaXMpOworICAgICAg
ICBhdXRvIGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpLCBu
ZXdTdHlsZVNoZWV0SWQsIGVsZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
OkF1dGhvciwgdGhpcyk7CiAgICAgICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KG5l
d1N0eWxlU2hlZXRJZCwgaW5zcGVjdG9yU3R5bGVTaGVldC5jb3B5UmVmKCkpOwogICAgICAgICBy
ZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAK
LUVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1l
bnRGb3JJZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbm9kZUlkKQogewogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwogICAgIGlmICghZG9tQWdlbnQpIHsKQEAgLTkx
NCw3ICs5MjgsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6Ymlu
ZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldAogICAgIHJldHVybiBpbnNwZWN0
b3JTdHlsZVNoZWV0LmdldCgpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JD
U1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQpCitJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKQogewogICAgIElkVG9JbnNw
ZWN0b3JTdHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQu
ZmluZChzdHlsZVNoZWV0SWQpOwogICAgIGlmIChpdCA9PSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmVuZCgpKSB7CkBAIC05MjQsMjkgKzkzOCwyOSBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJv
cgogICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENT
U1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKK1By
b3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9y
aWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1l
bnQpCiB7CiAgICAgaWYgKG1fY3JlYXRpbmdWaWFJbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNw
ZWN0b3I7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3I7CiAKICAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5v
d25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFn
ZW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNl
ckFnZW50OwogCiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmIHBhZ2VTdHlsZVNoZWV0LT5jb250
ZW50cygpLmlzVXNlclN0eWxlU2hlZXQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7CiAKICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKG93bmVyRG9jdW1lbnQpOwogICAg
IGlmIChpdGVyYXRvciAhPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKSB7
CiAgICAgICAgIGZvciAoYXV0byYgaW5zcGVjdG9yU3R5bGVTaGVldCA6IGl0ZXJhdG9yLT52YWx1
ZSkgewogICAgICAgICAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ID09IGluc3BlY3RvclN0eWxlU2hl
ZXQtPnBhZ2VTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yOworICAgICAgICAgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3I7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luOjpBdXRob3I7CisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OkF1dGhvcjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShjb25zdCBT
dHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBFbGVt
ZW50JiBlbGVtZW50KQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNT
U0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoY29uc3QgU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0
eWxlOjpSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBp
ZiAoIXN0eWxlUnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05NjgsNyArOTgyLDcg
QEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVl
dCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShjc3NvbVdyYXBwZXIp
IDogbnVsbHB0cjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1
bGUpCitSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKCFydWxlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk3OCwxNiArOTkyLDE2IEBAIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9i
amVjdEZvclJ1bGUoCiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQgPyBpbnNwZWN0b3JT
dHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVsZSkgOiBudWxscHRyOwogfQogCi1SZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGU6OlJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBFbGVtZW50JiBlbGVtZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKK1Jl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0Fn
ZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29u
c3QgU3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBFbGVtZW50JiBlbGVtZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKLSAgICBhdXRvIHJl
c3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+
OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPjo6Y3JlYXRlKCk7CiAKICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCBjb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzKTsK
ICAgICBjb250ZXh0LnBzZXVkb0lkID0gcHNldWRvSWQgIT0gUHNldWRvSWQ6Ok5vbmUgPyBwc2V1
ZG9JZCA6IGVsZW1lbnQucHNldWRvSWQoKTsKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JD
aGVja2VyKGVsZW1lbnQuZG9jdW1lbnQoKSk7CiAKICAgICBmb3IgKGF1dG8mIG1hdGNoZWRSdWxl
IDogbWF0Y2hlZFJ1bGVzKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1J1bGU+IHJ1bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUobWF0Y2hlZFJ1bGUu
Z2V0KCksIHN0eWxlUmVzb2x2ZXIsIGVsZW1lbnQpOworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVs
ZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVudCk7CiAgICAgICAgIGlmICghcnVsZU9iamVj
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMDAxLDggKzEwMTUsOCBAQCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3Bl
Y3RvckNTU0FnZW50OjpidQogICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQogCi0gICAg
ICAgIGF1dG8gbWF0Y2ggPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaDo6Y3Jl
YXRlKCkKLSAgICAgICAgICAgIC5zZXRSdWxlKFdURk1vdmUocnVsZU9iamVjdCkpCisgICAgICAg
IGF1dG8gbWF0Y2ggPSBQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAuc2V0UnVsZShydWxlT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgICAgICAu
c2V0TWF0Y2hpbmdTZWxlY3RvcnMoV1RGTW92ZShtYXRjaGluZ1NlbGVjdG9ycykpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oV1RGTW92ZShtYXRjaCkp
OwpAQCAtMTAxMSw3ICsxMDI1LDcgQEAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKFN0eWxl
ZEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShTdHlsZWRFbGVtZW50
JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiBVZ2xpbmVzcyBiZWxvdy4KICAgICBhdXRvKiBh
dHRyaWJ1dGVTdHlsZSA9IGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0aWVzKj4oZWxlbWVudC5wcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKQEAgLTEwMjMsNyArMTAzNyw3IEBAIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVp
bGRPYmplY3RGb3JBdHRyCiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZv
clN0eWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUo
Tm9kZSYgbm9kZSwgaW50IG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUoTm9kZSYgbm9kZSwgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAg
ICBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUucmVtb3ZlKG5vZGVJZCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRl
eCBmYTFkNjcxZGQ4MzNiMDAzYTYxZGMyNzk2NTk2NjkyMTYxYWFkZjdmLi5kMmZjYTc5NWRjNjgw
Zjk4ZGU4NmNiY2MxZDZlOTBjOGNhN2M3MGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC02MSw3ICs2MSw3IEBAIGNs
YXNzIEluc3BlY3RvckNTU0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSAs
IHB1YmxpYyBJbnNwZWN0b3I6OkNTCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3Bl
Y3RvckNTU0FnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckNTU0FnZW50KCk7CiAKICAg
ICBjbGFzcyBJbmxpbmVTdHlsZU92ZXJyaWRlU2NvcGUgewogICAgIHB1YmxpYzoKQEAgLTgzLDI5
ICs4MywyOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1
bGUoQ1NTUnVsZSYpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAK
ICAgICAvLyBDU1NCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRJbmxpbmVT
dHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3Qg
Ym9vbCogaW5jbHVkZVBzZXVkbywgY29uc3QgYm9vbCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiYgbWF0
Y2hlZENTU1J1bGVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkTWF0Y2hlcz4+JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpIG92
ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFk
ZXI+PiYgc3R5bGVTaGVldEluZm9zKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFN0eWxlU2hlZXQo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiByZXN1bHQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U3R5bGVT
aGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFN0eWxlVGV4dChFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjcmVhdGVT
dHlsZVNoZWV0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0
eWxlU2hlZXRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRSdWxlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4mIHJl
c3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFt
ZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBKU09OOjpBcnJheSYgZm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4+IGdldENv
bXB1dGVkU3R5bGVGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IC8qIGlubGluZVN0eWxlICovLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyogYXR0cmlidXRlc1N0eWxl
ICovPj4gZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxl
PFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNo
Pj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWRNYXRjaGVzPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+Pj4gZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBzZXVk
bywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBnZXRBbGxTdHlsZVNoZWV0cygpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+PiBnZXRTdHlsZVNoZWV0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTdHlsZVNoZWV0VGV4dChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZT4+IHNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxl
SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gc2V0UnVsZVNl
bGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldElkPiBjcmVhdGVTdHlsZVNoZWV0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBh
ZGRSdWxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJiwgY29u
c3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5SW5mbz4+PiBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gZ2V0U3Vw
cG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBmb3JjZVBzZXVkb1N0YXRlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAK
ICAgICAvLyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpMaXN0ZW5lcgotICAgIHZvaWQgc3R5bGVTaGVl
dENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCopIG92ZXJyaWRlOworICAgIHZvaWQgc3R5bGVT
aGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCopOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkb2N1bWVudERldGFjaGVkKERvY3VtZW50Jik7CkBAIC0x
MTQsNyArMTE0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBF
bGVtZW50JiwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSk7CiAKICAgICAvLyBJbnNwZWN0
b3JET01BZ2VudCBob29rcwotICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiwgaW50IG5v
ZGVJZCk7CisgICAgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUmLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCk7CiAgICAgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQmKTsK
IAogICAgIHZvaWQgcmVzZXQoKTsKQEAgLTEyNiwyOCArMTI2LDI4IEBAIHByaXZhdGU6CiAgICAg
Y2xhc3MgU2V0UnVsZVNlbGVjdG9yQWN0aW9uOwogICAgIGNsYXNzIEFkZFJ1bGVBY3Rpb247CiAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+
IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+
PiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVT
aGVldCosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gQ1NTU3R5bGVTaGVldFRvSW5zcGVj
dG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERvY3VtZW50PiwgVmVj
dG9yPFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4+IERvY3VtZW50VG9WaWFJbnNwZWN0b3JT
dHlsZVNoZWV0OyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKLSAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCB1bnNpZ25lZD4gTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIHVuc2lnbmVkPiBO
b2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlJiBhc0luc3BlY3RvclN0eWxlU2hlZXQoU3R5bGVkRWxlbWVudCYpOwotICAgIEVs
ZW1lbnQqIGVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOworICAgIEVsZW1l
bnQqIGVsZW1lbnRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKIAogICAgIHZvaWQgY29sbGVjdEFsbFN0eWxl
U2hlZXRzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIGNvbGxlY3RB
bGxEb2N1bWVudFN0eWxlU2hlZXRzKERvY3VtZW50JiwgVmVjdG9yPENTU1N0eWxlU2hlZXQqPiYp
OwogICAgIHZvaWQgY29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8Q1NT
U3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50
KERvY3VtZW50JiwgVmVjdG9yPENTU1N0eWxlU2hlZXQqPiYgYWN0aXZlU3R5bGVTaGVldHMpOwog
Ci0gICAgU3RyaW5nIHVuYmluZFN0eWxlU2hlZXQoSW5zcGVjdG9yU3R5bGVTaGVldCopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkIHVuYmluZFN0eWxlU2hlZXQo
SW5zcGVjdG9yU3R5bGVTaGVldCopOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGJpbmRTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3NlcnRT
dHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZCYpOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRG
b3JEb2N1bWVudChEb2N1bWVudCYpOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbiBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShjb25zdCBTdHlsZVJ1bGUqLCBT
dHlsZTo6UmVzb2x2ZXImLCBFbGVtZW50Jik7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNo
Pj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0
IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVyJiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKKyAg
ICBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+
IGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBT
dHlsZVJ1bGU+PiYsIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmLCBQc2V1ZG9JZCk7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCmluZGV4
IGQwOTE2ODI5NDAwZjk0NmYwODYwMDk1OGFhNDQzZTU3MDczZmU4YWEuLmE4NTAzOGY1YzA2Nzdl
N2Q5MjgxOTRkYjdkMDQwOWE5NDhiYzk2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC0xMDIsOCAr
MTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0
UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVk
KTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2Nh
cmRBZ2VudCgpCkBAIC0xMTEsMTAgKzExMCwxMCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjpkaXNjYXJkQWdlbnQoKQogICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmVuYWJsZWRDYW52YXNBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFi
bGVkQ2FudmFzQWdlbnQodGhpcyk7CiAKQEAgLTE3MCw3MyArMTY5LDg0IEBAIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ2FudmFzQWdlbnQobnVsbHB0cik7CiAKICAg
ICByZXNldCgpOwogCiAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBXVEY6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpyZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
Y2FudmFzSWQsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0
SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIG5vZGUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZh
c0VsZW1lbnQoKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBlbGVtZW50IG9mIGNhbnZhcyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFub2RlKQorICAgICAgICBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBlbGVtZW50IG9mIGNhbnZhcyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogCiAgICAgLy8g
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93
IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9m
IHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAg
ICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERP
TUFnZW50KCktPmJvdW5kTm9kZUlkKCZub2RlLT5kb2N1bWVudCgpKTsKLSAgICBpZiAoIWRvY3Vt
ZW50Tm9kZUlkKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRvY3VtZW50IG11c3QgaGF2ZSBi
ZWVuIHJlcXVlc3RlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvY3Vt
ZW50Tm9kZUlkKQorICAgICAgICBtYWtlVW5leHBlY3RlZCgiRG9jdW1lbnQgbXVzdCBoYXZlIGJl
ZW4gcmVxdWVzdGVkIl9zKTsKIAotICAgICpub2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMu
cGVyc2lzdGVudERPTUFnZW50KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9j
dW1lbnROb2RlSWQsIG5vZGUpOworICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVy
c2lzdGVudERPTUFnZW50KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1l
bnROb2RlSWQsIG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQs
IFN0cmluZyogY29udGVudCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhl
cnJvclN0cmluZywgY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
LSAgICAqY29udGVudCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVS
TChlcnJvclN0cmluZyk7CisgICAgYXV0byByZXN1bHQgPSBpbnNwZWN0b3JDYW52YXMtPmdldENh
bnZhc0NvbnRlbnRBc0RhdGFVUkwoZXJyb3JTdHJpbmcpOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5vZGVz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8aW50Pj4mIGNsaWVudE5vZGVJZHMpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpD
YW52YXNJZCYgY2FudmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3Ry
aW5nOworCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lz
dGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRP
TSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGNsaWVudE5vZGVJZHMgPSBKU09OOjpBcnJh
eU9mPGludD46OmNyZWF0ZSgpOworICAgIGF1dG8gY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBjbGll
bnROb2RlIDogaW5zcGVjdG9yQ2FudmFzLT5jbGllbnROb2RlcygpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBE
T00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3
aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCiAgICAg
ICAgIGlmIChhdXRvIGRvY3VtZW50Tm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZjbGll
bnROb2RlLT5kb2N1bWVudCgpKSkKICAgICAgICAgICAgIGNsaWVudE5vZGVJZHMtPmFkZEl0ZW0o
ZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQs
IGNsaWVudE5vZGUpKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUoY2xpZW50Tm9kZUlkcyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDb250ZXh0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDb250ZXh0
KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJv
clN0cmluZywgY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBhdXRvKiBzdGF0ZSA9IGluc3BlY3RvckNhbnZhcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMjQ2LDEyMiArMjU2LDEyOSBA
QCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ29udGV4dChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJy
b3I6IHVua25vd24gY29udGV4dCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJy
b3I6IHVua25vd24gY29udGV4dCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zKTsKICAg
ICB9CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0
R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0
KHZhbHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gcmVzdWx0ID0gaW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2Fz
dCBDb250ZXh0Iik7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVD
b3VudChFcnJvclN0cmluZyYsIGludCBjb3VudCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291
bnQoaW50IGNvdW50KQogewogICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgIG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50ID0gY291bnQ7CiAgICAgZWxzZQogICAgICAgICBtX3JlY29y
ZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJh
bWVDb3VudCwgY29uc3QgaW50KiBtZW1vcnlMaW1pdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhjb25zdCBQcm90b2Nv
bDo6Q2FudmFzOjpDYW52YXNJZCYgY2FudmFzSWQsIE9wdGlvbmFsPGludD4mJiBmcmFtZUNvdW50
LCBPcHRpb25hbDxpbnQ+JiYgbWVtb3J5TGltaXQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNw
ZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNh
bnZhcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5v
cmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3Jk
aW5ncyBmb3IgV2ViR1BVRGV2aWNlCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXND
b250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
Y29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJB
bHJlYWR5IHJlY29yZGluZyBjYW52YXMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENh
bnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQi
X3MpOworCisgICAgaWYgKGNvbnRleHQtPmNhbGxUcmFjaW5nQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQWxyZWFkeSByZWNvcmRpbmcgY2FudmFzIl9zKTsKIAogICAg
IFJlY29yZGluZ09wdGlvbnMgcmVjb3JkaW5nT3B0aW9uczsKICAgICBpZiAoZnJhbWVDb3VudCkK
ICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gKmZyYW1lQ291bnQ7CiAgICAg
aWYgKG1lbW9yeUxpbWl0KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLm1lbW9yeUxpbWl0ID0g
Km1lbW9yeUxpbWl0OwotICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0b3JDYW52YXMsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpGcm9udGVuZCwgV1RGTW92ZShy
ZWNvcmRpbmdPcHRpb25zKSk7CisgICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywg
UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpGcm9udGVuZCwgV1RGTW92ZShyZWNvcmRp
bmdPcHRpb25zKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNh
bnZhc0FnZW50OjpzdG9wUmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lk
JiBjYW52YXNJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisK
ICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0
cmluZywgY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIElu
c3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZp
Y2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1
dG8qIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNp
bmdBY3RpdmUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJOb3QgcmVjb3JkaW5nIGNhbnZh
cyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyBy
ZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoIWNvbnRl
eHQtPmNhbGxUcmFjaW5nQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Tm90IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFz
RnJhbWUoKmNvbnRleHQsIHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogI2lmIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJl
cXVlc3RTaGFkZXJTb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBlU3RyaW5nLCBTdHJpbmcqIG91dFNv
dXJjZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OnJlcXVlc3RTaGFkZXJTb3VyY2UoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiBwcm9ncmFtSWQsIFByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3Bl
Y3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFt
SWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byBzaGFkZXJU
eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hh
ZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJUeXBlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJUeXBlOiAiX3MsIHNoYWRlclR5cGVTdHJp
bmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gc291cmNlID0gaW5zcGVjdG9y
UHJvZ3JhbS0+cmVxdWVzdFNoYWRlclNvdXJjZShzaGFkZXJUeXBlKTsKKyAgICBpZiAoIXNvdXJj
ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNoYWRlciBvZiBnaXZl
biBzaGFkZXJUeXBlIGZvciBnaXZlbiBwcm9ncmFtSWQiX3MpOwogCi0gICAgYXV0byBzb3VyY2Ug
PSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNlKHNoYWRlclR5cGUudmFsdWUo
KSk7Ci0gICAgaWYgKCFzb3VyY2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBz
aGFkZXIgb2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgKm91dFNvdXJjZSA9IHNvdXJjZTsKKyAgICByZXR1cm4g
c291cmNlOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3Ry
aW5nJiBzaGFkZXJUeXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIFByb3RvY29sOjpDYW52
YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JQ
cm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlkKTsK
ICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1dG8gc2hhZGVyVHlwZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGU+KHNoYWRlclR5
cGVTdHJpbmcpOwotICAgIGlmICghc2hhZGVyVHlwZSkgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gc2hhZGVyVHlwZTogIl9zLCBzaGFkZXJUeXBlU3RyaW5nKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWluc3BlY3RvclByb2dyYW0tPnVwZGF0
ZVNoYWRlcihzaGFkZXJUeXBlLCBzb3VyY2UpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkZhaWxlZCB0byB1cGRhdGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVu
IHByb2dyYW1JZCJfcyk7CiAKLSAgICBpZiAoIWluc3BlY3RvclByb2dyYW0tPnVwZGF0ZVNoYWRl
cihzaGFkZXJUeXBlLnZhbHVlKCksIHNvdXJjZSkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkZh
aWxlZCB0byB1cGRhdGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfczsKKyAgICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hh
ZGVyUHJvZ3JhbURpc2FibGVkKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYgcHJv
Z3JhbUlkLCBib29sIGRpc2FibGVkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclBy
b2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFt
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKICAgICBpbnNwZWN0b3JQcm9ncmFtLT5zZXREaXNhYmxlZChkaXNhYmxlZCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQo
Y29uc3QgUHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxp
Z2h0ZWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmlu
ZywgcHJvZ3JhbUlkKTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlu
c3BlY3RvclByb2dyYW0tPnNldEhpZ2hsaWdodGVkKGhpZ2hsaWdodGVkKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKQEAgLTQxMyw3ICs0MzAsNyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KENhbnZhc1JlbmRlcmlu
Z0NvbnRleAogICAgIGlmIChtX3JlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudCkgewogICAg
ICAgICBSZWNvcmRpbmdPcHRpb25zIHJlY29yZGluZ09wdGlvbnM7CiAgICAgICAgIHJlY29yZGlu
Z09wdGlvbnMuZnJhbWVDb3VudCA9IG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50LnZh
bHVlKCk7Ci0gICAgICAgIHN0YXJ0UmVjb3JkaW5nKGluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkF1dG9DYXB0dXJlLCBXVEZNb3ZlKHJl
Y29yZGluZ09wdGlvbnMpKTsKKyAgICAgICAgc3RhcnRSZWNvcmRpbmcoaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkF1dG9DYXB0dXJlLCBXVEZNb3ZlKHJl
Y29yZGluZ09wdGlvbnMpKTsKICAgICB9CiB9CiAKQEAgLTU3Myw3ICs1OTAsNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgYwogICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbk5hbWUgPSBv
cHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUi
KSkpCiAgICAgICAgICAgICByZWNvcmRpbmdPcHRpb25zLm5hbWUgPSBvcHRpb25OYW1lLnRvV1RG
U3RyaW5nKCZleGVjKTsKICAgICB9Ci0gICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZh
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUsIFdU
Rk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0b3JD
YW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShy
ZWNvcmRpbmdPcHRpb25zKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNv
bGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCkBA
IC02OTgsNyArNzE1LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lX
ZWJHUFVQaXBlbGluZShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUpCiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmco
SW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6SW5pdGlhdG9yIGluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGlu
Z09wdGlvbnMpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNw
ZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlh
dG9yIGluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGluZ09wdGlvbnMpCiB7CiAg
ICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZhcy5jYW52YXNDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwpAQCAtODQwLDcgKzg1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKICAg
ICAgICAgbV9jYW52YXNEZXN0cm95ZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3Rv
ckNhbnZhcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQp
CitSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yQ2FudmFzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgY2FudmFzSWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBtX2lkZW50aWZp
ZXJUb0luc3BlY3RvckNhbnZhcy5nZXQoY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2Fu
dmFzKSB7CkBAIC04ODUsNyArOTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5i
aW5kUHJvZ3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJiBpbnNwZWN0b3JQcm9ncmEKICAgICAg
ICAgbV9wcm9ncmFtRGVzdHJveWVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKLVJlZlB0
cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yUHJvZ3JhbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJv
Z3JhbUlkKQorUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZhc0Fn
ZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkKQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJv
Z3JhbSA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbS5nZXQocHJvZ3JhbUlkKTsKICAg
ICBpZiAoIWluc3BlY3RvclByb2dyYW0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAppbmRleCAwZWYxYWVmYjY0N2Vh
ZDk5YjdkMGViMjQzZmQwYjQwOGNlNDViNjBmLi44NmJkYjUxMjU2OWEzMTFmN2EyNTA4OTVlOGZm
YmM5ZGQ5ZWJjZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC01Nyw0MyArNTcsNDEgQEAgY2xhc3MgV2Vi
R1BVU3dhcENoYWluOwogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQogY2xhc3MgSW5zcGVjdG9yQ2FudmFzQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIs
IHB1YmxpYyBDYW52YXNPYnNlcnZlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPEluc3BlY3RvckNh
bnZhc0FnZW50PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ2FudmFzQWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rv
ckNhbnZhc0FnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ2FudmFzQWdl
bnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKTsKIAogICAgIC8vIElu
c3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzY2FyZEFnZW50KCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbik7CisgICAgdm9pZCBkaXNjYXJkQWdlbnQoKTsKIAogICAgIC8vIENhbnZhc0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1
ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGludCogbm9kZUlk
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
cXVlc3RDbGllbnROb2RlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPGludD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlQ29u
dGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IFN0cmluZyog
b2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1l
Q291bnQoRXJyb3JTdHJpbmcmLCBpbnQgY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnRS
ZWNvcmRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25zdCBpbnQq
IGZyYW1lQ291bnQsIGNvbnN0IGludCogbWVtb3J5TGltaXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZD4gcmVxdWVzdE5vZGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2FudmFzOjpDYW52YXNJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiByZXF1ZXN0Q29udGVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBy
ZXF1ZXN0Q2xpZW50Tm9kZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52
YXNJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVDb250ZXh0KGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmLCBjb25zdCBTdHJpbmcm
IG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRSZWNvcmRpbmcoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYsIE9wdGlvbmFsPGludD4mJiBmcmFt
ZUNvdW50LCBPcHRpb25hbDxpbnQ+JiYgbWVtb3J5TGltaXQpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQotICAgIHZvaWQgcmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIFN0cmluZyog
c291cmNlKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIGNvbnN0IFN0
cmluZyYgc291cmNlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFN0cmluZz4gcmVxdWVzdFNoYWRlclNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hh
ZGVyVHlwZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB1
cGRhdGVTaGFkZXIoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQm
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYg
c291cmNlKTsKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtRGlz
YWJsZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxl
ZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmLCBib29sIGRpc2FibGVkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgaGlnaGxpZ2h0ZWQpOwogI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJH
UFUpCiAKICAgICAvLyBDYW52YXNPYnNlcnZlcgotICAgIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52
YXNCYXNlJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW52YXNSZXNp
emVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChD
YW52YXNCYXNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2Um
LCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYp
IHsgfQorICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKTsKIAogICAgIC8vIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmKTsK
QEAgLTEzOCw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENh
bnZhcyhXZWJHUFVEZXZpY2UmLCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwogI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJik7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7CisgICAgUmVmUHRyPEluc3BlY3RvckNhbnZh
cz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4g
ZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxF
KFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFz
KFdlYkdQVURldmljZSYpOwpAQCAtMTQ2LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFC
TEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRQcm9ncmFtKEluc3Bl
Y3RvclNoYWRlclByb2dyYW0mKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4g
YXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gYXNzZXJ0SW5zcGVjdG9y
UHJvZ3JhbShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cHJvZ3JhbUlkKTsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRl
clByb2dyYW0+IGZpbmRJbnNwZWN0b3JQcm9ncmFtKFdlYkdMUHJvZ3JhbSYpOwogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggODM5YTU4YjU0ODg1NGRlNzU3NzBkMjYzM2Q4
ZDU5YWY1OWYyNDExMi4uZGJkYjg1MThjOWExZGJlMWFhZjc3YjAyMmY2MGE5YzE2ZDQ0MDM4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTEyOSw0MCArMTI5LDM5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHRTaXplID0gMTAwMDA7CiBzdGF0aWMgY29u
c3QgVUNoYXIgZWxsaXBzaXNVQ2hhcltdID0geyAweDIwMjYsIDAgfTsKIAotc3RhdGljIENvbG9y
IHBhcnNlQ29sb3IoY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvck9iamVjdCkKK3N0YXRpYyBDb2xv
ciBwYXJzZUNvbG9yKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3JPYmplY3QpCiB7CiAgICAg
aWYgKCFjb2xvck9iamVjdCkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
OwogCi0gICAgaW50IHIgPSAwOwotICAgIGludCBnID0gMDsKLSAgICBpbnQgYiA9IDA7Ci0gICAg
aWYgKCFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiciIsIHIpIHx8ICFjb2xvck9iamVjdC0+Z2V0
SW50ZWdlcigiZyIsIGcpIHx8ICFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiYiIsIGIpKQorICAg
IGF1dG8gciA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6cktleSk7CisgICAgYXV0byBnID0gY29sb3JPYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6
OkRPTTo6UkdCQUNvbG9yOjpnS2V5KTsKKyAgICBhdXRvIGIgPSBjb2xvck9iamVjdC0+Z2V0SW50
ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmJLZXkpOworICAgIGlmICghciB8fCAhZyB8
fCAhYikKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCi0gICAgZG91
YmxlIGEgPSAxLjA7Ci0gICAgaWYgKCFjb2xvck9iamVjdC0+Z2V0RG91YmxlKCJhIiwgYSkpCi0g
ICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIpOwotICAg
IHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYSkpOworICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUoUHJv
dG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBj
bGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGUoKmEpKTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3Ry
aW5nJiBmaWVsZE5hbWUsIGNvbnN0IEpTT046Ok9iamVjdCogY29uZmlnT2JqZWN0KQorc3RhdGlj
IENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9i
amVjdCYgY29uZmlnT2JqZWN0KQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvbG9yT2Jq
ZWN0OwotICAgIGNvbmZpZ09iamVjdC0+Z2V0T2JqZWN0KGZpZWxkTmFtZSwgY29sb3JPYmplY3Qp
OwotCi0gICAgcmV0dXJuIHBhcnNlQ29sb3IoY29sb3JPYmplY3QuZ2V0KCkpOworICAgIHJldHVy
biBwYXJzZUNvbG9yKGNvbmZpZ09iamVjdC5nZXRPYmplY3QoZmllbGROYW1lKSk7CiB9CiAKLXN0
YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBKU09OOjpBcnJheSYgcXVhZEFycmF5LCBGbG9hdFF1
YWQqIHF1YWQpCitzdGF0aWMgYm9vbCBwYXJzZVF1YWQoUmVmPEpTT046OkFycmF5PiYmIHF1YWRB
cnJheSwgRmxvYXRRdWFkKiBxdWFkKQogewogICAgIGNvbnN0IHNpemVfdCBjb29yZGluYXRlc0lu
UXVhZCA9IDg7CiAgICAgZG91YmxlIGNvb3JkaW5hdGVzW2Nvb3JkaW5hdGVzSW5RdWFkXTsKLSAg
ICBpZiAocXVhZEFycmF5Lmxlbmd0aCgpICE9IGNvb3JkaW5hdGVzSW5RdWFkKQorICAgIGlmIChx
dWFkQXJyYXktPmxlbmd0aCgpICE9IGNvb3JkaW5hdGVzSW5RdWFkKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29yZGluYXRlc0luUXVhZDsgKytp
KSB7Ci0gICAgICAgIGlmICghcXVhZEFycmF5LmdldChpKS0+YXNEb3VibGUoKihjb29yZGluYXRl
cyArIGkpKSkKKyAgICAgICAgYXV0byBjb29yZGluYXRlID0gcXVhZEFycmF5LT5nZXQoaSktPmFz
RG91YmxlKCk7CisgICAgICAgIGlmICghY29vcmRpbmF0ZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY29vcmRpbmF0ZXNbaV0gPSAqY29vcmRpbmF0ZTsKICAgICB9CiAgICAg
cXVhZC0+c2V0UDEoRmxvYXRQb2ludChjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pKTsK
ICAgICBxdWFkLT5zZXRQMihGbG9hdFBvaW50KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sz
XSkpOwpAQCAtMjQzLDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBhdXRvKiBub2RlID0gZG93bmNhc3Q8Tm9kZT4oZXZlbnQudGFyZ2V0KCkpOwotICAg
ICAgICBpbnQgbm9kZUlkID0gbV9kb21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUp
OworICAgICAgICBhdXRvIG5vZGVJZCA9IG1fZG9tQWdlbnQucHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChub2RlKTsKICAgICAgICAgaWYgKCFub2RlSWQpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAg
LTMyMCw5ICszMTksOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzbwogICAgIG1fbW91c2VkT3Zl
ck5vZGUgPSBudWxscHRyOwogICAgIG1faW5zcGVjdGVkTm9kZSA9IG51bGxwdHI7CiAKLSAgICBF
cnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwog
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoaWdub3JlZCwgZmFsc2UsIG51bGxwdHIsIGZhbHNlKTsK
LSAgICBoaWRlSGlnaGxpZ2h0KGlnbm9yZWQpOworICAgIGhpZGVIaWdobGlnaHQoKTsKIAogICAg
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50RE9NQWdlbnQobnVsbHB0cik7CiAg
ICAgbV9kb2N1bWVudFJlcXVlc3RlZCA9IGZhbHNlOwpAQCAtMzc0LDkgKzM3Myw5IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbGVhc2VEYW5nbGluZ05vZGVzKCkKICAgICBtX2RhbmdsaW5n
Tm9kZVRvSWRNYXBzLmNsZWFyKCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChO
b2RlKiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitQcm90b2NvbDo6RE9NOjpOb2RlSWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFw
KQogewotICAgIGludCBpZCA9IG5vZGVzTWFwLT5nZXQobm9kZSk7CisgICAgYXV0byBpZCA9IG5v
ZGVzTWFwLT5nZXQobm9kZSk7CiAgICAgaWYgKGlkKQogICAgICAgICByZXR1cm4gaWQ7CiAgICAg
aWQgPSBtX2xhc3ROb2RlSWQrKzsKQEAgLTM4OCw3ICszODcsNyBAQCBpbnQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogCiB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFw
KQogewotICAgIGludCBpZCA9IG5vZGVzTWFwLT5nZXQobm9kZSk7CisgICAgYXV0byBpZCA9IG5v
ZGVzTWFwLT5nZXQobm9kZSk7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00
MjIsNyArNDIxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUs
IE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKICAgICB9CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK05v
ZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnROb2RlKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSog
bm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkgewpAQCAtNDMyLDcgKzQz
MSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotRG9jdW1lbnQq
IEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQpCitEb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERvY3Vt
ZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDQ0LDcgKzQ0Myw3IEBAIERvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkCiAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pihub2RlKTsKIH0KIAot
RWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dEVsZW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC00NTYsNyArNDU1LDcgQEAgRWxlbWVu
dCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkKQogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0K
IAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNz
ZXJ0RWRpdGFibGVOb2RlKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDcyLDcgKzQ3MSw3IEBA
IE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLUVsZW1lbnQq
IEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dEVkaXRhYmxlRWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0
YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDg0LDI3
ICs0ODMsMjcgQEAgRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlRWxl
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludAogICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RG9jdW1lbnQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPiYgcm9vdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6RE9N
OjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldERvY3VtZW50KCkKIHsKICAgICBtX2RvY3Vt
ZW50UmVxdWVzdGVkID0gdHJ1ZTsKIAotICAgIGlmICghbV9kb2N1bWVudCkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBkb2N1bWVudCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3NpbmcgZG9jdW1lbnQiX3MpOwogCiAg
ICAgLy8gUmVzZXQgYmFja2VuZCBzdGF0ZS4KICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50
ID0gbV9kb2N1bWVudDsKICAgICByZXNldCgpOwogICAgIG1fZG9jdW1lbnQgPSBkb2N1bWVudDsK
IAotICAgIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1f
ZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAgYXV0byByb290ID0gYnVpbGRPYmplY3RGb3JOb2Rl
KG1fZG9jdW1lbnQuZ2V0KCksIDIsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogCiAgICAgaWYg
KG1fbm9kZVRvRm9jdXMpCiAgICAgICAgIGZvY3VzTm9kZSgpOworCisgICAgcmV0dXJuIFdURk1v
dmUocm9vdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9G
cm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGgpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
dXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgaW50
IGRlcHRoKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAo
IW5vZGUgfHwgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUt
Pm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9
IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpKQpAQCAtNTE5LDcgKzUxOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBp
bnQgZGVwdGgpCiAgICAgICAgIGRlcHRoLS07CiAKICAgICAgICAgZm9yIChub2RlID0gaW5uZXJG
aXJzdENoaWxkKG5vZGUpOyBub2RlOyBub2RlID0gaW5uZXJOZXh0U2libGluZyhub2RlKSkgewot
ICAgICAgICAgICAgaW50IGNoaWxkTm9kZUlkID0gbm9kZU1hcC0+Z2V0KG5vZGUpOworICAgICAg
ICAgICAgYXV0byBjaGlsZE5vZGVJZCA9IG5vZGVNYXAtPmdldChub2RlKTsKICAgICAgICAgICAg
IEFTU0VSVChjaGlsZE5vZGVJZCk7CiAgICAgICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRl
bmQoY2hpbGROb2RlSWQsIGRlcHRoKTsKICAgICAgICAgfQpAQCAtNTQxLDE4ICs1NDAsMTggQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKICAgICBtX2NoaWxkcmVu
UmVxdWVzdGVkLmNsZWFyKCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVU
b0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogewogICAg
IGlmICghbm9kZVRvUHVzaCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVz
IHRvIGJlIGluc3RydW1lbnRlZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0
aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogCi0gICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBy
ZXR1cm4gcHVzaE5vZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGJvdW5kTm9kZUlkKCZub2RlVG9QdXNo
LT5kb2N1bWVudCgpKSwgbm9kZVRvUHVzaCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6
cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3VtZW50
Tm9kZUlkLCBOb2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3Rv
ckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGRvY3VtZW50Tm9kZUlkLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9y
U3RyaW5nLCBkb2N1bWVudE5vZGVJZCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTU2NSw3ICs1
NjQsNyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBkb2N1bWVudAogICAgIHJldHVybiBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlVG9QdXNoKTsKIH0KIAotTm9kZSogSW5zcGVjdG9y
RE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9k
ZUZvcklkKFByb3RvY29sOjpET006Ok5vZGVJZCBpZCkKIHsKICAgICBpZiAoIW1faWRUb05vZGUu
aXNWYWxpZEtleShpZCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNTczLDcgKzU3Miw3
IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogICAgIHJldHVy
biBtX2lkVG9Ob2RlLmdldChpZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVl
c3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
aW50KiBkZXB0aCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBPcHRp
b25hbDxpbnQ+JiYgZGVwdGgpCiB7CiAgICAgaW50IHNhbml0aXplZERlcHRoOwogCkBAIC01ODMs
NjQgKzU4Miw2NCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsCiAgICAgICAgIHNhbml0aXplZERl
cHRoID0gSU5UX01BWDsKICAgICBlbHNlIGlmICgqZGVwdGggPiAwKQogICAgICAgICBzYW5pdGl6
ZWREZXB0aCA9ICpkZXB0aDsKLSAgICBlbHNlIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5l
eHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2ZW4gZGVwdGgiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhw
ZWN0ZWQgdmFsdWUgYmVsb3cgLTEgZm9yIGdpdmVuIGRlcHRoIl9zKTsKIAogICAgIHB1c2hDaGls
ZE5vZGVzVG9Gcm9udGVuZChub2RlSWQsIHNhbml0aXplZERlcHRoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgaW50
KiBlbGVtZW50SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2Rl
SWQ+IEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgKmVsZW1lbnRJZCA9IDA7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9k
ZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpIHsKLSAgICAg
ICAgYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICBp
ZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGEgY29udGFpbmVyIG5vZGUiX3MpOwog
Ci0gICAgYXV0byBxdWVyeVJlc3VsdCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5x
dWVyeVNlbGVjdG9yKHNlbGVjdG9ycyk7Ci0gICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBFcnJvciB3aGlsZSBxdWVyeWluZyB3
aXRoIGdpdmVuIHNlbGVjdG9ycyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRv
IHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0
b3Ioc2VsZWN0b3IpOworICAgIGlmIChxdWVyeVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHF1ZXJ5UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgaWYgKGF1dG8qIGVsZW1l
bnQgPSBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKLSAgICAgICAgKmVsZW1lbnRJ
ZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGVsZW1lbnQpOworICAgIGF1
dG8gcmVzdWx0Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgcXVl
cnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIGlmICghcmVzdWx0Tm9kZUlkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJu
IHJlc3VsdE5vZGVJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3Rv
ckFsbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
c2VsZWN0b3JzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+
IEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JT
dHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpIHsKLSAgICAgICAgYXNzZXJ0RWxlbWVudChlcnJv
clN0cmluZywgbm9kZUlkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+
KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBu
b2RlSWQgaXMgbm90IGEgY29udGFpbmVyIG5vZGUiX3MpOwogCi0gICAgYXV0byBxdWVyeVJlc3Vs
dCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVj
dG9ycyk7Ci0gICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIkRPTSBFcnJvciB3aGlsZSBxdWVyeWluZyB3aXRoIGdpdmVuIHNlbGVjdG9y
cyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwor
ICAgIGlmIChxdWVyeVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHF1ZXJ5UmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSkpOwogCiAgICAgYXV0byBub2RlcyA9IHF1ZXJ5UmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwotICAgIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRl
KCk7CisKKyAgICBhdXRvIG5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD46OmNyZWF0ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy0+bGVu
Z3RoKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQobm9kZXMtPml0ZW0oaSkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5vZGVzLT5pdGVtKGkpKSk7CisgICAgcmV0dXJuIFdURk1vdmUobm9kZUlk
cyk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChO
b2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50
OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7Ci0gICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBy
ZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChpZ25vcmVkLCBub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
IGVycm9yU3RyaW5nLCBOb2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIElu
c3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kZVRvUHVzaCkKIHsKICAgICBBU1NFUlQobm9kZVRv
UHVzaCk7ICAvLyBJbnZhbGlkIGlucHV0CiAKQEAgLTY1Niw4ICs2NTUsNyBAQCBpbnQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmcsIE5vZGUqIG5vZAogICAgIH0KIAogICAgIC8vIFJldHVybiBpZCBpbiBjYXNlIHRoZSBub2Rl
IGlzIGtub3duLgotICAgIGludCByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5v
ZGVUb1B1c2gpOwotICAgIGlmIChyZXN1bHQpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChub2RlVG9QdXNoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
IAogICAgIE5vZGUqIG5vZGUgPSBub2RlVG9QdXNoOwpAQCAtNjcxLDcgKzY2OSw3IEBAIGludCBJ
bnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJv
clN0cmluZywgTm9kZSogbm9kCiAgICAgICAgICAgICBhdXRvIG5ld01hcCA9IG1ha2VVbmlxdWU8
Tm9kZVRvSWRNYXA+KCk7CiAgICAgICAgICAgICBkYW5nbGluZ01hcCA9IG5ld01hcC5nZXQoKTsK
ICAgICAgICAgICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuYXBwZW5kKG5ld01hcC5yZWxlYXNl
KCkpOwotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAgICAg
ICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUobm9kZSwgMCwgZGFu
Z2xpbmdNYXApKTsKICAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZXRDaGlsZE5v
ZGVzKDAsIFdURk1vdmUoY2hpbGRyZW4pKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjg2LDIy
MSArNjg0LDI1MiBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZAogCiAgICAgTm9kZVRvSWRNYXAq
IG1hcCA9IGRhbmdsaW5nTWFwID8gZGFuZ2xpbmdNYXAgOiAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
OwogICAgIGZvciAoaW50IGkgPSBwYXRoLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAg
ICAgIGludCBub2RlSWQgPSBtYXAtPmdldChwYXRoLmF0KGkpKTsKKyAgICAgICAgYXV0byBub2Rl
SWQgPSBtYXAtPmdldChwYXRoLmF0KGkpKTsKICAgICAgICAgQVNTRVJUKG5vZGVJZCk7CiAgICAg
ICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChub2RlSWQpOwogICAgIH0KICAgICByZXR1cm4g
bWFwLT5nZXQobm9kZVRvUHVzaCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6Ym91bmRO
b2RlSWQoY29uc3QgTm9kZSogbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JE
T01BZ2VudDo6Ym91bmROb2RlSWQoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChjb25zdF9jYXN0PE5vZGUqPihub2RlKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldEF0dHJpYnV0ZVZhbHVlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50
ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOwotICAgIGlm
ICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKIAotICAgIG1fZG9tRWRpdG9yLT5zZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIG5h
bWUsIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVk
aXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBpZiAoIW1f
ZG9tRWRpdG9yLT5zZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIHZhbHVlLCBlcnJvclN0cmlu
ZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNU
ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBTdHJpbmcqIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChQcm90b2NvbDo6RE9NOjpO
b2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5n
LCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHBhcnNlZEVsZW1l
bnQgPSBjcmVhdGVIVE1MRWxlbWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBzcGFuVGFnKTsKICAg
ICBhdXRvIHJlc3VsdCA9IHBhcnNlZEVsZW1lbnQuZ2V0KCkuc2V0SW5uZXJIVE1MKCI8c3BhbiAi
ICsgdGV4dCArICI+PC9zcGFuPiIpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSB0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6
dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBOb2RlKiBj
aGlsZCA9IHBhcnNlZEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoIWNoaWxkKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBwYXJzZSBnaXZlbiB0ZXh0Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghY2hpbGQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQ291bGQgbm90IHBhcnNlIGdpdmVuIHRleHQiX3MpOwogCiAgICAgRWxlbWVu
dCogY2hpbGRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oY2hpbGQpOwotICAgIGlmICghY2hp
bGRFbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkgJiYgbmFtZSkgewotICAgICAgICBtX2RvbUVkaXRv
ci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCAqbmFtZSwgZXJyb3JTdHJpbmcpOwotICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAmJiAhIW5h
bWUpIHsKKyAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50
LCBuYW1lLCBlcnJvclN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGJvb2wgZm91
bmRPcmlnaW5hbEF0dHJpYnV0ZSA9IGZhbHNlOwogICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgOiBjaGlsZEVsZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAg
IC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgotICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0g
Zm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8fCAobmFtZSAmJiBhdHRyaWJ1dGUubmFtZSgpLnRvU3Ry
aW5nKCkgPT0gKm5hbWUpOworICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRP
cmlnaW5hbEF0dHJpYnV0ZSB8fCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkgPT0gbmFtZTsK
ICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0QXR0cmlidXRlKCplbGVtZW50LCBhdHRyaWJ1
dGUubmFtZSgpLnRvU3RyaW5nKCksIGF0dHJpYnV0ZS52YWx1ZSgpLCBlcnJvclN0cmluZykpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogICAgIH0KIAotICAgIGlmICghZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSAmJiBu
YW1lICYmICFuYW1lLT5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZG9t
RWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7Cisg
ICAgaWYgKCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmICFuYW1lLnN0cmlwV2hpdGVTcGFjZSgp
LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUo
KmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgZWxlbWVudElk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwog
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0
ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpOworICAgIGlmICghbV9kb21FZGl0b3ItPnJl
bW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01BZ2VudDo6cmVtb3ZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBh
c3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
OwotICAgIGlmICghcGFyZW50Tm9kZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDYW5ub3Qg
cmVtb3ZlIGRldGFjaGVkIG5vZGUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFwYXJlbnROb2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNhbm5vdCByZW1v
dmUgZGV0YWNoZWQgbm9kZSJfcyk7CiAKLSAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBh
cmVudE5vZGUsICpub2RlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVt
b3ZlQ2hpbGQoKnBhcmVudE5vZGUsICpub2RlLCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXROb2RlTmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdGFnTmFtZSwgaW50KiBuZXdJZCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldE5vZGVOYW1lKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgdGFnTmFtZSkKIHsKLSAgICAqbmV3SWQgPSAwOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKIAotICAgIFJlZlB0cjxOb2RlPiBvbGROb2RlID0gbm9kZUZvcklkKG5v
ZGVJZCk7Ci0gICAgaWYgKCFpczxFbGVtZW50PihvbGROb2RlKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gb2xkTm9kZSA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7Cisg
ICAgaWYgKCFvbGROb2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYXV0byBjcmVhdGVFbGVtZW50UmVzdWx0ID0gb2xkTm9kZS0+ZG9jdW1lbnQo
KS5jcmVhdGVFbGVtZW50Rm9yQmluZGluZ3ModGFnTmFtZSk7CiAgICAgaWYgKGNyZWF0ZUVsZW1l
bnRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNyZWF0ZUVs
ZW1lbnRSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKICAgICBhdXRvIG5ld0VsZW1lbnQg
PSBjcmVhdGVFbGVtZW50UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogCiAgICAgLy8gQ29w
eSBvdmVyIHRoZSBvcmlnaW5hbCBub2RlJ3MgYXR0cmlidXRlcy4KLSAgICBuZXdFbGVtZW50LT5j
bG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pigqb2xkTm9kZSkpOwor
ICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KCpvbGROb2RlKTsKIAog
ICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9kZSdzIGNoaWxkcmVuLgogICAgIFJlZlB0
cjxOb2RlPiBjaGlsZDsKICAgICB3aGlsZSAoKGNoaWxkID0gb2xkTm9kZS0+Zmlyc3RDaGlsZCgp
KSkgewogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUobmV3RWxlbWVudCwg
KmNoaWxkLCAwLCBlcnJvclN0cmluZykpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogICAgIH0KIAogICAgIC8vIFJl
cGxhY2UgdGhlIG9sZCBub2RlIHdpdGggdGhlIG5ldyBub2RlCiAgICAgUmVmUHRyPENvbnRhaW5l
ck5vZGU+IHBhcmVudCA9IG9sZE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5pbnNlcnRCZWZvcmUoKnBhcmVudCwgbmV3RWxlbWVudC5jb3B5UmVmKCksIG9sZE5vZGUt
Pm5leHRTaWJsaW5nKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogICAgIGlmICghbV9kb21FZGl0b3It
PnJlbW92ZUNoaWxkKCpwYXJlbnQsICpvbGROb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAg
ICpuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5ld0VsZW1lbnQu
cHRyKCkpOworICAgIGF1dG8gcmVzdWx0Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CiAgICAgaWYgKG1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMobm9kZUlkKSkKLSAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKCpu
ZXdJZCk7CisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChyZXN1bHROb2RlSWQpOwor
CisgICAgcmV0dXJuIHJlc3VsdE5vZGVJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgV1RGOjpT
dHJpbmcqIG91dGVySFRNTCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OwogCi0gICAgKm91dGVySFRNTCA9IHNlcmlhbGl6ZUZyYWdtZW50KCpub2RlLCBTZXJpYWxpemVk
Tm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2RlKTsKKyAgICByZXR1cm4gc2VyaWFsaXplRnJhZ21l
bnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUpOwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFub2RlSWQpIHsKICAg
ICAgICAgRE9NUGF0Y2hTdXBwb3J0IHsgKm1fZG9tRWRpdG9yLCAqbV9kb2N1bWVudCB9LnBhdGNo
RG9jdW1lbnQob3V0ZXJIVE1MKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBEb2N1bWVudCYgZG9jdW1l
bnQgPSBub2RlLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQo
KSAmJiAhZG9jdW1lbnQuaXNYTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
IkRvY3VtZW50IG9mIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgSFRNTC9YTUwiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgp
ICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJf
cyk7CiAKICAgICBOb2RlKiBuZXdOb2RlID0gbnVsbHB0cjsKICAgICBpZiAoIW1fZG9tRWRpdG9y
LT5zZXRPdXRlckhUTUwoKm5vZGUsIG91dGVySFRNTCwgbmV3Tm9kZSwgZXJyb3JTdHJpbmcpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBpZiAoIW5ld05vZGUpIHsKICAgICAgICAgLy8gVGhlIG9ubHkgY2hpbGQgbm9k
ZSBoYXMgYmVlbiBkZWxldGVkLgotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCi0gICAgaW50IG5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0
cmluZywgbmV3Tm9kZSk7CisgICAgYXV0byBuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
ZXJyb3JTdHJpbmcsIG5ld05vZGUpOwogCiAgICAgYm9vbCBjaGlsZHJlblJlcXVlc3RlZCA9IG1f
Y2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMobm9kZUlkKTsKICAgICBpZiAoY2hpbGRyZW5SZXF1
ZXN0ZWQpCiAgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRBZGphY2VudEhU
TUwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHBv
c2l0aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6aW5zZXJ0QWRqYWNlbnRIVE1MKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGFuIGVsZW1lbnQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGFu
IGVsZW1lbnQiX3MpOwogCi0gICAgbV9kb21FZGl0b3ItPmluc2VydEFkamFjZW50SFRNTChkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSksIHBvc2l0aW9uLCBodG1sLCBlcnJvclN0cmluZyk7CisgICAg
aWYgKCFtX2RvbUVkaXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKSwgcG9zaXRpb24sIGh0bWwsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmICghaXM8
VGV4dD4oKm5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgdGV4dCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWlz
PFRleHQ+KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IHRleHQiX3MpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlcGxhY2VX
aG9sZVRleHQoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOworICAg
IGlmICghbV9kb21FZGl0b3ItPnJlcGxhY2VXaG9sZVRleHQoZG93bmNhc3Q8VGV4dD4oKm5vZGUp
LCB2YWx1ZSwgZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0U3VwcG9ydGVkRXZlbnROYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiBldmVudE5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVu
dE5hbWVzKCkKIHsKLSAgICBldmVudE5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVh
dGUoKTsKKyAgICBhdXRvIGV2ZW50TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0
ZSgpOwogCiAjZGVmaW5lIERPTV9FVkVOVF9OQU1FU19BREQobmFtZSkgZXZlbnROYW1lcy0+YWRk
SXRlbSgjbmFtZSk7CiAgICAgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKERPTV9FVkVOVF9OQU1F
U19BREQpCiAjdW5kZWYgRE9NX0VWRU5UX05BTUVTX0FERAorCisgICAgcmV0dXJuIFdURk1vdmUo
ZXZlbnROYW1lcyk7CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyogbm9kZUlkICovLCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIC8qIGRhdGFCaW5k
aW5ncyAqLykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006OkRhdGFCaW5kaW5nPj4+IEluc3BlY3RvckRPTUFnZW50OjpnZXREYXRhQmluZGlu
Z3NGb3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJO
b3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRl
ZCJfcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFzc29jaWF0ZWREYXRhRm9y
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIE9wdGlvbmFs
PFN0cmluZz4mIC8qIGFzc29jaWF0ZWREYXRhICovKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKFByb3Rv
Y29sOjpET006Ok5vZGVJZCkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9z
OworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAjZW5k
aWYKIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4mIGxpc3RlbmVyc0FycmF5
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRP
TTo6RXZlbnRMaXN0ZW5lcj4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNG
b3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7Ci0gICAgbGlzdGVuZXJzQXJy
YXkgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cj46OmNyZWF0ZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAog
ICAgIGF1dG8qIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IGFuY2VzdG9y
czsKICAgICBhbmNlc3RvcnMuYXBwZW5kKG5vZGUpOwpAQCAtOTI5LDggKzk1OCwxMCBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbgogICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byBsaXN0ZW5l
cnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+OjpjcmVhdGUo
KTsKKwogICAgIGF1dG8gYWRkTGlzdGVuZXIgPSBbJl0gKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGluZm8pIHsKLSAgICAgICAgaW50
IGlkZW50aWZpZXIgPSAwOworICAgICAgICBQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQg
aWRlbnRpZmllciA9IDA7CiAgICAgICAgIGJvb2wgZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gYnJlYWtwb2ludDsKIApAQCAtOTUzLDcgKzk4NCw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAgICAgICBtX2V2ZW50TGlzdGVuZXJFbnRy
aWVzLmFkZChpZGVudGlmaWVyLCBpbnNwZWN0b3JFdmVudExpc3RlbmVyKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGxpc3RlbmVyc0FycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihsaXN0ZW5lciwgaWRlbnRpZmllciwgKmluZm8uZXZlbnRUYXJnZXQsIGluZm8uZXZlbnRU
eXBlLCBkaXNhYmxlZCwgYnJlYWtwb2ludCkpOworICAgICAgICBsaXN0ZW5lcnMtPmFkZEl0ZW0o
YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAqaW5mby5l
dmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7CiAgICAg
fTsKIAogICAgIC8vIEdldCBDYXB0dXJpbmcgTGlzdGVuZXJzIChpbiB0aGlzIG9yZGVyKQpAQCAt
OTc2LDgwICsxMDA3LDgxIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAKICAgICBpZiAobV9p
bnNwZWN0ZWROb2RlID09IG5vZGUpCiAgICAgICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hh
bmdlZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4gV1RGTW92ZShsaXN0ZW5lcnMpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZXZlbnRMaXN0ZW5lcklkLCBib29sIGRpc2FibGVkKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEV2ZW50
TGlzdGVuZXJEaXNhYmxlZChQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgZXZlbnRMaXN0
ZW5lcklkLCBib29sIGRpc2FibGVkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJF
bnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3Rl
bmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50
IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2
ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGl0LT52YWx1ZS5kaXNhYmxlZCA9IGRpc2Fi
bGVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0
QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
ZXZlbnRMaXN0ZW5lcklkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBldmVudExp
c3RlbmVySWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGl0ID0gbV9ldmVudExpc3Rl
bmVyRW50cmllcy5maW5kKGV2ZW50TGlzdGVuZXJJZCk7Ci0gICAgaWYgKGl0ID09IG1fZXZlbnRM
aXN0ZW5lckVudHJpZXMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBl
dmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9y
IGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfcyk7CiAKLSAgICBpZiAoaXQtPnZhbHVlLmJyZWFrcG9p
bnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnRM
aXN0ZW5lcklkIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3Mp
OwogCi0gICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQp
OworICAgIGl0LT52YWx1ZS5icmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVi
dWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykp
OworICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9pbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlz
dGVuZXIoUHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCkKIHsK
ICAgICBhdXRvIGl0ID0gbV9ldmVudExpc3RlbmVyRW50cmllcy5maW5kKGV2ZW50TGlzdGVuZXJJ
ZCk7Ci0gICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRM
aXN0ZW5lcklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX2V2
ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Ik1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfcyk7CiAK
ICAgICBpZiAoIWl0LT52YWx1ZS5icmVha3BvaW50KQotICAgICAgICBlcnJvclN0cmluZyA9ICJC
cmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgbWlzc2luZyJfczsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVy
SWQgbWlzc2luZyJfcyk7CiAKICAgICBpdC0+dmFsdWUuYnJlYWtwb2ludCA9IG51bGxwdHI7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBY2Nlc3Np
YmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4mIGF4UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4+IEluc3BlY3RvckRPTUFnZW50OjpnZXRB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJ
ZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAotICAgIGF4UHJvcGVydGllcyA9IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXMobm9kZSk7CisgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXMoKm5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2Vh
cmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3Qg
SlNPTjo6QXJyYXkqIG5vZGVJZHMsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIFN0cmluZyog
c2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFN0cmluZyAvKiBzZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENvdW50ICovPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmUHRy
PEpTT046OkFycmF5PiYmIG5vZGVJZHMsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICAvLyBGSVhN
RTogU2VhcmNoIHdvcmtzIHdpdGggbm9kZSBncmFudWxhcml0eSAtIG51bWJlciBvZiBtYXRjaGVz
IHdpdGhpbiBub2RlIGlzIG5vdCBjYWxjdWxhdGVkLgogICAgIEluc3BlY3Rvck5vZGVGaW5kZXIg
ZmluZGVyKHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYmICpjYXNlU2Vuc2l0aXZlKTsKIAogICAgIGlm
IChub2RlSWRzKSB7CiAgICAgICAgIGZvciAoYXV0byYgbm9kZVZhbHVlIDogKm5vZGVJZHMpIHsK
LSAgICAgICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3M7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG5v
ZGVJZCA9IDA7Ci0gICAgICAgICAgICBpZiAoIW5vZGVWYWx1ZS0+YXNJbnRlZ2VyKG5vZGVJZCkp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKLSAgICAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAgIC8v
IGFzc2VydE5vZGUgc2hvdWxkIGhhdmUgZmlsbGVkIHRoZSBlcnJvclN0cmluZyBmb3IgdXMuCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIG5vZGVJZCA9IG5v
ZGVWYWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAgICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRl
bSBpbiBnaXZlbiBub2RlSWRzIl9zKTsKKworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFzc2Vy
dE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKICAgICAg
ICAgICAgIGZpbmRlci5wZXJmb3JtU2VhcmNoKG5vZGUpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKQEAgLTEwNTgsMzcgKzEwOTAsMzYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9y
bVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcXUKICAgICAg
ICAgZmluZGVyLnBlcmZvcm1TZWFyY2gobV9kb2N1bWVudC5nZXQoKSk7CiAgICAgfQogCi0gICAg
KnNlYXJjaElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CisgICAg
YXV0byBzZWFyY2hJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRlSWRlbnRpZmllcigpOwog
Ci0gICAgYXV0byYgcmVzdWx0c1ZlY3RvciA9IG1fc2VhcmNoUmVzdWx0cy5hZGQoKnNlYXJjaElk
LCBWZWN0b3I8UmVmUHRyPE5vZGU+PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgcmVz
dWx0c1ZlY3RvciA9IG1fc2VhcmNoUmVzdWx0cy5hZGQoc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8
Tm9kZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IGZpbmRl
ci5yZXN1bHRzKCkpCiAgICAgICAgIHJlc3VsdHNWZWN0b3IuYXBwZW5kKHJlc3VsdCk7CiAKLSAg
ICAqcmVzdWx0Q291bnQgPSByZXN1bHRzVmVjdG9yLnNpemUoKTsKKyAgICByZXR1cm4geyB7IHNl
YXJjaElkLCByZXN1bHRzVmVjdG9yLnNpemUoKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8aW50Pj4mIG5vZGVJZHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50
IHRvSW5kZXgpCiB7CiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgaXQgPSBtX3NlYXJjaFJl
c3VsdHMuZmluZChzZWFyY2hJZCk7Ci0gICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdp
dmVuIHNlYXJjaElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBt
X3NlYXJjaFJlc3VsdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBzZWFyY2ggcmVzdWx0IGZvciBnaXZlbiBzZWFyY2hJZCJfcyk7CiAKICAgICBpbnQgc2l6
ZSA9IGl0LT52YWx1ZS5zaXplKCk7Ci0gICAgaWYgKGZyb21JbmRleCA8IDAgfHwgdG9JbmRleCA+
IHNpemUgfHwgZnJvbUluZGV4ID49IHRvSW5kZXgpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
SW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIGZvciBnaXZlbiBmcm9tSW5kZXggYW5kIHRvSW5k
ZXgiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGZyb21JbmRleCA8IDAgfHwg
dG9JbmRleCA+IHNpemUgfHwgZnJvbUluZGV4ID49IHRvSW5kZXgpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiSW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIGZvciBnaXZlbiBmcm9t
SW5kZXggYW5kIHRvSW5kZXgiX3MpOwogCi0gICAgbm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50
Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGludCBpID0gZnJvbUluZGV4OyBpIDwg
dG9JbmRleDsgKytpKQogICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQoKGl0LT52YWx1ZSlbaV0uZ2V0KCkpKTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0
cmluZyYgc2VhcmNoSWQpCiB7CiAgICAgbV9zZWFyY2hSZXN1bHRzLnJlbW92ZShzZWFyY2hJZCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVN
b3VzZVByZXNzKCkKQEAgLTExMTcsNyArMTE0OCw3IEBAIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6
OmhhbmRsZVRvdWNoRXZlbnQoTm9kZSYgbm9kZSkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
aW5zcGVjdChOb2RlKiBpbnNwZWN0ZWROb2RlKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgUmVmUHRyPE5vZGU+IG5v
ZGUgPSBpbnNwZWN0ZWROb2RlOwogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoaWdub3JlZCwgZmFs
c2UsIG51bGxwdHIsIGZhbHNlKTsKIApAQCAtMTE3Myw3ICsxMjA0LDcgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6aGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKQogICAgICAgICBtX292ZXJsYXkt
PmhpZ2hsaWdodE5vZGUobm9kZSwgKm1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdo
dEluc3BlY3Rvck9iamVjdCwgYm9vbCBzaG93UnVsZXJzKQordm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0U2VhcmNoaW5nRm9yTm9kZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0LCBib29sIHNob3dSdWxlcnMpCiB7CiAgICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSA9
PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0xMTgzLDEyICsxMjE0LDEyIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBib29sIGVuYWJsCiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzRHVyaW5nRWxl
bWVudFNlbGVjdGlvbihtX3NlYXJjaGluZ0Zvck5vZGUgJiYgc2hvd1J1bGVycyk7CiAKICAgICBp
ZiAobV9zZWFyY2hpbmdGb3JOb2RlKSB7Ci0gICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRD
b25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgICAgICBtX2luc3BlY3RNb2RlSGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICAgICAgaWYgKCFtX2luc3Bl
Y3RNb2RlSGlnaGxpZ2h0Q29uZmlnKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBoaWdo
bGlnaHRNb3VzZWRPdmVyTm9kZSgpOwogICAgIH0gZWxzZQotICAgICAgICBoaWRlSGlnaGxpZ2h0
KGVycm9yU3RyaW5nKTsKKyAgICAgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9vdmVybGF5
LT5kaWRTZXRTZWFyY2hpbmdGb3JOb2RlKG1fc2VhcmNoaW5nRm9yTm9kZSk7CiAKQEAgLTExOTYs
NyArMTIyNyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsCiAgICAgICAgIGNsaWVudC0+ZWxl
bWVudFNlbGVjdGlvbkNoYW5nZWQobV9zZWFyY2hpbmdGb3JOb2RlKTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZp
Z0Zyb21JbnNwZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QqIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkKK3N0ZDo6dW5pcXVlX3B0cjxIaWdo
bGlnaHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVj
dG9yT2JqZWN0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQogewogICAgIGlmICghaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVy
cm9yOiBoaWdobGlnaHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgbWlzc2luZyJfczsKQEAg
LTEyMDQsODEgKzEyMzUsOTMgQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAgICB9CiAKICAg
ICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwot
ICAgIGJvb2wgc2hvd0luZm8gPSBmYWxzZTsgLy8gRGVmYXVsdDogZmFsc2UgKGRvIG5vdCBzaG93
IGEgdG9vbHRpcCkuCi0gICAgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LT5nZXRCb29sZWFuKCJz
aG93SW5mbyIsIHNob3dJbmZvKTsKLSAgICBoaWdobGlnaHRDb25maWctPnNob3dJbmZvID0gc2hv
d0luZm87Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xvcigi
Y29udGVudENvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRD
b25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudE91dGxpbmVD
b2xvciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5w
YWRkaW5nID0gcGFyc2VDb25maWdDb2xvcigicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0SW5zcGVj
dG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPmJvcmRlciA9IHBhcnNlQ29uZmlnQ29s
b3IoImJvcmRlckNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBoaWdobGln
aHRDb25maWctPm1hcmdpbiA9IHBhcnNlQ29uZmlnQ29sb3IoIm1hcmdpbkNvbG9yIiwgaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBoaWdobGlnaHRDb25maWctPnNob3dJbmZvID0gaGln
aGxpZ2h0SW5zcGVjdG9yT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpET006OkhpZ2hsaWdo
dENvbmZpZzo6c2hvd0luZm9LZXkpLnZhbHVlT3IoZmFsc2UpOworICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudCA9IHBhcnNlQ29uZmlnQ29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29u
ZmlnOjpjb250ZW50Q29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+cGFkZGluZyA9IHBhcnNlQ29uZmlnQ29sb3IoUHJvdG9jb2w6OkRPTTo6
SGlnaGxpZ2h0Q29uZmlnOjpwYWRkaW5nQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmpl
Y3QpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcihQcm90
b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmJvcmRlckNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBoaWdobGlnaHRDb25maWctPm1hcmdpbiA9IHBhcnNlQ29uZmln
Q29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjptYXJnaW5Db2xvcktleSwgKmhp
Z2hsaWdodEluc3BlY3Rvck9iamVjdCk7CiAgICAgcmV0dXJuIGhpZ2hsaWdodENvbmZpZzsKIH0K
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChib29s
IGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKQogewotICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZp
ZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxwdHIsIGZhbHNlKTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3Ry
aW5nLCBlbmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIGZhbHNlKTsKKworICAgIGlm
ICghIWVycm9yU3RyaW5nKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbHNlCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVu
YWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBz
aG93UnVsZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxib29sPiYmIHNob3dSdWxlcnMpCiB7Ci0g
ICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29u
ZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0ciwgc2hvd1J1bGVycyAmJiAqc2hvd1J1bGVy
cyk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgc2V0U2Vh
cmNoaW5nRm9yTm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgV1RGTW92ZShoaWdobGlnaHRDb25m
aWcpLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKworICAgIGlmICghIWVycm9yU3RyaW5n
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNv
b3JkaW5hdGVzKQogewogICAgIGF1dG8gcXVhZCA9IG1ha2VVbmlxdWU8RmxvYXRRdWFkPihGbG9h
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZN
b3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAg
IGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwgV1RGTW92
ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkQXJyYXksIGNvbnN0
IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBj
b25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYg
cXVhZE9iamVjdCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVz
KQogewogICAgIGF1dG8gcXVhZCA9IG1ha2VVbmlxdWU8RmxvYXRRdWFkPigpOwotICAgIGlmICgh
cGFyc2VRdWFkKHF1YWRBcnJheSwgcXVhZC5nZXQoKSkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiVW5leHBlY3RlZCBpbnZhbGlkIHF1YWRBcnJheSJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVD
b2xvciwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICBpZiAoIXBhcnNlUXVhZChXVEZNb3ZlKHF1
YWRPYmplY3QpLCBxdWFkLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmV4cGVjdGVkIGludmFsaWQgcXVhZCJfcyk7CisKKyAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RG
TW92ZShxdWFkKSwgV1RGTW92ZShjb2xvciksIFdURk1vdmUob3V0bGluZUNvbG9yKSwgV1RGTW92
ZSh1c2VQYWdlQ29vcmRpbmF0ZXMpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRR
dWFkPiBxdWFkLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3Qq
IG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1
YWQ+IHF1YWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcykK
IHsKICAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmln
PigpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwot
ICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVD
b2xvcik7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihXVEZNb3Zl
KGNvbG9yKSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29s
b3IoV1RGTW92ZShvdXRsaW5lQ29sb3IpKTsKICAgICBoaWdobGlnaHRDb25maWctPnVzZVBhZ2VD
b29yZGluYXRlcyA9IHVzZVBhZ2VDb29yZGluYXRlcyA/ICp1c2VQYWdlQ29vcmRpbmF0ZXMgOiBm
YWxzZTsKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgKmhpZ2hs
aWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVj
dG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGln
aHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0
cmluZyogZnJhbWVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHRTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7Ci0gICAgYXV0byBoaWdobGlnaHRDb25m
aWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGln
aGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKKyAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUoaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KSk7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFJlZlB0cjxEb2N1
bWVudD4gZG9jdW1lbnQ7CiAKLSAgICBpZiAoZnJhbWVJZCkgeworICAgIGlmICghIWZyYW1lSWQp
IHsKICAgICAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICAgICAgaWYgKCFwYWdlQWdlbnQpIHsKLSAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXBhZ2VBZ2VudCkKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsK
IAotICAgICAgICBhdXRvKiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJp
bmcsICpmcmFtZUlkKTsKKyAgICAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2VydEZy
YW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICAgICAgZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICB9IGVsc2UK
ICAgICAgICAgZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogCi0gICAgaWYgKCFkb2N1bWVudCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZl
biBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFt
ZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAgICBDU1NQYXJzZXIgcGFyc2VyKCpkb2N1bWVu
dCk7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKQEAgLTEzMzksMTU4ICsxMzgy
LDE3MyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRTZWxlY3RvcihFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046OgogICAgIH0KIAogICAgIG1fb3ZlcmxheS0+
aGlnaGxpZ2h0Tm9kZUxpc3QoU3RhdGljTm9kZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKG5vZGVMaXN0
KSksICpoaWdobGlnaHRDb25maWcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBpbnQqIG5v
ZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYg
aGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
JiYgbm9kZUlkLCBjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVj
dElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5v
ZGUqIG5vZGUgPSBudWxscHRyOwogICAgIGlmIChub2RlSWQpCiAgICAgICAgIG5vZGUgPSBhc3Nl
cnROb2RlKGVycm9yU3RyaW5nLCAqbm9kZUlkKTsKLSAgICBlbHNlIGlmIChvYmplY3RJZCkgewot
ICAgICAgICBub2RlID0gbm9kZUZvck9iamVjdElkKCpvYmplY3RJZCk7Ci0gICAgICAgIGlmICgh
bm9kZSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4g
b2JqZWN0SWQiX3M7CisgICAgZWxzZSBpZiAoISFvYmplY3RJZCkgeworICAgICAgICBub2RlID0g
bm9kZUZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKICAgICB9IGVsc2UKICAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRWl0aGVyIG5vZGVJZCBvciBvYmplY3RJZCBtdXN0IGJlIHNwZWNpZmllZCJfczsK
IAogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENv
bmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVj
dChlcnJvclN0cmluZywgJmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmln
RnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENvbmZpZykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9vdmVy
bGF5LT5oaWdobGlnaHROb2RlKG5vZGUsICpoaWdobGlnaHRDb25maWcpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZUxpc3QoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgbm9kZUlkcywgY29uc3Qg
SlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZUxpc3QoUmVmPEpT
T046OkFycmF5PiYmIG5vZGVJZHMsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVj
dG9yT2JqZWN0KQogewotICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOwotICAgIGZvciAoYXV0
byYgbm9kZVZhbHVlIDogbm9kZUlkcykgewotICAgICAgICBpZiAoIW5vZGVWYWx1ZSkgewotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdp
dmVuIG5vZGVJZHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICAgICAgaW50IG5vZGVJZCA9IDA7
Ci0gICAgICAgIGlmICghbm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5v
ZGVJZHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8UmVm
PE5vZGU+PiBub2RlczsKKyAgICBmb3IgKGF1dG8mIG5vZGVJZFZhbHVlIDogbm9kZUlkcy5nZXQo
KSkgeworICAgICAgICBhdXRvIG5vZGVJZCA9IG5vZGVJZFZhbHVlLT5hc0ludGVnZXIoKTsKKyAg
ICAgICAgaWYgKCFub2RlSWQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVu
ZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zKTsKIAogICAgICAg
ICAvLyBJbiB0aGUgY2FzZSB0aGF0IGEgbm9kZSBpcyByZW1vdmVkIGluIHRoZSB0aW1lIGJldHdl
ZW4gd2hlbiBoaWdobGlnaHROb2RlTGlzdCBpcyBpbnZva2VkCiAgICAgICAgIC8vIGJ5IHRoZSBm
cm9udGVuZCBhbmQgaXQgaXMgZXhlY3V0ZWQgYnkgdGhlIGJhY2tlbmQsIHdlIHNob3VsZCBzdGls
bCBhdHRlbXB0IHRvIGhpZ2hsaWdodAogICAgICAgICAvLyBhcyBtYW55IG5vZGVzIGFzIHBvc3Np
YmxlLiBBcyBzdWNoLCB3ZSBzaG91bGQgaWdub3JlIGFueSBlcnJvcnMgZ2VuZXJhdGVkIHdoZW4g
YXR0ZW1wdGluZwogICAgICAgICAvLyB0byBnZXQgYSBOb2RlIGZyb20gYSBnaXZlbiBub2RlSWQu
IAotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBOb2RlKiBub2RlID0gYXNz
ZXJ0Tm9kZShpZ25vcmVkLCBub2RlSWQpOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoaWdub3JlZCwgKm5vZGVJ
ZCk7CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IG5vZGVzLmFwcGVuZCgqbm9kZSk7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hs
aWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rv
ck9iamVjdChlcnJvclN0cmluZywgJmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0
Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENvbmZpZykKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAg
bV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2RlTGlzdDo6Y3JlYXRlKFdURk1v
dmUobm9kZXMpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUoY29uc3QgUHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3Is
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1
bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYgKCFwYWdlQWdlbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGFnZUFnZW50KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAg
ICBhdXRvKiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1l
SWQpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmIChmcmFtZS0+b3duZXJFbGVtZW50
KCkpIHsKICAgICAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBtYWtlVW5pcXVlPEhpZ2hsaWdo
dENvbmZpZz4oKTsKICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93SW5mbyA9IHRydWU7IC8v
IEFsd2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCi0gICAgICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwotICAgICAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgICAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICAg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoV1RGTW92ZShv
dXRsaW5lQ29sb3IpKTsKICAgICAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlKGZyYW1lLT5v
d25lckVsZW1lbnQoKSwgKmhpZ2hsaWdodENvbmZpZyk7CiAgICAgfQorCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlk
ZUhpZ2hsaWdodCgpCiB7CiAgICAgbV9vdmVybGF5LT5oaWRlSGlnaGxpZ2h0KCk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBp
bnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oUHJvdG9j
b2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJ
ZCwgT3B0aW9uYWw8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5vZGVJZCkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCi0gICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGFzc2VydEVkaXRhYmxl
RWxlbWVudChlcnJvclN0cmluZywgdGFyZ2V0RWxlbWVudElkKTsKKyAgICBFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXROb2Rl
SWQpOwogICAgIGlmICghdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgTm9kZSogYW5jaG9yTm9k
ZSA9IDA7Ci0gICAgaWYgKGFuY2hvck5vZGVJZCAmJiAqYW5jaG9yTm9kZUlkKSB7Ci0gICAgICAg
IGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsICphbmNob3JOb2Rl
SWQpOworICAgIE5vZGUqIGFuY2hvck5vZGUgPSBudWxscHRyOworICAgIGlmIChpbnNlcnRCZWZv
cmVOb2RlSWQgJiYgKmluc2VydEJlZm9yZU5vZGVJZCkgeworICAgICAgICBhbmNob3JOb2RlID0g
YXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCAqaW5zZXJ0QmVmb3JlTm9kZUlkKTsKICAg
ICAgICAgaWYgKCFhbmNob3JOb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
YW5jaG9yTm9kZS0+cGFyZW50Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQpIHsKLSAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIkdpdmVuIGFuY2hvck5vZGVJZCBtdXN0IGJlIGEgY2hpbGQgb2YgZ2l2
ZW4gdGFyZ2V0RWxlbWVudElkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICBp
ZiAoYW5jaG9yTm9kZS0+cGFyZW50Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkdpdmVuIGluc2VydEJlZm9yZU5vZGVJZCBtdXN0IGJl
IGEgY2hpbGQgb2YgZ2l2ZW4gdGFyZ2V0Tm9kZUlkIl9zKTsKICAgICB9CiAKICAgICBpZiAoIW1f
ZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUoKnRhcmdldEVsZW1lbnQsICpub2RlLCBhbmNob3JOb2Rl
LCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpuZXdOb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zy
b250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKKyAgICByZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVu
ZG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnVuZG8oKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9oaXN0
b3J5LT51bmRvKCk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSB0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJp
bmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVkbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVkbygpCiB7
CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnJlZG8oKTsKICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNw
ZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5k
b2FibGVTdGF0ZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6bWFya1VuZG9hYmxlU3RhdGUoKQogewogICAgIG1faGlzdG9yeS0+
bWFya1VuZG9hYmxlU3RhdGUoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmZvY3VzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpmb2N1cyhQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghZWxlbWVudC0+aXNGb2N1c2FibGUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJFbGVtZW50IGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIWVsZW1lbnQtPmlzRm9jdXNhYmxlKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiRWxlbWVudCBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBmb2N1c2FibGUiX3Mp
OworCiAgICAgZWxlbWVudC0+Zm9jdXMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RlZE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NQWdlbnQ6OnNldEluc3BlY3RlZE5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKIAotICAgIGlmIChub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpICYmICFtX2FsbG93
RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBpbiBhIHNoYWRvdyB0cmVlIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpICYmICFt
X2FsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBpbiBhIHNoYWRvdyB0cmVlIl9zKTsK
IAogICAgIG1faW5zcGVjdGVkTm9kZSA9IG5vZGU7CiAKQEAgLTE0OTgsMzggKzE1NTYsNDkgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgICAgIGNvbW1hbmRMaW5lQVBJSG9zdC0+YWRkSW5z
cGVjdGVkT2JqZWN0KG1ha2VVbmlxdWU8SW5zcGVjdGFibGVOb2RlPihub2RlKSk7CiAKICAgICBt
X3N1cHByZXNzRXZlbnRMaXN0ZW5lckNoYW5nZWRFdmVudCA9IGZhbHNlOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKLSAgICBTdHJpbmcgb2Jq
ZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBlbXB0eVN0cmluZygp
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+IG9iamVjdCA9IHJlc29sdmVOb2RlKG5vZGUsIG9iamVjdEdyb3VwTmFtZSk7
Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmpl
Y3RlZCBzY3JpcHQgZm9yIGdpdmVuIG5vZGVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICByZXN1bHQgPSBvYmplY3Q7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CisKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
b2JqZWN0ID0gcmVzb2x2ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0
IGZvciBnaXZlbiBub2RlSWQiX3MpOworCisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVs
bCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhQcm90b2NvbDo6RE9NOjpO
b2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2Rl
SWQpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgcmVzdWx0ID0gYnVpbGRBcnJheUZv
ckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpOworICAgIHJldHVybiBidWlsZEFycmF5Rm9yRWxl
bWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cXVlc3ROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJ
ZCwgaW50KiBub2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2Jq
ZWN0SWQpOwotICAgIGlmIChub2RlKQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9G
cm9udGVuZChlcnJvclN0cmluZywgbm9kZSk7Ci0gICAgZWxzZQotICAgICAgICAqbm9kZUlkID0g
MDsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CisKKyAgICBhdXRvIG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOworICAgIGlmICghbm9kZUlkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJu
IG5vZGVJZDsKIH0KIAogU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmlu
ZyhEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0xNTQ0LDQ0ICsxNjEzLDQ0IEBAIHN0YXRpYyBTdHJp
bmcgZG9jdW1lbnRCYXNlVVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4g
ZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGVtcHR5U3RyaW5nKCkpLnN0cmluZygpOwogfQogCi1zdGF0
aWMgYm9vbCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlKiB0eXBlKQorc3RhdGljIGJvb2wgcHNldWRvRWxlbWVu
dFR5cGUoUHNldWRvSWQgcHNldWRvSWQsIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5cGUp
CiB7CiAgICAgc3dpdGNoIChwc2V1ZG9JZCkgewogICAgIGNhc2UgUHNldWRvSWQ6OkJlZm9yZToK
LSAgICAgICAgKnR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGU6OkJl
Zm9yZTsKKyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlOjpCZWZvcmU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUHNldWRvSWQ6OkFmdGVyOgotICAgICAg
ICAqdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7Cisg
ICAgICAgICp0eXBlID0gUHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlIHNo
YWRvd1Jvb3RUeXBlKFNoYWRvd1Jvb3RNb2RlIG1vZGUpCitzdGF0aWMgUHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUgbW9kZSkKIHsKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQ6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpV
c2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
VXNlckFnZW50OwogICAgIGNhc2UgU2hhZG93Um9vdE1vZGU6OkNsb3NlZDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpDbG9zZWQ7CiAgICAg
Y2FzZSBTaGFkb3dSb290TW9kZTo6T3BlbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6Ok9wZW47CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6RE9NOjpTaGFkb3dSb290VHlwZTo6T3BlbjsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290
VHlwZTo6VXNlckFnZW50OworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlw
ZTo6VXNlckFnZW50OwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0
b21FbGVtZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CitzdGF0aWMgUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlIGN1c3RvbUVsZW1lbnRT
dGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LmlzRGVmaW5l
ZEN1c3RvbUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpDdXN0b207CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkN1c3RvbTsKICAgICBpZiAoZWxlbWVudC5pc0ZhaWxl
ZEN1c3RvbUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpGYWlsZWQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkZhaWxlZDsKICAgICBpZiAoZWxlbWVudC5pc1VuZGVm
aW5lZEN1c3RvbUVsZW1lbnQoKSB8fCBlbGVtZW50LmlzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5k
aWRhdGUoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9t
RWxlbWVudFN0YXRlOjpXYWl0aW5nOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6V2FpdGluZzsKKyAgICByZXR1cm4gUHJvdG9jb2w6
OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWlsdGluOwogfQogCiBzdGF0aWMgU3RyaW5nIGNv
bXB1dGVDb250ZW50U2VjdXJpdHlQb2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCkBAIC0xNTk3LDkgKzE2NjYsOSBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2Vj
dXJpdHlQb2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gYmluZChub2RlLCBub2Rlc01hcCk7
CisgICAgYXV0byBpZCA9IGJpbmQobm9kZSwgbm9kZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFt
ZTsKICAgICBTdHJpbmcgbG9jYWxOYW1lOwogICAgIFN0cmluZyBub2RlVmFsdWU7CkBAIC0xNjMw
LDcgKzE2OTksNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU6OmNy
ZWF0ZSgpCisgICAgYXV0byB2YWx1ZSA9IFByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXROb2RlSWQoaWQpCiAgICAgICAgIC5zZXROb2RlVHlwZShzdGF0aWNfY2FzdDxp
bnQ+KG5vZGUtPm5vZGVUeXBlKCkpKQogICAgICAgICAuc2V0Tm9kZU5hbWUobm9kZU5hbWUpCkBA
IC0xNjQxLDcgKzE3MTAsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgaWYgKG5vZGUt
PmlzQ29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAgIGludCBub2RlQ291bnQgPSBpbm5lckNoaWxk
Tm9kZUNvdW50KG5vZGUpOwogICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlQ291bnQobm9kZUNv
dW50KTsKLSAgICAgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwg
ZGVwdGgsIG5vZGVzTWFwKTsKKyAgICAgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGNoaWxkcmVuID0gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKG5vZGUs
IGRlcHRoLCBub2Rlc01hcCk7CiAgICAgICAgIGlmIChjaGlsZHJlbi0+bGVuZ3RoKCkgPiAwKQog
ICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKICAgICB9
CkBAIC0xNjYxLDcgKzE3MzAsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpKSB7
Ci0gICAgICAgICAgICBhdXRvIHNoYWRvd1Jvb3RzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gc2hhZG93
Um9vdHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAg
ICAgICAgICAgIHNoYWRvd1Jvb3RzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShyb290LCAw
LCBub2Rlc01hcCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jvb3RzKFdURk1vdmUo
c2hhZG93Um9vdHMpKTsKICAgICAgICAgfQpAQCAtMTY3MywxNiArMTc0MiwxNiBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JOb2RlKE5vZGUqCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q29udGVudFNlY3VyaXR5UG9s
aWN5SGFzaChjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaChlbGVtZW50KSk7
CiAKICAgICAgICAgYXV0byBzdGF0ZSA9IGN1c3RvbUVsZW1lbnRTdGF0ZShlbGVtZW50KTsKLSAg
ICAgICAgaWYgKHN0YXRlICE9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVu
dFN0YXRlOjpCdWlsdGluKQorICAgICAgICBpZiAoc3RhdGUgIT0gUHJvdG9jb2w6OkRPTTo6Q3Vz
dG9tRWxlbWVudFN0YXRlOjpCdWlsdGluKQogICAgICAgICAgICAgdmFsdWUtPnNldEN1c3RvbUVs
ZW1lbnRTdGF0ZShzdGF0ZSk7CiAKICAgICAgICAgaWYgKGVsZW1lbnQucHNldWRvSWQoKSAhPSBQ
c2V1ZG9JZDo6Tm9uZSkgewotICAgICAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpQ
c2V1ZG9UeXBlIHBzZXVkb1R5cGU7CisgICAgICAgICAgICBQcm90b2NvbDo6RE9NOjpQc2V1ZG9U
eXBlIHBzZXVkb1R5cGU7CiAgICAgICAgICAgICBpZiAocHNldWRvRWxlbWVudFR5cGUoZWxlbWVu
dC5wc2V1ZG9JZCgpLCAmcHNldWRvVHlwZSkpCiAgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBz
ZXVkb1R5cGUocHNldWRvVHlwZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
YXV0byBwc2V1ZG9FbGVtZW50cyA9IGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50
LCBub2Rlc01hcCkpCi0gICAgICAgICAgICAgICAgdmFsdWUtPnNldFBzZXVkb0VsZW1lbnRzKFdU
Rk1vdmUocHNldWRvRWxlbWVudHMpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRv
RWxlbWVudHMocHNldWRvRWxlbWVudHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKGlzPERvY3VtZW50Pigqbm9kZSkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpub2RlKTsKQEAgLTE3MjEsOSArMTc5MCw5IEBA
IFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5
Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZTsKIH0K
IAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9y
Q29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCkKIHsKLSAgICBhdXRvIGNoaWxkcmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNoaWxkcmVuID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKGRl
cHRoID09IDApIHsKICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIHRoZSBvbmx5IHRleHQgY2hpbGQg
LSBwcmV0ZW5kIHRoYXQgY29udGFpbmVyJ3MgY2hpbGRyZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZC4K
ICAgICAgICAgTm9kZSogZmlyc3RDaGlsZCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwpAQCAt
MTc0NSwxNCArMTgxNCwxNCBAQCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheQogICAgIHJldHVybiBj
aGlsZHJlbjsKIH0KIAotUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50
cyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBOb2RlVG9J
ZE1hcCogbm9kZXNNYXApCiB7CiAgICAgUHNldWRvRWxlbWVudCogYmVmb3JlRWxlbWVudCA9IGVs
ZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpOwogICAgIFBzZXVkb0VsZW1lbnQqIGFmdGVyRWxl
bWVudCA9IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgaWYgKCFiZWZvcmVFbGVt
ZW50ICYmICFhZnRlckVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0
byBwc2V1ZG9FbGVtZW50cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgIGlmIChiZWZvcmVFbGVtZW50
KQogICAgICAgICBwc2V1ZG9FbGVtZW50cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUoYmVm
b3JlRWxlbWVudCwgMCwgbm9kZXNNYXApKTsKICAgICBpZiAoYWZ0ZXJFbGVtZW50KQpAQCAtMTc2
MCw3ICsxODI5LDcgQEAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXIKICAgICByZXR1cm4gcHNldWRv
RWxlbWVudHM7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBpbnQgaWRl
bnRpZmllciwgRXZlbnRUYXJnZXQmIGV2ZW50VGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVu
dFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiBicmVh
a3BvaW50KQorUmVmPFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmIGV2ZW50VGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+JiBicmVha3BvaW50KQogewogICAgIFJlZjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
ID0gcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY2FsbGJhY2soKTsKIApAQCAtMTgyMiw3ICsxODkx
LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI6OmNyZWF0
ZSgpCisgICAgYXV0byB2YWx1ZSA9IFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRFdmVudExpc3RlbmVySWQoaWRlbnRpZmllcikKICAgICAgICAgLnNl
dFR5cGUoZXZlbnRUeXBlKQogICAgICAgICAuc2V0VXNlQ2FwdHVyZShyZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lci51c2VDYXB0dXJlKCkpCkBAIC0xODMzLDcgKzE5MDIsNyBAQCBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JFdgogICAgIGVsc2UgaWYgKGlzPERPTVdpbmRvdz4oZXZlbnRUYXJnZXQpKQogICAg
ICAgICB2YWx1ZS0+c2V0T25XaW5kb3codHJ1ZSk7CiAgICAgaWYgKCFzY3JpcHRJRC5pc051bGwo
KSkgewotICAgICAgICBhdXRvIGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQorICAgICAgICBhdXRvIGxvY2F0aW9uID0gUHJvdG9jb2w6
OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTY3JpcHRJZChz
Y3JpcHRJRCkKICAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwpAQCAtMTg1Myw3ICsxOTIyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRXYKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBy
b2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6
QXJyYXlPZjxpbnQ+JiBjaGlsZE5vZGVJZHMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9j
ZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYgY2hpbGROb2RlSWRzKQogewogICAgIGNvbnN0
IGF1dG8mIGNoaWxkcmVuID0gYXhPYmplY3QuY2hpbGRyZW4oKTsKICAgICBpZiAoIWNoaWxkcmVu
LnNpemUoKSkKQEAgLTE4NjcsNDMgKzE5MzYsMzkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU08K
ICAgICB9CiB9CiAgICAgCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNz
aWJpbGl0eVByb3BlcnRpZXMoTm9kZSogbm9kZSkKK1JlZjxQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNz
aWJpbGl0eVByb3BlcnRpZXMoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIGlmICghV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6ZW5hYmxlQWNjZXNzaWJpbGl0eSgpOwogCiAgICAgTm9kZSogYWN0aXZl
RGVzY2VuZGFudE5vZGUgPSBudWxscHRyOwogICAgIGJvb2wgYnVzeSA9IGZhbHNlOwotICAgIGF1
dG8gY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkNoZWNrZWQ6OkZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IGNo
aWxkTm9kZUlkczsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBjb250cm9sbGVkTm9k
ZUlkczsKLSAgICBhdXRvIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOworICAgIGF1dG8gY2hlY2tl
ZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxz
ZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjaGls
ZE5vZGVJZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
Pj4gY29udHJvbGxlZE5vZGVJZHM7CisgICAgYXV0byBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgYm9vbCBl
eGlzdHMgPSBmYWxzZTsKICAgICBib29sIGV4cGFuZGVkID0gZmFsc2U7CiAgICAgYm9vbCBkaXNh
YmxlZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IGZsb3dlZE5vZGVJ
ZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gZmxv
d2VkTm9kZUlkczsKICAgICBib29sIGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9yZWQg
PSB0cnVlOwogICAgIGJvb2wgaWdub3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIGF1dG8gaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OkZhbHNlOworICAgIGF1dG8gaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICBib29sIGhpZGRlbiA9IGZh
bHNlOwogICAgIFN0cmluZyBsYWJlbDsKICAgICBib29sIGxpdmVSZWdpb25BdG9taWMgPSBmYWxz
ZTsKICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBsaXZlUmVnaW9uUmVsZXZhbnQ7
Ci0gICAgYXV0byBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAgIGF1dG8g
bGl2ZVJlZ2lvblN0YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7CiAgICAgTm9kZSogbW91c2VFdmVudE5vZGUgPSBudWxs
cHRyOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IG93bmVkTm9kZUlkczsKKyAgICBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBvd25lZE5vZGVJZHM7
CiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IG51bGxwdHI7CiAgICAgYm9vbCBwcmVzc2VkID0gZmFs
c2U7CiAgICAgYm9vbCByZWFkb25seSA9IGZhbHNlOwogICAgIGJvb2wgcmVxdWlyZWQgPSBmYWxz
ZTsKICAgICBTdHJpbmcgcm9sZTsKICAgICBib29sIHNlbGVjdGVkID0gZmFsc2U7Ci0gICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8aW50Pj4gc2VsZWN0ZWRDaGlsZE5vZGVJZHM7CisgICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gc2VsZWN0ZWRDaGlsZE5vZGVJ
ZHM7CiAgICAgYm9vbCBzdXBwb3J0c0NoZWNrZWQgPSBmYWxzZTsKICAgICBib29sIHN1cHBvcnRz
RXhwYW5kZWQgPSBmYWxzZTsKICAgICBib29sIHN1cHBvcnRzTGl2ZVJlZ2lvbiA9IGZhbHNlOwpA
QCAtMTkxNSw4ICsxOTgwLDggQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICB1bnNpZ25l
ZCBoaWVyYXJjaGljYWxMZXZlbCA9IDA7CiAgICAgdW5zaWduZWQgbGV2ZWwgPSAwOwogCi0gICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUgPSBub2RlLT5kb2N1bWVudCgpLmF4T2Jq
ZWN0Q2FjaGUoKSkgewotICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IGF4T2Jq
ZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUpKSB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGF4
T2JqZWN0Q2FjaGUgPSBub2RlLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7CisgICAgICAg
IGlmIChBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUo
Jm5vZGUpKSB7CiAKICAgICAgICAgICAgIGlmIChBWENvcmVPYmplY3QqIGFjdGl2ZURlc2NlbmRh
bnQgPSBheE9iamVjdC0+YWN0aXZlRGVzY2VuZGFudCgpKQogICAgICAgICAgICAgICAgIGFjdGl2
ZURlc2NlbmRhbnROb2RlID0gYWN0aXZlRGVzY2VuZGFudC0+bm9kZSgpOwpAQCAtMTkzMiw0NyAr
MTk5Nyw0OSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgaWYgKHN1cHBv
cnRzQ2hlY2tlZCkgewogICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBj
aGVja1ZhbHVlID0gYXhPYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCk7IC8vIEVsZW1lbnQg
dXNpbmcgYXJpYS1jaGVja2VkLgogICAgICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlID09IEFj
Y2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6T24pCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpUcnVlOworICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CiAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoY2hlY2tWYWx1ZSA9PSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok1peGVkKQot
ICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6TWl4ZWQ7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6TWl4ZWQ7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXhPYmplY3QtPmlzQ2hlY2tl
ZCgpKSAvLyBOYXRpdmUgY2hlY2tib3guCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2Vk
OjpUcnVlOworICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmICghYXhPYmplY3QtPmNoaWxkcmVuKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2hpbGROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgICAgICBjaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW4oKmF4T2JqZWN0LCAqY2hpbGROb2RlSWRzKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBjb250cm9s
bGVkRWxlbWVudHM7CiAgICAgICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0cmlidXRl
KGNvbnRyb2xsZWRFbGVtZW50cywgYXJpYV9jb250cm9sc0F0dHIpOwogICAgICAgICAgICAgaWYg
KGNvbnRyb2xsZWRFbGVtZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVk
Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yIChFbGVtZW50KiBjb250cm9sbGVkRWxlbWVudCA6IGNvbnRyb2xsZWRFbGVtZW50cykKLSAg
ICAgICAgICAgICAgICAgICAgY29udHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRo
VG9Gcm9udGVuZChjb250cm9sbGVkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGNvbnRyb2xs
ZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVtZW50IDogY29u
dHJvbGxlZEVsZW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnRyb2xs
ZWRFbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzLT5hZGRJdGVtKGNvbnRy
b2xsZWRFbGVtZW50SWQpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChheE9iamVjdC0+Y3VycmVudFN0YXRlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFsc2U6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJl
bnQ6OkZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Q3VycmVudFN0YXRlOjpQYWdlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1
cnJlbnQ6OlBhZ2U7CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlBhZ2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlN0
ZXA6Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6U3RlcDsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6Q3VycmVudDo6U3RlcDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6TG9jYXRpb246Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6Q3VycmVudDo6TG9jYXRpb247CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRl
ID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkxvY2F0
aW9uOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Q3VycmVudFN0YXRlOjpEYXRlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6
OkRhdGU7CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkRhdGU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlRpbWU6Ci0g
ICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6VGltZTsKKyAgICAgICAgICAgICAgICBj
dXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3Vy
cmVudDo6VGltZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6VHJ1ZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3Rh
dGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpD
dXJyZW50OjpUcnVlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUcnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0xOTg2LDEyICsyMDUzLDE0IEBAIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+IGZsb3dlZEVs
ZW1lbnRzOwogICAgICAgICAgICAgYXhPYmplY3QtPmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShmbG93
ZWRFbGVtZW50cywgYXJpYV9mbG93dG9BdHRyKTsKICAgICAgICAgICAgIGlmIChmbG93ZWRFbGVt
ZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzID0gSlNPTjo6QXJy
YXlPZjxpbnQ+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGZsb3dl
ZEVsZW1lbnQgOiBmbG93ZWRFbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAgZmxvd2VkTm9k
ZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGZsb3dlZEVsZW1lbnQpKTsKKyAg
ICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGZsb3dl
ZEVsZW1lbnQgOiBmbG93ZWRFbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byBmbG93ZWRFbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGZsb3dlZEVsZW1lbnQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcy0+YWRkSXRlbShmbG93ZWRF
bGVtZW50SWQpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgeworICAgICAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgc3VwcG9ydHNGb2N1c2VkID0g
YXhPYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN1
cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZCA9IGF4T2JqZWN0LT5p
c0ZvY3VzZWQoKTsKQEAgLTIwMDIsMTMgKzIwNzEsMTMgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50Ojpi
dWkKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RyaW5nIGludmFsaWRWYWx1ZSA9IGF4T2Jq
ZWN0LT5pbnZhbGlkU3RhdHVzKCk7CiAgICAgICAgICAgICBpZiAoaW52YWxpZFZhbHVlID09ICJm
YWxzZSIpCi0gICAgICAgICAgICAgICAgaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOworICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52
YWxpZDo6RmFsc2U7CiAgICAgICAgICAgICBlbHNlIGlmIChpbnZhbGlkVmFsdWUgPT0gImdyYW1t
YXIiKQotICAgICAgICAgICAgICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOworICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52
YWxpZDo6R3JhbW1hcjsKICAgICAgICAgICAgIGVsc2UgaWYgKGludmFsaWRWYWx1ZSA9PSAic3Bl
bGxpbmciKQotICAgICAgICAgICAgICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpTcGVsbGluZzsKKyAgICAgICAg
ICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OlNwZWxsaW5nOwogICAgICAgICAgICAgZWxzZSAvLyBGdXR1cmUgdmVyc2lvbnMg
b2YgQVJJQSBtYXkgYWxsb3cgYWRkaXRpb25hbCB0cnV0aHkgdmFsdWVzLiBFeC4gZm9ybWF0LCBv
cmRlciwgb3Igc2l6ZS4KLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkludmFsaWQ6OlRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChheE9iamVj
dC0+aXNBWEhpZGRlbigpIHx8IGF4T2JqZWN0LT5pc0RPTUhpZGRlbigpKQogICAgICAgICAgICAg
ICAgIGhpZGRlbiA9IHRydWU7CkBAIC0yMDIyLDkgKzIwOTEsOSBAQCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aQogICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRBdHRyVmFsdWUgPSBh
eE9iamVjdC0+bGl2ZVJlZ2lvblJlbGV2YW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhcmlh
UmVsZXZhbnRBdHRyVmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBQYXNzIGVudW0gdmFsdWVzIHJhdGhlciB0aGFuIHN0cmluZ3Mgb25jZSB1bmJsb2NrZWQu
IGh0dHA6Ly93ZWJraXQub3JnL2IvMTMzNzExCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBh
cmlhUmVsZXZhbnRBZGRpdGlvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVS
ZWdpb25SZWxldmFudDo6QWRkaXRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFy
aWFSZWxldmFudFJlbW92YWxzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpMaXZlUmVn
aW9uUmVsZXZhbnQ6OlJlbW92YWxzKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFS
ZWxldmFudFRleHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxl
dmFudDo6VGV4dCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRBZGRp
dGlvbnMgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6
OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpBZGRpdGlvbnMpOworICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgYXJpYVJlbGV2YW50UmVtb3ZhbHMgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpSZW1vdmFs
cyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRUZXh0ID0gUHJvdG9j
b2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpET006OkxpdmVSZWdp
b25SZWxldmFudDo6VGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25SZWxldmFu
dCA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIHZhbHVlcyA9IFNwYWNlU3BsaXRTdHJpbmcoYXJpYVJl
bGV2YW50QXR0clZhbHVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gQGFyaWEtcmVs
ZXZhbnQ9ImFsbCIgaXMgZXhwb3NlZCBhcyBbImFkZGl0aW9ucyIsInJlbW92YWxzIiwidGV4dCJd
LCBpbiBvcmRlci4KQEAgLTIwNDUsOSArMjExNCw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYUxpdmUgPSBheE9iamVjdC0+bGl2ZVJlZ2lv
blN0YXR1cygpOwogICAgICAgICAgICAgICAgIGlmIChhcmlhTGl2ZSA9PSAiYXNzZXJ0aXZlIikK
LSAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OkFzc2Vy
dGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1cyA9IFByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpBc3NlcnRpdmU7
CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJpYUxpdmUgPT0gInBvbGl0ZSIpCi0gICAgICAg
ICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpQb2xpdGU7CisgICAg
ICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6UG9saXRlOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q+KCpheE9iamVj
dCkpCkBAIC0yMDU3LDkgKzIxMjYsMTEgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAg
ICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+IG93bmVkRWxlbWVudHM7CiAgICAgICAgICAgICAg
ICAgYXhPYmplY3QtPmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShvd25lZEVsZW1lbnRzLCBhcmlhX293
bnNBdHRyKTsKICAgICAgICAgICAgICAgICBpZiAob3duZWRFbGVtZW50cy5zaXplKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVh
dGUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBv
d25lZEVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzLT5hZGRJ
dGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQob3duZWRFbGVtZW50KSk7CisgICAgICAgICAgICAg
ICAgICAgIG93bmVkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogb3duZWRFbGVt
ZW50IDogb3duZWRFbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8g
b3duZWRFbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG93bmVkRWxlbWVudCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzLT5hZGRJdGVtKG93bmVkRWxl
bWVudElkKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIApAQCAtMjA4MywxMCArMjE1NCwxMiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aQogICAgICAgICAgICAgQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
c2VsZWN0ZWRDaGlsZHJlbjsKICAgICAgICAgICAgIGF4T2JqZWN0LT5zZWxlY3RlZENoaWxkcmVu
KHNlbGVjdGVkQ2hpbGRyZW4pOwogICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4uc2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJh
eU9mPGludD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRz
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQ2hpbGRPYmplY3QgOiBzZWxlY3RlZENoaWxk
cmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBzZWxlY3RlZENoaWxkTm9kZSA9
IHNlbGVjdGVkQ2hpbGRPYmplY3QtPm5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGVkQ2hpbGROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoc2VsZWN0
ZWRDaGlsZE5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIHNlbGVjdGVkQ2hp
bGROb2RlID0gc2VsZWN0ZWRDaGlsZE9iamVjdC0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzZWxlY3RlZENoaWxkTm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChzZWxlY3RlZENoaWxkTm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRDaGlsZE5vZGVJZHMtPmFkZEl0ZW0oc2VsZWN0ZWRDaGlsZE5vZGVJZCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTIwOTgsNTQgKzIxNzEsNjAgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQorICAgIFJlZjxQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6Y3JlYXRlKCkKICAgICAgICAgLnNldEV4aXN0cyhleGlzdHMpCiAg
ICAgICAgIC5zZXRMYWJlbChsYWJlbCkKICAgICAgICAgLnNldFJvbGUocm9sZSkKLSAgICAgICAg
LnNldE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpKQorICAgICAgICAuc2V0Tm9k
ZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoJm5vZGUpKQogICAgICAgICAucmVsZWFzZSgpOwog
CiAgICAgaWYgKGV4aXN0cykgewotICAgICAgICBpZiAoYWN0aXZlRGVzY2VuZGFudE5vZGUpCi0g
ICAgICAgICAgICB2YWx1ZS0+c2V0QWN0aXZlRGVzY2VuZGFudE5vZGVJZChwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKGFjdGl2ZURlc2NlbmRhbnROb2RlKSk7CisgICAgICAgIGlmIChhY3RpdmVEZXNj
ZW5kYW50Tm9kZSkgeworICAgICAgICAgICAgaWYgKGF1dG8gYWN0aXZlRGVzY2VuZGFudE5vZGVJ
ZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5vZGUpKQorICAgICAg
ICAgICAgICAgIHZhbHVlLT5zZXRBY3RpdmVEZXNjZW5kYW50Tm9kZUlkKGFjdGl2ZURlc2NlbmRh
bnROb2RlSWQpOworICAgICAgICB9CiAgICAgICAgIGlmIChidXN5KQogICAgICAgICAgICAgdmFs
dWUtPnNldEJ1c3koYnVzeSk7CiAgICAgICAgIGlmIChzdXBwb3J0c0NoZWNrZWQpCiAgICAgICAg
ICAgICB2YWx1ZS0+c2V0Q2hlY2tlZChjaGVja2VkKTsKICAgICAgICAgaWYgKGNoaWxkTm9kZUlk
cykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZE5vZGVJZHMoY2hpbGROb2RlSWRzKTsKKyAg
ICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZE5vZGVJZHMoY2hpbGROb2RlSWRzLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICBpZiAoY29udHJvbGxlZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1
ZS0+c2V0Q29udHJvbGxlZE5vZGVJZHMoY29udHJvbGxlZE5vZGVJZHMpOwotICAgICAgICBpZiAo
Y3VycmVudFN0YXRlICE9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlKQorICAgICAgICAgICAgdmFsdWUtPnNldENvbnRyb2xs
ZWROb2RlSWRzKGNvbnRyb2xsZWROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBp
ZiAoY3VycmVudFN0YXRlICE9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpGYWxzZSkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDdXJyZW50KGN1cnJlbnRT
dGF0ZSk7CiAgICAgICAgIGlmIChkaXNhYmxlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXREaXNh
YmxlZChkaXNhYmxlZCk7CiAgICAgICAgIGlmIChzdXBwb3J0c0V4cGFuZGVkKQogICAgICAgICAg
ICAgdmFsdWUtPnNldEV4cGFuZGVkKGV4cGFuZGVkKTsKICAgICAgICAgaWYgKGZsb3dlZE5vZGVJ
ZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0Rmxvd2VkTm9kZUlkcyhmbG93ZWROb2RlSWRzKTsK
KyAgICAgICAgICAgIHZhbHVlLT5zZXRGbG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0Rm9jdXNlZChmb2N1c2VkKTsKICAgICAgICAgaWYgKGlnbm9yZWQpCiAgICAgICAg
ICAgICB2YWx1ZS0+c2V0SWdub3JlZChpZ25vcmVkKTsKICAgICAgICAgaWYgKGlnbm9yZWRCeURl
ZmF1bHQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0SWdub3JlZEJ5RGVmYXVsdChpZ25vcmVkQnlE
ZWZhdWx0KTsKLSAgICAgICAgaWYgKGludmFsaWQgIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2UpCisgICAgICAgIGlmIChp
bnZhbGlkICE9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlk
OjpGYWxzZSkKICAgICAgICAgICAgIHZhbHVlLT5zZXRJbnZhbGlkKGludmFsaWQpOwogICAgICAg
ICBpZiAoaGlkZGVuKQogICAgICAgICAgICAgdmFsdWUtPnNldEhpZGRlbihoaWRkZW4pOwogICAg
ICAgICBpZiAoc3VwcG9ydHNMaXZlUmVnaW9uKSB7CiAgICAgICAgICAgICB2YWx1ZS0+c2V0TGl2
ZVJlZ2lvbkF0b21pYyhsaXZlUmVnaW9uQXRvbWljKTsKICAgICAgICAgICAgIGlmIChsaXZlUmVn
aW9uUmVsZXZhbnQtPmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVn
aW9uUmVsZXZhbnQobGl2ZVJlZ2lvblJlbGV2YW50KTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+
c2V0TGl2ZVJlZ2lvblJlbGV2YW50KGxpdmVSZWdpb25SZWxldmFudC5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uU3RhdHVzKGxpdmVSZWdpb25TdGF0
dXMpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtb3VzZUV2ZW50Tm9kZSkKLSAgICAgICAgICAg
IHZhbHVlLT5zZXRNb3VzZUV2ZW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobW91c2VF
dmVudE5vZGUpKTsKKyAgICAgICAgaWYgKG1vdXNlRXZlbnROb2RlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBtb3VzZUV2ZW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2
ZW50Tm9kZSkpCisgICAgICAgICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQobW91
c2VFdmVudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKG93bmVkTm9kZUlkcykKLSAg
ICAgICAgICAgIHZhbHVlLT5zZXRPd25lZE5vZGVJZHMob3duZWROb2RlSWRzKTsKLSAgICAgICAg
aWYgKHBhcmVudE5vZGUpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0UGFyZW50Tm9kZUlkKHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQocGFyZW50Tm9kZSkpOworICAgICAgICAgICAgdmFsdWUtPnNldE93
bmVkTm9kZUlkcyhvd25lZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChw
YXJlbnROb2RlKSB7CisgICAgICAgICAgICBpZiAoYXV0byBwYXJlbnROb2RlSWQgPSBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKHBhcmVudE5vZGUpKQorICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRQ
YXJlbnROb2RlSWQocGFyZW50Tm9kZUlkKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc3VwcG9y
dHNQcmVzc2VkKQogICAgICAgICAgICAgdmFsdWUtPnNldFByZXNzZWQocHJlc3NlZCk7CiAgICAg
ICAgIGlmIChyZWFkb25seSkKQEAgLTIxNTUsNyArMjIzNCw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgIGlmIChzZWxlY3RlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRTZWxl
Y3RlZChzZWxlY3RlZCk7CiAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkTm9kZUlkcykKLSAgICAg
ICAgICAgIHZhbHVlLT5zZXRTZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlk
cyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0U2VsZWN0ZWRDaGlsZE5vZGVJZHMoc2VsZWN0ZWRD
aGlsZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBIMSAt
LSBINiBhbHdheXMgaGF2ZSBhIGhlYWRpbmdMZXZlbCBwcm9wZXJ0eSB0aGF0IGNhbiBiZSBjb21w
bGltZW50ZWQgYnkgYSBoaWVyYXJjaGljYWxMZXZlbAogICAgICAgICAvLyBwcm9wZXJ0eSB3aGVu
IGFyaWEtbGV2ZWwgaXMgc2V0IG9uIHRoZSBlbGVtZW50LCBpbiB3aGljaCBjYXNlIHdlIHdhbnQg
dG8gcmVtYWluIGNhbGxpbmcKQEAgLTIyMzUsMjIgKzIzMTQsMjIgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgaWYgKCFmcmFt
ZU93bmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgZnJhbWVPd25lcklkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChmcmFtZU93bmVyKTsKKyAgICBhdXRvIGZyYW1lT3duZXJJZCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZnJhbWVPd25lcik7CiAgICAgaWYgKCFmcmFtZU93
bmVySWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJlLWFkZCBmcmFtZSBvd25lciBlbGVt
ZW50IHRvZ2V0aGVyIHdpdGggaXRzIG5ldyBjaGlsZHJlbi4KLSAgICBpbnQgcGFyZW50SWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGlubmVyUGFyZW50Tm9kZShmcmFtZU93bmVyLmdldCgp
KSk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5uZXJQ
YXJlbnROb2RlKGZyYW1lT3duZXIuZ2V0KCkpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
Y2hpbGROb2RlUmVtb3ZlZChwYXJlbnRJZCwgZnJhbWVPd25lcklkKTsKICAgICB1bmJpbmQoZnJh
bWVPd25lci5nZXQoKSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAKLSAgICBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShmcmFt
ZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBSZWY8UHJvdG9j
b2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUoZnJhbWVPd25lci5nZXQo
KSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5n
ID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoZnJhbWVPd25lci5nZXQoKSk7Ci0gICAgaW50IHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7CisgICAgYXV0byBwcmV2SWQgPSBwcmV2aW91c1NpYmxpbmcgPyBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZpb3VzU2libGluZykgOiAwOwogICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEZNb3ZlKHZh
bHVlKSk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6aWRlbnRpZmllckZvck5vZGUoTm9k
ZSYgbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6aWRlbnRp
ZmllckZvck5vZGUoTm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZCgmbm9kZSk7CiB9CkBAIC0yMzA3LDcgKzIzODYsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFwYXJlbnQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQocGFyZW50KTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChwYXJlbnQpOwogICAgIC8vIFJldHVybiBpZiBwYXJlbnQgaXMgbm90IG1hcHBlZCB5ZXQuCiAg
ICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjMxOCw4ICsyMzk3LDggQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIENoaWxkcmVuIGhhdmUgYmVlbiByZXF1ZXN0ZWQgLT4gcmV0
dXJuIHZhbHVlIG9mIGEgbmV3IGNoaWxkLgogICAgICAgICBOb2RlKiBwcmV2U2libGluZyA9IGlu
bmVyUHJldmlvdXNTaWJsaW5nKCZub2RlKTsKLSAgICAgICAgaW50IHByZXZJZCA9IHByZXZTaWJs
aW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2U2libGluZykgOiAwOwotICAgICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0
Rm9yTm9kZSgmbm9kZSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAgICAgIGF1dG8g
cHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZTaWJs
aW5nKSA6IDA7CisgICAgICAgIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxk
T2JqZWN0Rm9yTm9kZSgmbm9kZSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAgICAgICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklk
LCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogfQpAQCAtMjMzNSw3ICsyNDE0LDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogICAgIGlmICgh
bV9kb2N1bWVudE5vZGVUb0lkTWFwLmNvbnRhaW5zKHBhcmVudCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsK
KyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwog
CiAgICAgaWYgKCFtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewogICAg
ICAgICAvLyBObyBjaGlsZHJlbiBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBjaGFu
Z2VzIG9mIGhhc0NoaWxkcmVuLgpAQCAtMjM1OCw3ICsyNDM3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3Ry
aW5nJiBuYW0KICAgICBpZiAoc2hvdWxkU3VwcHJlc3NFdmVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW50IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBib3Vu
ZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MzcwLDcgKzI0NDksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRy
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogCiB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpkaWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21T
dHJpbmcmIG5hbWUpCiB7Ci0gICAgaW50IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOworICAg
IGF1dG8gaWQgPSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yMzgyLDkgKzI0NjEsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpk
aWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQog
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKQogewotICAgIGF1dG8gbm9kZUlkcyA9IEpTT046
OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBlbGVtZW50cykgewotICAgICAgICBpbnQgaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsK
KyAgICAgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOwogICAgICAgICBpZiAoIWlk
KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTIzOTgsNyArMjQ3Nyw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYgZWxlbWVuCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFN
b2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogewotICAgIGludCBpZCA9IG1f
ZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmNoYXJhY3RlckRhdGEpOworICAgIGF1dG8gaWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZjaGFyYWN0ZXJEYXRhKTsKICAgICBpZiAoIWlkKSB7
CiAgICAgICAgIC8vIFB1c2ggdGV4dCBub2RlIGlmIGl0IGlzIGJlaW5nIGNyZWF0ZWQuCiAgICAg
ICAgIGRpZEluc2VydERPTU5vZGUoY2hhcmFjdGVyRGF0YSk7CkBAIC0yNDA5LDcgKzI0ODgsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVy
RGF0YSYgY2hhcmFjdGVyRGF0YSkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxp
ZGF0ZVN0eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGludCBpZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI0MjAsMjIgKzI0OTksMjIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxp
ZGF0ZVN0eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpkaWRQdXNoU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQogewot
ICAgIGludCBob3N0SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKKyAgICBh
dXRvIGhvc3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwogICAgIGlmICho
b3N0SWQpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zaGFkb3dSb290UHVzaGVkKGhv
c3RJZCwgYnVpbGRPYmplY3RGb3JOb2RlKCZyb290LCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxQb3BTaGFkb3dSb290KEVsZW1l
bnQmIGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwotICAgIGludCByb290SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZyb290KTsKKyAgICBhdXRvIGhvc3RJZCA9IG1fZG9jdW1lbnROb2RlVG9J
ZE1hcC5nZXQoJmhvc3QpOworICAgIGF1dG8gcm9vdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldCgmcm9vdCk7CiAgICAgaWYgKGhvc3RJZCAmJiByb290SWQpCiAgICAgICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5zaGFkb3dSb290UG9wcGVkKGhvc3RJZCwgcm9vdElkKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkQ2hhbmdlQ3VzdG9tRWxlbWVudFN0YXRlKEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgaW50IGVsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQoJmVsZW1lbnQpOworICAgIGF1dG8gZWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldCgmZWxlbWVudCk7CiAgICAgaWYgKCFlbGVtZW50SWQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjQ2Miw3ICsyNTQxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVu
dENyZWF0ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVudCkKICAgICBpZiAoIXBhcmVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lk
TWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KHBhcmVudCk7CiAgICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yNDcyLDE0ICsyNTUxLDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBzZXVkb0VsZW1l
bnRDcmVhdGVkKFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiAKIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxl
bWVudCkKIHsKLSAgICBpbnQgcHNldWRvRWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldCgmcHNldWRvRWxlbWVudCk7CisgICAgYXV0byBwc2V1ZG9FbGVtZW50SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKICAgICBpZiAoIXBzZXVkb0VsZW1l
bnRJZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgYSBQc2V1ZG9FbGVtZW50IGlzIGJv
dW5kLCBpdHMgcGFyZW50IGVsZW1lbnQgbXVzdCBoYXZlIGJlZW4gYm91bmQuCiAgICAgRWxlbWVu
dCogcGFyZW50ID0gcHNldWRvRWxlbWVudC5ob3N0RWxlbWVudCgpOwogICAgIEFTU0VSVChwYXJl
bnQpOwotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50
KTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQp
OwogICAgIEFTU0VSVChwYXJlbnRJZCk7CiAKICAgICB1bmJpbmQoJnBzZXVkb0VsZW1lbnQsICZt
X2RvY3VtZW50Tm9kZVRvSWRNYXApOwpAQCAtMjQ5NSw3ICsyNTc0LDcgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0KQogICAg
IGlmICghbm9kZS5jb250YWlucyhtX2luc3BlY3RlZE5vZGUuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpbnQgbm9kZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOworICAgIGF1dG8gbm9k
ZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOwogICAgIGlmICghbm9kZUlkKQogICAgICAgICByZXR1
cm47CiAKQEAgLTI1MTYsNyArMjU5NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxS
ZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TCiAgICAg
aWYgKCFub2RlLmNvbnRhaW5zKG1faW5zcGVjdGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGludCBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2Rl
SWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjU2Niw3ICsyNjQ1LDcgQEAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2UKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlz
dGVuZXIoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQorUHJvdG9jb2w6OkRPTTo6RXZl
bnRMaXN0ZW5lcklkIEluc3BlY3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRU
YXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogewogICAgIGZvciAoYXV0byYgaW5zcGVjdG9yRXZl
bnRMaXN0ZW5lciA6IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMudmFsdWVzKCkpIHsKICAgICAgICAg
aWYgKGluc3BlY3RvckV2ZW50TGlzdGVuZXIubWF0Y2hlcyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlz
dGVuZXIsIGNhcHR1cmUpKQpAQCAtMjYwNCw4ICsyNjgzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6bWVkaWFNZXRyaWNzVGltZXJGaXJlZCgpCiAgICAgICAgIGlmIChpdGVyYXRvci0+dmFs
dWUuaXNQb3dlckVmZmljaWVudCAhPSBpc1Bvd2VyRWZmaWNpZW50KSB7CiAgICAgICAgICAgICBp
dGVyYXRvci0+dmFsdWUuaXNQb3dlckVmZmljaWVudCA9IGlzUG93ZXJFZmZpY2llbnQ7CiAKLSAg
ICAgICAgICAgIGludCBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1lZGlhRWxlbWVu
dCk7Ci0gICAgICAgICAgICBpZiAobm9kZUlkKSB7CisgICAgICAgICAgICBpZiAoYXV0byBub2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1lZGlhRWxlbWVudCkpIHsKICAgICAgICAgICAg
ICAgICBhdXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7CiAgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPnBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQobm9kZUlkLCB0aW1lc3Rh
bXAsIGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50KTsKICAgICAgICAgICAgIH0KQEAg
LTI2NTksNyArMjczNyw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yUGF0aChj
b25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLU5vZGUqIEluc3BlY3Rv
ckRPTUFnZW50Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKK05vZGUq
IEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2Jq
ZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBA
IC0yNjY4LDE1ICsyNzQ2LDIwIEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yT2Jq
ZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKICAgICByZXR1cm4gc2NyaXB0VmFsdWVBc05v
ZGUoaW5qZWN0ZWRTY3JpcHQuZmluZE9iamVjdEJ5SWQob2JqZWN0SWQpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnB1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgaWYgKE5v
ZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkKLSAgICAgICAgKm5vZGVJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZv
clBhdGgocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9G
cm9udGVuZChlcnJvclN0cmluZywgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gbm9kZUlkOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0KKworICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zKTsK
IH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApCitSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5z
cGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXApCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gJm5vZGUtPmRvY3VtZW50KCk7
CiAgICAgaWYgKGF1dG8qIHRlbXBsYXRlSG9zdCA9IGRvY3VtZW50LT50ZW1wbGF0ZURvY3VtZW50
SG9zdCgpKQpAQCAtMjcwNiw5ICsyNzg5LDExIEBAIEpTQzo6SlNWYWx1ZSBJbnNwZWN0b3JET01B
Z2VudDo6bm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIE5vCiAg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KCZzdGF0ZSksIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIG5v
ZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFn
ZW50U2hhZG93VHJlZXMoRXJyb3JTdHJpbmcmLCBib29sIGFsbG93KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEFsbG93RWRpdGluZ1VzZXJBZ2Vu
dFNoYWRvd1RyZWVzKGJvb2wgYWxsb3cpCiB7CiAgICAgbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRT
aGFkb3dUcmVlcyA9IGFsbG93OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5oCmluZGV4IDNlMzc3MDdhZmVjZjc4ZjQyMThhYTgzMDFlMWVhMmQ0MWM3
MjUxNzIuLjdmMjg3MmRmNDllMGQ0MGFiMDIwY2Q5ODg0ZGVkMDAzMDhmMWEyYTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgK
QEAgLTc2LDE0ICs3NiwxMiBAQCBjbGFzcyBTaGFkb3dSb290OwogCiBzdHJ1Y3QgSGlnaGxpZ2h0
Q29uZmlnOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9y
RE9NQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVj
dG9yOjpET01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEluc3BlY3RvckRPTUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBJbnNwZWN0b3JET01BZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9y
T3ZlcmxheSopOwotICAgIH5JbnNwZWN0b3JET01BZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JET01BZ2VudCgpOwogCiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2Vw
dGlvbkNvZGUpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhFeGNlcHRpb24mJik7
CkBAIC0xMDIsNjIgKzEwMCw2MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBu
b2RlQXNTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgTm9kZSopOwogCiAgICAgLy8g
SW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFj
a2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBET01CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIKLSAgICB2b2lkIHF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgaW50KiBlbGVtZW50SWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3JzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldERvY3VtZW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4mIHJvb3QpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVx
dWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50
IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmLCBpbnQgZWxl
bWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBj
b25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlTm9kZShFcnJvclN0
cmluZyYsIGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Tm9kZU5hbWUoRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCogbmV3SWQpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgV1RG
OjpTdHJpbmcqIG91dGVySFRNTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRPdXRlckhUTUwoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBpbnNlcnRBZGphY2VudEhUTUwoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQ+IHF1ZXJ5U2VsZWN0b3IoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+Pj4gcXVlcnlTZWxlY3RvckFsbChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4g
Z2V0RG9jdW1lbnQoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHJlcXVlc3RDaGlsZE5vZGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBP
cHRpb25hbDxpbnQ+JiYgZGVwdGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc2V0QXR0cmlidXRlVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVzQXNUZXh0
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiByZW1vdmVBdHRyaWJ1dGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiBzZXROb2RlTmFtZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxTdHJpbmc+IGdldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRPdXRl
ckhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW5zZXJ0QWRqYWNl
bnRIVE1MKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHBv
c2l0aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0Tm9kZVZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRFdmVudE5hbWVz
KCk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgdm9p
ZCBnZXREYXRhQmluZGluZ3NGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+JiBk
YXRhQXJyYXkpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgT3B0aW9uYWw8U3RyaW5nPiYgYXNzb2NpYXRlZERhdGEp
IG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+PiBnZXRE
YXRhQmluZGluZ3NGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0QXNzb2NpYXRl
ZERhdGFGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNlbmRpZgot
ICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVyPj4mIGxpc3RlbmVyc0FycmF5KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEV2ZW50TGlz
dGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYsIGludCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlz
YWJsZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIo
RXJyb3JTdHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklkLCBjb25zdCBKU09OOjpPYmplY3QqIG9w
dGlvbnMpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIo
RXJyb3JTdHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
PiYgYXhQcm9wZXJ0aWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRD
b3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0
cjxKU09OOjpBcnJheU9mPGludD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjYXJkU2VhcmNo
UmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEF0dHJpYnV0ZXMoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVz
dWx0KSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+
PiBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXZl
bnRMaXN0ZW5lckRpc2FibGVkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cklkLCBib29sKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IHNldEJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcklkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlQnJlYWtwb2ludEZv
ckV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+PiBnZXRBY2Nlc3NpYmlsaXR5
UHJvcGVydGllc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcgLyog
c2VhcmNoSWQgKi8sIGludCAvKiByZXN1bHRDb3VudCAqLz4+IHBlcmZvcm1TZWFyY2goY29uc3Qg
U3RyaW5nJiBxdWVyeSwgUmVmUHRyPEpTT046OkFycmF5PiYmIG5vZGVJZHMsIE9wdGlvbmFsPGJv
b2w+JiYgY2FzZVNlbnNpdGl2ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+
PiBnZXRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgs
IGludCB0b0luZGV4KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGRpc2NhcmRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRB
dHRyaWJ1dGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5n
JiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRD
b25maWcpOwogI2Vsc2UKLSAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcsIGNv
bnN0IGJvb2wqIHNob3dSdWxlcnMpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxib29sPiYmIHNob3dSdWxl
cnMpOwogI2VuZGlmCi0gICAgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBu
b2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25z
dCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5h
dGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmLCBjb25z
dCBKU09OOjpBcnJheSYgcXVhZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRTZWxlY3RvcihFcnJvclN0cmluZyYsIGNvbnN0
IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcqIGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0
Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0Q29uZmlnLCBj
b25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBu
b2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5l
Q29sb3IpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJ
ZCwgaW50IHRhcmdldE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9k
ZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHVuZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtVbmRvYWJs
ZVN0YXRlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmb2N1cyhFcnJvclN0cmlu
ZyYsIGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0SW5zcGVjdGVkTm9kZShFcnJv
clN0cmluZyYsIGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QWxsb3dFZGl0aW5n
VXNlckFnZW50U2hhZG93VHJlZXMoRXJyb3JTdHJpbmcmLCBib29sIGFsbG93KSBmaW5hbDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiByZXF1ZXN0Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHB1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gaGlkZUhpZ2hsaWdodCgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3Jk
aW5hdGVzKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhp
Z2hsaWdodFF1YWQoUmVmPEpTT046OkFycmF5PiYmIHF1YWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxi
b29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHRTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIGhp
Z2hsaWdodENvbmZpZywgY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0Tm9kZShSZWY8SlNPTjo6T2JqZWN0PiYm
IGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQ+JiYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElk
Jik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGln
aHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpTT046Ok9iamVjdD4m
JiBoaWdobGlnaHRDb25maWcpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gaGlnaGxpZ2h0RnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgb3V0bGluZUNvbG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBtb3ZlVG8oSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCB0YXJnZXROb2RlSWQsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiB1bmRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiByZWRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBtYXJrVW5kb2FibGVTdGF0ZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZm9jdXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0
SW5zcGVjdGVkTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBbGxvd0VkaXRpbmdVc2Vy
QWdlbnRTaGFkb3dUcmVlcyhib29sKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bgotICAgIGludCBpZGVudGlmaWVyRm9yTm9kZShOb2RlJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQgaWRlbnRpZmllckZvck5vZGUoTm9kZSYpOwogICAgIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcnNUb05vZGUoTm9kZSYpOwogICAgIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShO
b2RlJik7CiAgICAgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUmKTsKQEAgLTE4NSwxMiArMTgz
LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25z
dCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cyk7CiAKLSAgICBpbnQgcHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqKTsKLSAgICBpbnQgcHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgaW50
IGRvY3VtZW50Tm9kZUlkLCBOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
Tm9kZSopOwotICAgIGludCBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nLCBOb2Rl
Kik7Ci0gICAgTm9kZSogbm9kZUZvcklkKGludCBub2RlSWQpOwotICAgIGludCBib3VuZE5vZGVJ
ZChjb25zdCBOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVz
aE5vZGVUb0Zyb250ZW5kKE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCBwdXNoTm9kZVRvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcm
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBkb2N1bWVudE5vZGVJZCwgTm9kZSop
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQoTm9kZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcsIE5vZGUq
KTsKKyAgICBOb2RlKiBub2RlRm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGJvdW5kTm9kZUlkKGNvbnN0
IE5vZGUqKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlc29sdmVOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsK
ICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKQEAgLTIwMiwxMiArMjAwLDEyIEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHMoKTsKICAgICB2b2lkIHJlc2V0KCk7
CiAKLSAgICBOb2RlKiBhc3NlcnROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAg
RWxlbWVudCogYXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIERv
Y3VtZW50KiBhc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOworICAgIE5v
ZGUqIGFzc2VydE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgRWxlbWVudCogYXNzZXJ0RWxlbWVudChJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkKTsKKyAgICBEb2N1bWVudCogYXNzZXJ0RG9jdW1lbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAK
ICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
dmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYs
IGJvb2wgY2FwdHVyZSk7Ci0gICAgaW50IGlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYs
IGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVy
ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRGb3JF
dmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoVklE
RU8pCkBAIC0yMTUsMzMgKzIxMywzMyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkIGhp
Z2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7Ci0gICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVy
cm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENv
bmZpZywgYm9vbCBzaG93UnVsZXJzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29u
ZmlnPiBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiwgY29u
c3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIHZvaWQgc2V0
U2VhcmNoaW5nRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGJvb2wg
ZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIGJvb2wgc2hv
d1J1bGVycyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0
Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
ZyYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKIAog
ICAgIC8vIE5vZGUtcmVsYXRlZCBtZXRob2RzLgotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
Tm9kZT4sIGludD4gTm9kZVRvSWRNYXA7Ci0gICAgaW50IGJpbmQoTm9kZSosIE5vZGVUb0lkTWFw
Kik7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+IE5vZGVUb0lkTWFwOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIGJpbmQoTm9kZSosIE5vZGVUb0lkTWFwKik7CiAgICAgdm9pZCB1bmJpbmQoTm9k
ZSosIE5vZGVUb0lkTWFwKik7CiAKLSAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkKTsKLSAgICBFbGVtZW50KiBhc3NlcnRFZGl0YWJsZUVsZW1lbnQo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsKKyAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCk7CisgICAgRWxlbWVudCogYXNzZXJ0RWRpdGFibGVFbGVtZW50KEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQpOwogCi0gICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50
IGRlcHRoID0gMSk7CisgICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGludCBkZXB0aCA9IDEpOwogCiAgICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gYnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqLCBpbnQg
ZGVwdGgsIE5vZGVUb0lkTWFwKik7CiAgICAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gYnVp
bGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqKTsKICAgICBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFp
bmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCk7CiAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPj4gYnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApOwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lciYsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21T
dHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtw
b2ludD4mKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllcz4gYnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2Rl
Kik7Ci0gICAgdm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYs
IEpTT046OkFycmF5T2Y8aW50PiYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkV2ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cklkIGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBl
LCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOworICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWls
ZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUmKTsKKyAgICB2b2lkIHByb2Nl
c3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mKTsKICAgICAKICAgICBOb2RlKiBub2RlRm9y
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwotICAgIE5vZGUqIG5vZGVGb3JPYmplY3RJZChjb25z
dCBTdHJpbmcmIG9iamVjdElkKTsKKyAgICBOb2RlKiBub2RlRm9yT2JqZWN0SWQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKIAogICAgIHZvaWQg
ZGlzY2FyZEJpbmRpbmdzKCk7CiAKLSAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRRdWFkPiwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcyk7
CisgICAgdm9pZCBpbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4s
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0
bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcyk7CiAKICAgICBJ
bnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9NRnJvbnRlbmREaXNwYXRjaGVyPiBt
X2Zyb250ZW5kRGlzcGF0Y2hlcjsKQEAgLTI1MSwxMCArMjQ5LDEwIEBAIHByaXZhdGU6CiAgICAg
Tm9kZVRvSWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwogICAgIC8vIE93bnMgbm9kZSBtYXBw
aW5ncyBmb3IgZGFuZ2xpbmcgbm9kZXMuCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxOb2Rl
VG9JZE1hcD4+IG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHM7Ci0gICAgSGFzaE1hcDxpbnQsIE5vZGUq
PiBtX2lkVG9Ob2RlOwotICAgIEhhc2hNYXA8aW50LCBOb2RlVG9JZE1hcCo+IG1faWRUb05vZGVz
TWFwOwotICAgIEhhc2hTZXQ8aW50PiBtX2NoaWxkcmVuUmVxdWVzdGVkOwotICAgIGludCBtX2xh
c3ROb2RlSWQgeyAxIH07CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCwgTm9kZSo+IG1faWRUb05vZGU7CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCwgTm9kZVRvSWRNYXAqPiBtX2lkVG9Ob2Rlc01hcDsKKyAgICBIYXNoU2V0
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBtX2NoaWxkcmVuUmVxdWVzdGVkOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG1fbGFzdE5vZGVJZCB7IDEgfTsK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFJlZlB0cjxOb2RlPj4+IFNlYXJjaFJlc3VsdHM7CiAgICAgU2VhcmNoUmVz
dWx0cyBtX3NlYXJjaFJlc3VsdHM7CkBAIC0yODUsNyArMjgzLDcgQEAgcHJpdmF0ZToKICNlbmRp
ZgogCiAgICAgc3RydWN0IEluc3BlY3RvckV2ZW50TGlzdGVuZXIgewotICAgICAgICBpbnQgaWRl
bnRpZmllciB7IDEgfTsKKyAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgaWRlbnRpZmllciB7IDEgfTsKICAgICAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBl
dmVudFRhcmdldDsKICAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXI7
CiAgICAgICAgIEF0b21TdHJpbmcgZXZlbnRUeXBlOwpAQCAtMjk1LDcgKzI5Myw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgSW5zcGVjdG9yRXZlbnRMaXN0ZW5lcigpIHsgfQogCi0gICAgICAgIElu
c3BlY3RvckV2ZW50TGlzdGVuZXIoaW50IGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiB0YXJnZXQs
IGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNh
cHR1cmUpCisgICAgICAgIEluc3BlY3RvckV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwg
Y29uc3QgQXRvbVN0cmluZyYgdHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2Fw
dHVyZSkKICAgICAgICAgICAgIDogaWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICAgICAgICAg
LCBldmVudFRhcmdldCgmdGFyZ2V0KQogICAgICAgICAgICAgLCBldmVudExpc3RlbmVyKCZsaXN0
ZW5lcikKQEAgLTMyMSw4ICszMTksOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFdmVu
dEZpcmVkQ2FsbGJhY2s7CiAKICAgICBIYXNoU2V0PGNvbnN0IEV2ZW50Kj4gbV9kaXNwYXRjaGVk
RXZlbnRzOwotICAgIEhhc2hNYXA8aW50LCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50
TGlzdGVuZXJFbnRyaWVzOwotICAgIGludCBtX2xhc3RFdmVudExpc3RlbmVySWQgeyAxIH07Cisg
ICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCwgSW5z
cGVjdG9yRXZlbnRMaXN0ZW5lcj4gbV9ldmVudExpc3RlbmVyRW50cmllczsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBtX2xhc3RFdmVudExpc3RlbmVySWQg
eyAxIH07CiAKICAgICBib29sIG1fc2VhcmNoaW5nRm9yTm9kZSB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX3N1cHByZXNzQXR0cmlidXRlTW9kaWZpZWRFdmVudCB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmNwcAppbmRleCAwNzlhMTE2ODZlNDk4Yjg0Nzk5NTU5Y2YzY2Q4YWYyZjdjMDkx
ODE3Li5jMzJlNWEzOTE0ZTc5ZjMwYmMxNGU2OGRkNmNmYmQzMWIwMDU0OWRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTEyOCwxMDkgKzEyOCw5NCBAQCB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCiAgICAgICAgIG1fcGF1c2VPbkFs
bFRpbWVvdXRzQnJlYWtwb2ludC0+cmVzZXRIaXRDb3VudCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OnNldEV2ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludFR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyog
ZXZlbnROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRC
cmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSBicmVh
a3BvaW50VHlwZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKLSAgICBpZiAoYnJlYWtwb2ludFR5cGVTdHJpbmcuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImJyZWFrcG9pbnRUeXBlIGlzIGVtcHR5Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgIGF1dG8gYnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNw
ZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFrcG9pbnRUeXBlU3RyaW5n
KTsKLSAgICBpZiAoIWJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFr
ZVN0cmluZygiVW5rbm93biBicmVha3BvaW50VHlwZTogIl9zLCBicmVha3BvaW50VHlwZVN0cmlu
Zyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBX
VEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmIChl
dmVudE5hbWUgJiYgIWV2ZW50TmFtZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3Bv
aW50VHlwZS52YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVu
dEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgewotICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVy
QnJlYWtwb2ludHMuYWRkKCpldmVudE5hbWUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkp
Ci0gICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCB3aXRoIGV2ZW50TmFt
ZSBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWV2ZW50
TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09IFByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKKyAgICAgICAg
ICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUsIGJyZWFrcG9pbnQu
cmVsZWFzZU5vbk51bGwoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJCcmVha3BvaW50IHdpdGggZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIGV2ZW50TmFtZSJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zKTsKICAgICB9CiAKLSAgICBzd2l0
Y2ggKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRpb25GcmFtZToKLSAg
ICAgICAgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGJy
ZWFrcG9pbnQpKTsKLSAgICAgICAgYnJlYWs7CisgICAgc3dpdGNoIChicmVha3BvaW50VHlwZSkg
eworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpB
bmltYXRpb25GcmFtZToKKyAgICAgICAgaWYgKCFzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQo
ZXJyb3JTdHJpbmcsIFdURk1vdmUoYnJlYWtwb2ludCkpKQorICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6
OkludGVydmFsOgotICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQp
Ci0gICAgICAgICAgICBtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShi
cmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJl
YWtwb2ludCBmb3IgSW50ZXJ2YWwgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpJbnRl
cnZhbDoKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIEludGVydmFsIGFs
cmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2lu
dCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpM
aXN0ZW5lcjoKLSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQot
ICAgICAgICAgICAgbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJl
YWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIExpc3RlbmVyIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVu
ZXI6CisgICAgICAgIGlmIChtX3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQorICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBMaXN0ZW5lciBhbHJl
YWR5IGV4aXN0cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQg
PSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGlt
ZW91dDoKLSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAg
ICAgICAgICBtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9p
bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50
IGZvciBUaW1lb3V0IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAgICBjYXNl
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAg
ICAgICAgaWYgKG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgVGltZW91dCBhbHJlYWR5IGV4aXN0
cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2ludCA9IFdURk1vdmUo
YnJlYWtwb2ludCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRCcmVha3Bv
aW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlw
ZVN0cmluZywgY29uc3QgU3RyaW5nKiBldmVudE5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQo
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBl
LCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKLSAgICBpZiAoYnJlYWtwb2ludFR5cGVTdHJp
bmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImJyZWFrcG9pbnRUeXBlIGlz
IGVtcHR5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKIAotICAgIGF1dG8gYnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFr
cG9pbnRUeXBlU3RyaW5nKTsKLSAgICBpZiAoIWJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBicmVha3BvaW50VHlwZTogIl9zLCBicmVh
a3BvaW50VHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZXZl
bnROYW1lICYmICFldmVudE5hbWUtPmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoYnJlYWtwb2lu
dFR5cGUudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRC
cmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJy
ZWFrcG9pbnRzLnJlbW92ZSgqZXZlbnROYW1lKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudE5hbWUgbWlzc2luZyJfczsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIWV2ZW50TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KGJyZWFrcG9pbnRUeXBlID09IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50
VHlwZTo6TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9pbnRz
LnJlbW92ZShldmVudE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnROYW1lIG1pc3NpbmciX3MpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCi0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhw
ZWN0ZWQgZXZlbnROYW1lIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiVW5leHBlY3RlZCBldmVudE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRj
aCAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAg
ICAgICBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoZXJyb3JTdHJpbmcsIG51bGxwdHIpOwot
ICAgICAgICBicmVhazsKKyAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1l
OgorICAgICAgICBpZiAoIXNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywg
bnVsbHB0cikpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6CisgICAgY2FzZSBQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgogICAgICAg
ICBpZiAoIW1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJCcmVha3BvaW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfczsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWxzIG1pc3Np
bmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gbnVsbHB0
cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5l
cjoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6
TGlzdGVuZXI6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCkK
LSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNz
aW5nIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZv
ciBMaXN0ZW5lcnMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0Jy
ZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6OlRpbWVvdXQ6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGU6OlRpbWVvdXQ6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsVGltZW91
dHNCcmVha3BvaW50KQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
VGltZW91dHMgbWlzc2luZyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
QnJlYWtwb2ludCBmb3IgVGltZW91dHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFs
bFRpbWVvdXRzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogfQogCiB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxIYW5kbGVFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcikKQEAgLTMyOSw0NSAr
MzE0LDUwIEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkRmlyZVRpbWVyKGJv
b2wgb25lU2hvdCkKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlRm9yU3BlY2lhbEJy
ZWFrcG9pbnQoKmJyZWFrcG9pbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OnNldFVSTEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6c2V0VVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0
aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7
Ci0gICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJC
cmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRvIGJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbFVS
THNCcmVha3BvaW50KQotICAgICAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBX
VEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAobV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxzIGFscmVh
ZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBXVEZN
b3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChv
cHRpb25hbElzUmVnZXggJiYgKm9wdGlvbmFsSXNSZWdleCkgeworICAgIGlmIChpc1JlZ2V4ICYm
ICppc1JlZ2V4KSB7CiAgICAgICAgIGlmICghbV91cmxSZWdleEJyZWFrcG9pbnRzLmFkZCh1cmws
IGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfczsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXggYWxy
ZWFkeSBleGlzdHMiX3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJl
YWtwb2ludHMuYWRkKHVybCwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIFVSTCBhbHJlYWR5IGV4aXN0
cyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gVVJMIGFscmVhZHkgZXhpc3RzIl9zKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZVVSTEJyZWFrcG9pbnQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCog
b3B0aW9uYWxJc1JlZ2V4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlVVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwg
T3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGlmICghbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBtaXNzaW5nIl9zOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBtaXNzaW5n
Il9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlv
bmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlz
UmVnZXgpIHsKICAgICAgICAgaWYgKCFtX3VybFJlZ2V4QnJlYWtwb2ludHMucmVtb3ZlKHVybCkp
Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9yIGdpdmVu
IHJlZ2V4Il9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGJy
ZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4Il9zKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
IW1fdXJsVGV4dEJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBicmVha3BvaW50IGZvciBnaXZlbiBVUkwiX3M7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gVVJMIl9z
KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmJyZWFrT25VUkxJZk5lZWRlZChjb25zdCBTdHJpbmcmIHVybCwgVVJMQnJlYWtw
b2ludFNvdXJjZSBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IDRlYzBmMDhjOWI1
YTFjMjdkZDQzZWE4NTQwNGVjZTYyYzkzNmYxZmEuLjg5NjA5ZWNmYzBkODc5Njc0MWQ0NTVhMDNl
N2RhYzA5MWU4ZGNjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCkBAIC01MCw4ICs1MCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV2ZW50OwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKQEAgLTY1LDEwICs2MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGVuYWJsZWQoKSBjb25zdDsKIAogICAgIC8vIERPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBzZXRVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IGJvb2wqIGlzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9u
cykgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IGJvb2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0
RXZlbnRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlw
ZSwgY29uc3QgU3RyaW5nKiBldmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSkgZmluYWw7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRVUkxCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVVUkxCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
dXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcm
IGV2ZW50TmFtZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUV2ZW50QnJlYWtw
b2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlw
ZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6TGlzdGVuZXIKICAgICB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpIG92ZXJy
aWRlOwpAQCAtODgsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJs
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtw
b2ludD4mJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9p
bnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiYmKSA9IDA7CiAKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIG1f
ZGVidWdnZXJBZ2VudCB7IG51bGxwdHIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4
IGU1OTFlOTE2OWRmMzA0NTQ1NjIwYjU0MDMyYjYyZmEyYmFkZWNiNmUuLjAzYTdmZDA4ZDIwNTdj
MjJjYWNkY2Y4NTA1OGYxZTRkZjA0ZGQ3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAg
LTcwLDQxICs3MCwzOSBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSbwogCiB2b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlz
YWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoKQogewot
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpID09
IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFk
eSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50
KHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAg
ICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTVN0b3JhZ2UgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFnZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50
KG51bGxwdHIpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxKU09OOjpB
cnJheU9mPFN0cmluZz4+PiYgaXRlbXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NU3RvcmFnZTo6SXRlbT4+PiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJ
ZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFt
ZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFzdG9yYWdl
QXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9yIGdpdmVu
IHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBzdG9yYWdlSXRlbXMg
PSBKU09OOjpBcnJheU9mPEpTT046OkFycmF5T2Y8U3RyaW5nPj46OmNyZWF0ZSgpOwotCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5ndGgoKTsgKytpKSB7CiAg
ICAgICAgIFN0cmluZyBrZXkgPSBzdG9yYWdlQXJlYS0+a2V5KGkpOwogICAgICAgICBTdHJpbmcg
dmFsdWUgPSBzdG9yYWdlQXJlYS0+aXRlbShrZXkpOwpAQCAtMTE0LDQ3ICsxMTIsNTIgQEAgdm9p
ZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICAgICAgZW50cnktPmFkZEl0ZW0odmFsdWUpOwogICAg
ICAgICBzdG9yYWdlSXRlbXMtPmFkZEl0ZW0oV1RGTW92ZShlbnRyeSkpOwogICAgIH0KLQotICAg
IGl0ZW1zID0gV1RGTW92ZShzdG9yYWdlSXRlbXMpOworICAgIHJldHVybiBXVEZNb3ZlKHN0b3Jh
Z2VJdGVtcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9y
YWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3Rv
cmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3Rv
cmFnZUl0ZW0oUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0
b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1l
KTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEo
ZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlmICghc3RvcmFn
ZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW0o
ZnJhbWUsIGtleSwgdmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKICAgICBpZiAocXVvdGFFeGNlcHRp
b24pCi0gICAgICAgIGVycm9yU3RyaW5nID0gRE9NRXhjZXB0aW9uOjpuYW1lKFF1b3RhRXhjZWVk
ZWRFcnJvcik7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChET01FeGNlcHRpb246Om5h
bWUoUXVvdGFFeGNlZWRlZEVycm9yKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5n
JiBrZXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlk
LCBjb25zdCBTdHJpbmcmIGtleSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9y
YWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7
Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IHN0b3JhZ2UgZm9yIGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VB
cmVhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAg
c3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oZnJhbWUsIGtleSk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJET01TdG9yYWdlSXRlbXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Y2xlYXJET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1l
OwotICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0
b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgYXV0byBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShl
cnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdl
QXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAg
IHN0b3JhZ2VBcmVhLT5jbGVhcihmcmFtZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBTdHJp
bmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU3RvcmFnZSYgc3RvcmFnZSkK
QEAgLTE2OCw5ICsxNzEsOSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9y
YWdlSWQoU3RvcmFnZSYgc3RvcmFnZSkKICAgICByZXR1cm4gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4ucHRyKCksIGlzTG9jYWxTdG9yYWdlKS0+dG9K
U09OU3RyaW5nKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKK1JlZjxQcm90b2Nv
bDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3Jh
Z2VJZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2Up
CiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJ
ZDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luLT50b1Jh
d1N0cmluZygpKQogICAgICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoaXNMb2NhbFN0b3JhZ2UpCiAg
ICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xNzgsMjggKzE4MSwyOCBAQCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OnN0bwogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01T
dG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9y
aWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gaWQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0
b3JhZ2VJZChzZWN1cml0eU9yaWdpbiwgc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OkxvY2Fs
KTsKKyAgICBhdXRvIGlkID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoc2Vj
dXJpdHlPcmlnaW4sIHN0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCk7CiAKICAgICBp
ZiAoa2V5LmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFn
ZUl0ZW1zQ2xlYXJlZChpZCk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9y
YWdlSXRlbXNDbGVhcmVkKFdURk1vdmUoaWQpKTsKICAgICBlbHNlIGlmIChuZXdWYWx1ZS5pc051
bGwoKSkKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtUmVtb3Zl
ZChpZCwga2V5KTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVt
UmVtb3ZlZChXVEZNb3ZlKGlkKSwga2V5KTsKICAgICBlbHNlIGlmIChvbGRWYWx1ZS5pc051bGwo
KSkKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtQWRkZWQoaWQs
IGtleSwgbmV3VmFsdWUpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFn
ZUl0ZW1BZGRlZChXVEZNb3ZlKGlkKSwga2V5LCBuZXdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKGlkLCBrZXksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9y
YWdlSXRlbVVwZGF0ZWQoV1RGTW92ZShpZCksIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKIH0K
IAotUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9y
YWdlQXJlYShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3Rv
cmFnZUlkLCBGcmFtZSomIHRhcmdldEZyYW1lKQorUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJn
ZXRGcmFtZSkKIHsKLSAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW47Ci0gICAgaWYgKCFzdG9yYWdl
SWQuZ2V0U3RyaW5nKCJzZWN1cml0eU9yaWdpbiJfcywgc2VjdXJpdHlPcmlnaW4pKSB7CisgICAg
YXV0byBzZWN1cml0eU9yaWdpbiA9IHN0b3JhZ2VJZC0+Z2V0U3RyaW5nKFByb3RvY29sOjpET01T
dG9yYWdlOjpTdG9yYWdlSWQ6OnNlY3VyaXR5T3JpZ2luS2V5KTsKKyAgICBpZiAoIXNlY3VyaXR5
T3JpZ2luKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2VjdXJpdHlPcmlnaW4g
aW4gZ2l2ZW4gc3RvcmFnZUlkIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IGZhbHNlOwotICAgIGlmICghc3RvcmFnZUlkLmdldEJv
b2xlYW4oImlzTG9jYWxTdG9yYWdlIl9zLCBpc0xvY2FsU3RvcmFnZSkpIHsKKyAgICBhdXRvIGlz
TG9jYWxTdG9yYWdlID0gc3RvcmFnZUlkLT5nZXRCb29sZWFuKFByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ6OmlzTG9jYWxTdG9yYWdlS2V5KTsKKyAgICBpZiAoIWlzTG9jYWxTdG9yYWdl
KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaXNMb2NhbFN0b3JhZ2UgaW4gZ2l2
ZW4gc3RvcmFnZUlkIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMjEwLDcg
KzIxMyw3IEBAIFJlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpm
aW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGlmICghaXNMb2NhbFN0b3JhZ2UpCisgICAgaWYgKCEqaXNMb2NhbFN0
b3JhZ2UpCiAgICAgICAgIHJldHVybiBtX2luc3BlY3RlZFBhZ2Uuc2Vzc2lvblN0b3JhZ2UoKS0+
c3RvcmFnZUFyZWEodGFyZ2V0RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuZGF0
YSgpKTsKICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
cigpLmxvY2FsU3RvcmFnZUFyZWEoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5oCmluZGV4IGRkYmI1ZDUzNDdmM2JlYWJlM2NmYWIyMDFkNjgzOGM4OTZkMjFl
MzkuLjMzODZjYjg3OWYxMTc4YzFiOTYzNTc3NWM5YTBlODY0ZjViOTRjNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuaApAQCAtNDUsMzYgKzQ1LDM0IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKIGNsYXNzIFN0b3JhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
CiBjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKTsK
IAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gRE9NU3Rv
cmFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QmIHN0b3JhZ2VJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
Pj4mIGl0ZW1zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJ
dGVtKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0
cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRE9NU3RvcmFnZUl0ZW1zKEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQpIG92ZXJyaWRlOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpJdGVtPj4+IGdldERPTVN0b3JhZ2VJdGVtcyhSZWY8
SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBzZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NU3RvcmFnZUl0
ZW0oUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyRE9NU3RvcmFn
ZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKTsKIAogICAgIC8vIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiopOwogCiAgICAgLy8gQ29tbWFuZExp
bmVBUEkKICAgICBzdGF0aWMgU3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlJik7Ci0gICAgc3RhdGlj
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3Jh
Z2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOworICAgIHN0YXRpYyBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBzdG9yYWdlSWQo
U2VjdXJpdHlPcmlnaW4qLCBib29sIGlzTG9jYWxTdG9yYWdlKTsKIAogcHJpdmF0ZToKLSAgICBS
ZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0IEpT
T046Ok9iamVjdCYsIEZyYW1lKiYpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3Jh
Z2VBcmVhKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmPEpTT046Ok9iamVj
dD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
cjo6RE9NU3RvcmFnZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6RE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggNGI5YTU1ZGU1NTdiZTk0Njcx
NmY1ZTAyMTExNDQzNzExODJkNmQ1Mi4uMjljMTE0ZjI2NzY4M2QyNTA2NTI3YWQ3Y2Y5ZDU3ZmJi
MWU5MmYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFj
ZSB7CiAKIHZvaWQgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNrJiBy
ZXF1ZXN0Q2FsbGJhY2ssIFNRTEVycm9yJiBlcnJvcikKIHsKLSAgICBhdXRvIGVycm9yT2JqZWN0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQorICAgIGF1
dG8gZXJyb3JPYmplY3QgPSBQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWVzc2FnZShlcnJvci5tZXNzYWdlSXNvbGF0ZWRDb3B5KCkpCiAgICAgICAgIC5z
ZXRDb2RlKGVycm9yLmNvZGUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTIzMCw1MSArMjMw
LDQ4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0
UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVk
KTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRE
YXRhYmFzZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
YXRhYmFzZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5zZXRFbmFibGVkRGF0YWJhc2VBZ2VudCh0aGlzKTsKIAogICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiBEYXRhYmFzZVRyYWNrZXI6OnNpbmdsZXRvbigpLm9wZW5EYXRhYmFzZXMoKSkK
ICAgICAgICAgZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJEYXRhYmFzZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50
KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21h
aW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZERhdGFiYXNlQWdlbnQobnVsbHB0cik7CiAKICAgICBtX3Jlc291cmNlcy5jbGVhcigp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpn
ZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBuYW1lcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgUHJvdG9jb2w6OkRh
dGFiYXNlOjpEYXRhYmFzZUlkJiBkYXRhYmFzZUlkKQogewotICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBuYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRl
KCk7CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgp
ICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRGF0YWJhc2UgZG9tYWlu
IG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKKyAgICBhdXRvIG5hbWVzID0gSlNPTjo6QXJyYXlPZjxT
dHJpbmc+OjpjcmVhdGUoKTsKICAgICBpZiAoYXV0byogZGF0YWJhc2UgPSBkYXRhYmFzZUZvcklk
KGRhdGFiYXNlSWQpKSB7CiAgICAgICAgIGZvciAoYXV0byYgdGFibGVOYW1lIDogZGF0YWJhc2Ut
PnRhYmxlTmFtZXMoKSkKICAgICAgICAgICAgIG5hbWVzLT5hZGRJdGVtKHRhYmxlTmFtZSk7CiAg
ICAgfQorICAgIHJldHVybiBXVEZNb3ZlKG5hbWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50OjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3QgUHJvdG9jb2w6OkRh
dGFiYXNlOjpEYXRhYmFzZUlkJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8
RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBpZiAobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewogICAgICAg
ICByZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBl
bmFibGVkIl9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKaW5kZXggNDMwNTAzMTkxY2RjYjk4NzlmZGI2NTUx
MzljMTRiYjc3YTczNzQyZi4uMDFjZWY0MzliNGFjNmRhZDJlNDEyNmI1NDM0MTZjNTM5NDMyY2Jj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAgLTQxLDI0ICs0MSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEluc3BlY3RvckRhdGFiYXNlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
Ci0gICAgfkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9y
RGF0YWJhc2VBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5h
YmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
JiBuYW1lcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBl
bmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRp
c2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPFN0cmluZz4+PiBnZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUwo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKTsKIAogICAgIC8vIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkQ29tbWl0TG9hZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcAppbmRleCBmZjhmMzBmNDAzZjg1YzdkZGJlMzFiMTBlMDNjZWY1ZmNkZjdmMDA2
Li5hMTQ1ZTA0ZWIyMThkZThhNDJmZjg5ODI5OGI4YmVhNjgyYzRlZGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcApAQCAtNzAsMjYgKzcwLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKLXVzaW5nIEpT
T046OkFycmF5T2Y7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OkRhdGFi
YXNlV2l0aE9iamVjdFN0b3JlczsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6RGF0YUVudHJ5OwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk7
Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg7Ci11c2luZyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOwotdXNpbmcgSW5zcGVjdG9y
OjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleDsKLQotdHlwZWRlZiBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgUmVxdWVzdENhbGxiYWNrOwotdHlwZWRl
ZiBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERh
dGFiYXNlTmFtZXNDYWxsYmFjayBSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOwotdHlwZWRl
ZiBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERh
dGFiYXNlQ2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rv
cjo6SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNr
IFJlcXVlc3REYXRhQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2sgQ2xlYXJPYmplY3RT
dG9yZUNhbGxiYWNrOwotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci11c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJp
bmc+OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CkBAIC0xMDMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RXhlY3V0YWJsZVdpdGhE
YXRhYmFzZSgpID0gZGVmYXVsdDsKICAgICB2b2lkIHN0YXJ0KElEQkZhY3RvcnkqLCBTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZShJREJEYXRhYmFzZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYg
cmVxdWVzdENhbGxiYWNrKCkgPSAwOworICAgIHZpcnR1YWwgQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgPSAwOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIHByaXZhdGU6CiAg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OwpAQCAtMTcxLDIwICsxNTEsMjAg
QEAgdm9pZCBFeGVjdXRhYmxlV2l0aERhdGFiYXNlOjpzdGFydChJREJGYWN0b3J5KiBpZGJGYWN0
b3J5LCBTZWN1cml0eU9yaWdpbiosIGNvbnMKIH0KIAogCi1zdGF0aWMgUmVmUHRyPEtleVBhdGg+
IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgaWRiS2V5
UGF0aCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aD4ga2V5UGF0aEZy
b21JREJLZXlQYXRoKGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQogewog
ICAgIGlmICghaWRiS2V5UGF0aCkKLSAgICAgICAgcmV0dXJuIEtleVBhdGg6OmNyZWF0ZSgpLnNl
dFR5cGUoS2V5UGF0aDo6VHlwZTo6TnVsbCkucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShQcm90b2NvbDo6SW5k
ZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpOdWxsKS5yZWxlYXNlKCk7CiAKICAgICBhdXRvIHZpc2l0
b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFtdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7Ci0gICAgICAg
IGF1dG8ga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6
U3RyaW5nKS5yZWxlYXNlKCk7CisgICAgICAgIGF1dG8ga2V5UGF0aCA9IFByb3RvY29sOjpJbmRl
eGVkREI6OktleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5
UGF0aDo6VHlwZTo6U3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgICAgIGtleVBhdGgtPnNldFN0cmlu
ZyhzdHJpbmcpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9LCBbXShjb25zdCBWZWN0
b3I8U3RyaW5nPiYgdmVjdG9yKSB7CiAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheU9m
PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikK
ICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHN0cmluZyk7Ci0gICAgICAgIGF1dG8ga2V5UGF0
aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpLnJlbGVh
c2UoKTsKKyAgICAgICAgYXV0byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0
aDo6Y3JlYXRlKCkuc2V0VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpB
cnJheSkucmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEZNb3ZlKGFycmF5
KSk7CiAgICAgICAgIHJldHVybiBrZXlQYXRoOwogICAgIH0pOwpAQCAtMjE3LDcgKzE5Nyw3IEBA
IHN0YXRpYyBSZWZQdHI8SURCSW5kZXg+IGluZGV4Rm9yT2JqZWN0U3RvcmUoSURCT2JqZWN0U3Rv
cmUqIGlkYk9iamVjdFN0b3JlLCBjb25zCiAKIGNsYXNzIERhdGFiYXNlTG9hZGVyIGZpbmFsIDog
cHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRp
YyBSZWY8RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEYXRhYmFzZUxvYWRlcihjb250ZXh0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFj
aykpKTsKICAgICB9CkBAIC0yMzAsMTcgKzIxMCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgICAgIGF1dG8mIGRhdGFiYXNlSW5mbyA9IGRhdGFiYXNlLmluZm8o
KTsKLSAgICAgICAgYXV0byBvYmplY3RTdG9yZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBvYmplY3RTdG9yZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpJbmRleGVkREI6Ok9iamVj
dFN0b3JlPjo6Y3JlYXRlKCk7CiAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IGRhdGFi
YXNlSW5mby5vYmplY3RTdG9yZU5hbWVzKCk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG9i
amVjdFN0b3JlTmFtZXMpIHsKICAgICAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IGRh
dGFiYXNlSW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShuYW1lKTsKICAgICAgICAgICAg
IGlmICghb2JqZWN0U3RvcmVJbmZvKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgICAgICBhdXRvIGluZGV4ZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0
byBpbmRleGVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9y
ZUluZGV4Pjo6Y3JlYXRlKCk7CiAgICAgCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4SW5m
byA6IG9iamVjdFN0b3JlSW5mby0+aW5kZXhNYXAoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisg
ICAgICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZGV4ID0gUHJvdG9jb2w6OkluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldE5h
bWUoaW5kZXhJbmZvLm5hbWUoKSkKICAgICAgICAgICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5
UGF0aEZyb21JREJLZXlQYXRoKGluZGV4SW5mby5rZXlQYXRoKCkpKQogICAgICAgICAgICAgICAg
ICAgICAuc2V0VW5pcXVlKGluZGV4SW5mby51bmlxdWUoKSkKQEAgLTI0OSw3ICsyMjksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgaW5kZXhlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0
b3JlSW5kZXgpKTsKICAgICAgICAgICAgIH0KICAgICAKLSAgICAgICAgICAgIGF1dG8gb2JqZWN0
U3RvcmUgPSBPYmplY3RTdG9yZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0U3Rv
cmUgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgICAgICAuc2V0TmFtZShvYmplY3RTdG9yZUluZm8tPm5hbWUoKSkKICAgICAgICAgICAgICAg
ICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgob2JqZWN0U3RvcmVJbmZvLT5rZXlQ
YXRoKCkpKQogICAgICAgICAgICAgICAgIC5zZXRBdXRvSW5jcmVtZW50KG9iamVjdFN0b3JlSW5m
by0+YXV0b0luY3JlbWVudCgpKQpAQCAtMjU4LDcgKzIzOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG9iamVjdFN0b3Jlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0b3JlKSk7CiAgICAgICAg
IH0KICAgICAKLSAgICAgICAgYXV0byByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6
OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0
YWJhc2VXaXRoT2JqZWN0U3RvcmVzOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUoZGF0
YWJhc2VJbmZvLm5hbWUoKSkKICAgICAgICAgICAgIC5zZXRWZXJzaW9uKGRhdGFiYXNlSW5mby52
ZXJzaW9uKCkpCiAgICAgICAgICAgICAuc2V0T2JqZWN0U3RvcmVzKFdURk1vdmUob2JqZWN0U3Rv
cmVzKSkKQEAgLTI2Niw5MiArMjQ2LDk2IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2Fs
bGJhY2stPnNlbmRTdWNjZXNzKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfQogCi0gICAgUmVxdWVz
dENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RD
YWxsYmFjay5nZXQoKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJl
cXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgp
OyB9CiBwcml2YXRlOgotICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2sp
CisgICAgRGF0YWJhc2VMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVm
PEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJh
Y2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2Uo
Y29udGV4dCkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxs
YmFjaykpIHsgfQotICAgIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2Fs
bGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVz
dERhdGFiYXNlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAotc3RhdGljIFJlZlB0
cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSlNPTjo6T2JqZWN0KiBrZXkpCitz
dGF0aWMgUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChSZWY8SlNPTjo6
T2JqZWN0PiYmIGtleSkKIHsKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBpZiAoIWtleS0+Z2V0U3Ry
aW5nKCJ0eXBlIiwgdHlwZSkpCisgICAgYXV0byB0eXBlU3RyaW5nID0ga2V5LT5nZXRTdHJpbmco
UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5Ojp0eXBlS2V5KTsKKyAgICBpZiAoIXR5cGVTdHJpbmcp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gbnVtYmVyVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgibnVtYmVyIikp
OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHN0cmluZ1R5cGUoTUFL
RV9TVEFUSUNfU1RSSU5HX0lNUEwoInN0cmluZyIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiBkYXRlVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiZGF0ZSIp
KTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBhcnJheVR5cGUoTUFL
RV9TVEFUSUNfU1RSSU5HX0lNUEwoImFycmF5IikpOworICAgIGF1dG8gdHlwZSA9IFByb3RvY29s
OjpIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkluZGV4ZWREQjo6
S2V5OjpUeXBlPih0eXBlU3RyaW5nKTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwotICAgIGlmICh0eXBlID09IG51
bWJlclR5cGUpIHsKLSAgICAgICAgZG91YmxlIG51bWJlcjsKLSAgICAgICAgaWYgKCFrZXktPmdl
dERvdWJsZSgibnVtYmVyIiwgbnVtYmVyKSkKKyAgICBzd2l0Y2ggKCp0eXBlKSB7CisgICAgY2Fz
ZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU6Ok51bWJlcjogeworICAgICAgICBhdXRv
IG51bWJlciA9IGtleS0+Z2V0RG91YmxlKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6bnVtYmVy
S2V5KTsKKyAgICAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIobnVtYmVyKTsKLSAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gc3RyaW5nVHlwZSkgewotICAgICAgICBTdHJpbmcgc3RyaW5nOwotICAg
ICAgICBpZiAoIWtleS0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpKQorICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoKm51bWJlcik7CisgICAgfQorCisgICAgY2FzZSBQcm90
b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU6OlN0cmluZzogeworICAgICAgICBhdXRvIHN0cmlu
ZyA9IGtleS0+Z2V0U3RyaW5nKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6c3RyaW5nS2V5KTsK
KyAgICAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKLSAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gZGF0ZVR5cGUpIHsKLSAgICAgICAgZG91YmxlIGRhdGU7Ci0gICAgICAgIGlmICgh
a2V5LT5nZXREb3VibGUoImRhdGUiLCBkYXRlKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3Jl
YXRlU3RyaW5nKHN0cmluZyk7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERC
OjpLZXk6OlR5cGU6OkRhdGU6IHsKKyAgICAgICAgYXV0byBkYXRlID0ga2V5LT5nZXREb3VibGUo
UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpkYXRlS2V5KTsKKyAgICAgICAgaWYgKCFkYXRlKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3Jl
YXRlRGF0ZShkYXRlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gYXJyYXlUeXBlKSB7CisgICAg
ICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoKmRhdGUpOworICAgIH0KKworICAgIGNhc2Ug
UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpBcnJheTogeworICAgICAgICBhdXRvIGFy
cmF5ID0ga2V5LT5nZXRBcnJheShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmFycmF5S2V5KTsK
KyAgICAgICAgaWYgKCFhcnJheSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAg
ICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4ga2V5QXJyYXk7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGlmICgha2V5LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJh
eSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZSA9IGFycmF5LT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3Qp
KQorICAgICAgICAgICAgYXV0byBvYmplY3QgPSBhcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOwor
ICAgICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBrZXlBcnJheS5hcHBlbmQoaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChv
YmplY3QuZ2V0KCkpKTsKKyAgICAgICAgICAgIGtleUFycmF5LmFwcGVuZChpZGJLZXlGcm9tSW5z
cGVjdG9yT2JqZWN0KG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVBcnJheShrZXlBcnJheSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJh
eShrZXlBcnJheSk7CisgICAgfQorICAgIH0KIAotICAgIHJldHVybiBpZGJLZXk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQ
dHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKGNvbnN0IEpTT046Ok9iamVj
dCoga2V5UmFuZ2UpCitzdGF0aWMgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21L
ZXlSYW5nZShKU09OOjpPYmplY3QmIGtleVJhbmdlKQogewogICAgIFJlZlB0cjxJREJLZXk+IGlk
Ykxvd2VyOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGxvd2VyOwotICAgIGlmIChrZXlSYW5n
ZS0+Z2V0T2JqZWN0KCJsb3dlciJfcywgbG93ZXIpKSB7Ci0gICAgICAgIGlkYkxvd2VyID0gaWRi
S2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5nZXQoKSk7CisgICAgaWYgKGF1dG8gbG93ZXIg
PSBrZXlSYW5nZS5nZXRPYmplY3QoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UmFuZ2U6Omxvd2Vy
S2V5KSkgeworICAgICAgICBpZGJMb3dlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93
ZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmICghaWRiTG93ZXIpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBSZWZQdHI8SURCS2V5PiBpZGJVcHBlcjsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB1cHBlcjsKLSAgICBpZiAoa2V5UmFuZ2UtPmdldE9i
amVjdCgidXBwZXIiX3MsIHVwcGVyKSkgewotICAgICAgICBpZGJVcHBlciA9IGlkYktleUZyb21J
bnNwZWN0b3JPYmplY3QodXBwZXIuZ2V0KCkpOworICAgIGlmIChhdXRvIHVwcGVyID0ga2V5UmFu
Z2UuZ2V0T2JqZWN0KFByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlcktleSkpIHsK
KyAgICAgICAgaWRiVXBwZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KHVwcGVyLnJlbGVh
c2VOb25OdWxsKCkpOwogICAgICAgICBpZiAoIWlkYlVwcGVyKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCi0gICAgYm9vbCBsb3dlck9wZW47Ci0gICAgaWYgKCFrZXlSYW5n
ZS0+Z2V0Qm9vbGVhbigibG93ZXJPcGVuIl9zLCBsb3dlck9wZW4pKQorICAgIGF1dG8gbG93ZXJP
cGVuID0ga2V5UmFuZ2UuZ2V0Qm9vbGVhbihQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6
bG93ZXJPcGVuS2V5KTsKKyAgICBpZiAoIWxvd2VyT3BlbikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBib29sIHVwcGVyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFu
KCJ1cHBlck9wZW4iX3MsIHVwcGVyT3BlbikpCisgICAgYXV0byB1cHBlck9wZW4gPSBrZXlSYW5n
ZS5nZXRCb29sZWFuKFByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlck9wZW5LZXkp
OworICAgIGlmICghdXBwZXJPcGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKFdURk1vdmUoaWRiTG93ZXIpLCBXVEZNb3ZlKGlkYlVw
cGVyKSwgbG93ZXJPcGVuLCB1cHBlck9wZW4pOworICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3Jl
YXRlKFdURk1vdmUoaWRiTG93ZXIpLCBXVEZNb3ZlKGlkYlVwcGVyKSwgKmxvd2VyT3BlbiwgKnVw
cGVyT3Blbik7CiB9CiAKIGNsYXNzIE9wZW5DdXJzb3JDYWxsYmFjayBmaW5hbCA6IHB1YmxpYyBF
dmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFj
az4gY3JlYXRlKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VT
aXplKQorICAgIHN0YXRpYyBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50
LCB1bnNpZ25lZCBwYWdlU2l6ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE9wZW5DdXJzb3JDYWxsYmFjayhpbmplY3RlZFNjcmlwdCwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJh
Y2spLCBza2lwQ291bnQsIHBhZ2VTaXplKSk7CiAgICAgfQpAQCAtNDA1LDEzICszODksMjMgQEAg
cHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IGNvbnRleHQuZXhlY1N0YXRlKCk7Ci0gICAgICAgIGF1dG8ga2V5ID0gIHRvSlMoKmxleGljYWxH
bG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtleSgpKTsKLSAgICAg
ICAgYXV0byBwcmltYXJ5S2V5ID0gdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxH
bG9iYWxPYmplY3QsIGN1cnNvci0+cHJpbWFyeUtleSgpKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9
IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNv
ci0+dmFsdWUoKSk7Ci0gICAgICAgIGF1dG8gZGF0YUVudHJ5ID0gRGF0YUVudHJ5OjpjcmVhdGUo
KQotICAgICAgICAgICAgLnNldEtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoa2V5LCBT
dHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2Ny
aXB0LndyYXBPYmplY3QocHJpbWFyeUtleSwgU3RyaW5nKCksIHRydWUpKQotICAgICAgICAgICAg
LnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1ZSwgU3RyaW5nKCksIHRy
dWUpKQorCisgICAgICAgIGF1dG8ga2V5ID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHRv
SlMoKmxleGljYWxHbG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtl
eSgpKSwgU3RyaW5nKCksIHRydWUpOworICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSBtX2luamVjdGVkU2NyaXB0LndyYXBP
YmplY3QodG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxPYmplY3QsIGN1
cnNvci0+cHJpbWFyeUtleSgpKSwgU3RyaW5nKCksIHRydWUpOworICAgICAgICBpZiAoIXByaW1h
cnlLZXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPnZhbHVlKCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBkYXRh
RW50cnkgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAuc2V0S2V5KGtleS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFByaW1h
cnlLZXkocHJpbWFyeUtleS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFZhbHVl
KHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAg
ICBtX3Jlc3VsdC0+YWRkSXRlbShXVEZNb3ZlKGRhdGFFbnRyeSkpOwogICAgIH0KQEAgLTQyNCwy
NSArNDE4LDI1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3BlbkN1cnNvckNh
bGxiYWNrKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxs
YmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXpl
KQorICAgIE9wZW5DdXJzb3JDYWxsYmFjayhJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwg
UmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFj
az4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQog
ICAgICAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5
cGUpCiAgICAgICAgICwgbV9pbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKICAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCi0gICAgICAgICwg
bV9yZXN1bHQoSlNPTjo6QXJyYXlPZjxEYXRhRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgLCBt
X3Jlc3VsdChKU09OOjpBcnJheU9mPFByb3RvY29sOjpJbmRleGVkREI6OkRhdGFFbnRyeT46OmNy
ZWF0ZSgpKQogICAgICAgICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAgICAgICAgLCBtX3Bh
Z2VTaXplKHBhZ2VTaXplKQogICAgIHsKICAgICB9CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmpl
Y3RlZFNjcmlwdDsKLSAgICBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJh
Y2s7Ci0gICAgUmVmPEpTT046OkFycmF5T2Y8RGF0YUVudHJ5Pj4gbV9yZXN1bHQ7CisgICAgUmVm
PEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkluZGV4
ZWREQjo6RGF0YUVudHJ5Pj4gbV9yZXN1bHQ7CiAgICAgaW50IG1fc2tpcENvdW50OwogICAgIHVu
c2lnbmVkIG1fcGFnZVNpemU7CiB9OwogCiBjbGFzcyBEYXRhTG9hZGVyIGZpbmFsIDogcHVibGlj
IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YUxv
YWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGlu
amVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBD
b3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ss
IGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+
JiYgaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUxvYWRlcihjb250ZXh0LCBXVEZNb3Zl
KHJlcXVlc3RDYWxsYmFjayksIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4
TmFtZSwgV1RGTW92ZShpZGJLZXlSYW5nZSksIHNraXBDb3VudCwgcGFnZVNpemUpKTsKICAgICB9
CkBAIC00OTgsOCArNDkyLDggQEAgcHVibGljOgogICAgICAgICBpZGJSZXF1ZXN0LT5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIFdURk1vdmUob3BlbkN1cnNvckNh
bGxiYWNrKSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENh
bGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KLSAg
ICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5q
ZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFu
Z2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIEJhY2tlbmREaXNwYXRj
aGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
cmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgRGF0YUxvYWRlcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29u
c3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0
b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRi
S2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV4
ZWN1dGFibGVXaXRoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgLCBt
X3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9p
bmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKQEAgLTUwOCw3ICs1MDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9pZGJLZXlSYW5nZShXVEZNb3ZlKGlkYktleVJhbmdlKSkKICAgICAgICAg
LCBtX3NraXBDb3VudChza2lwQ291bnQpCiAgICAgICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkg
eyB9Ci0gICAgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAg
IFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJh
Y2s+IG1fcmVxdWVzdENhbGxiYWNrOwogICAgIEluamVjdGVkU2NyaXB0IG1faW5qZWN0ZWRTY3Jp
cHQ7CiAgICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOwogICAgIFN0cmluZyBtX2luZGV4TmFt
ZTsKQEAgLTUzNSwxOSArNTI5LDIwIEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQg
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZSgpCiB7CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlzYWJsZShFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6ZGlzYWJsZSgpCiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIEVycm9y
U3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZyb21GcmFtZShGcmFtZSogZnJhbWUpCitzdGF0
aWMgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZyb21GcmFtZShG
cmFtZSogZnJhbWUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUgPyBmcmFtZS0+
ZG9jdW1lbnQoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTU1Niw3ICs1NTEs
NyBAQCBzdGF0aWMgRXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZy
YW1lKiBmcmFtZSkKICAgICByZXR1cm4gZG9jdW1lbnQ7CiB9CiAKLXN0YXRpYyBFcnJvclN0cmlu
Z09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVu
dCkKK3N0YXRpYyBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9y
eUZyb21Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRE9NV2luZG93KiBkb21X
aW5kb3cgPSBkb2N1bWVudC0+ZG9tV2luZG93KCk7CiAgICAgaWYgKCFkb21XaW5kb3cpCkBAIC01
NzEsMTMgKzU2NiwxMyBAQCBzdGF0aWMgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFj
dG9yeUZyb21Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAKIHN0YXRpYyBib29sIGdldERv
Y3VtZW50QW5kSURCRmFjdG9yeUZyb21GcmFtZU9yU2VuZEZhaWx1cmUoRnJhbWUqIGZyYW1lLCBE
b2N1bWVudComIG91dF9kb2N1bWVudCwgSURCRmFjdG9yeSomIG91dF9pZGJGYWN0b3J5LCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiBjYWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmlu
Z09yPERvY3VtZW50Kj4gZG9jdW1lbnQgPSBkb2N1bWVudEZyb21GcmFtZShmcmFtZSk7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRvY3VtZW50RnJv
bUZyYW1lKGZyYW1lKTsKICAgICBpZiAoIWRvY3VtZW50Lmhhc192YWx1ZSgpKSB7CiAgICAgICAg
IGNhbGxiYWNrLnNlbmRGYWlsdXJlKGRvY3VtZW50LmVycm9yKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gaWRiRmFjdG9y
eSA9IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+IGlkYkZhY3RvcnkgPSBJREJGYWN0b3J5RnJv
bURvY3VtZW50KGRvY3VtZW50LnZhbHVlKCkpOwogICAgIGlmICghaWRiRmFjdG9yeS5oYXNfdmFs
dWUoKSkgewogICAgICAgICBjYWxsYmFjay5zZW5kRmFpbHVyZShpZGJGYWN0b3J5LmVycm9yKCkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjAsNyArNjE1LDcgQEAgdm9pZCBJbnNwZWN0
b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlP
cmlnaW4sIGNvbnMKICAgICBkYXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgJmRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZU5hbWUpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUs
IGNvbnN0IEpTT046Ok9iamVjdCoga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoY29u
c3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50
IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGtleVJhbmdl
LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBhdXRvKiBmcmFt
ZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKG1faW5z
cGVjdGVkUGFnZSwgc2VjdXJpdHlPcmlnaW4pOwogICAgIERvY3VtZW50KiBkb2N1bWVudDsKQEAg
LTYyOSw3ICs2MjQsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0
YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdAogICAgICAgICByZXR1cm47
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwotICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBrZXlSYW5nZSA/IGlkYktleVJhbmdl
RnJvbUtleVJhbmdlKGtleVJhbmdlKSA6IG51bGxwdHI7CisgICAgUmVmUHRyPElEQktleVJhbmdl
PiBpZGJLZXlSYW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoKmtleVJh
bmdlKSA6IG51bGxwdHI7CiAgICAgaWYgKGtleVJhbmdlICYmICFpZGJLZXlSYW5nZSkgewogICAg
ICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBwYXJzZSBrZXkgcmFuZ2UuIl9z
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjQ0LDcgKzYzOSw3IEBAIG5hbWVzcGFjZSB7CiBjbGFz
cyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIgZmluYWwgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJl
ZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMg
UmVmPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxJbmRleGVkREJCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gcmVxdWVzdENhbGxi
YWNrKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9y
ZUxpc3RlbmVyKFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTY2OCwyMyAr
NjYzLDIzIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNz
KCk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPENs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmpl
Y3RTdG9yZUxpc3RlbmVyKFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXZl
bnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAg
IH0KIAotICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNr
OworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0
U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiBjbGFzcyBDbGVhck9iamVj
dFN0b3JlIGZpbmFsIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENs
ZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyT2JqZWN0U3RvcmUoY29u
dGV4dCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9
CiAKLSAgICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxi
YWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8
SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJh
Y2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2Uo
Y29udGV4dCkKICAgICAgICAgLCBtX29iamVjdFN0b3JlTmFtZShvYmplY3RTdG9yZU5hbWUpCiAg
ICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQpAQCAt
NzIzLDEwICs3MTgsMTAgQEAgcHVibGljOgogICAgICAgICBpZGJUcmFuc2FjdGlvbi0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgQ2xlYXJPYmplY3RTdG9yZUxp
c3RlbmVyOjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSwgZmFsc2UpOwogICAg
IH0KIAotICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVl
c3RDYWxsYmFjay5nZXQoKTsgfQogcHJpdmF0ZToKICAgICBjb25zdCBTdHJpbmcgbV9vYmplY3RT
dG9yZU5hbWU7Ci0gICAgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2Fs
bGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCmluZGV4IGRiMjk3YmQ5Y2RhOGRhNmMwNDdh
YjgyZmYzNTBhMmY0ZjU3NDhmZTkuLmU1NDRmOWM2ZjI1MzljNDExNzJkNWM2OTJlNGQyODBlNTQz
MDIzOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKQEAgLTQ1LDI2ICs0NSwyNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
CiBjbGFzcyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQp
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlcXVlc3REYXRhYmFzZU5hbWVzKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxS
ZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVl
c3REYXRhYmFzZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgdm9pZCBy
ZXF1ZXN0RGF0YWJhc2VOYW1lcyhjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVx
dWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUs
IFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YShj
b25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwg
Y29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBp
bnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFu
Z2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5h
bWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNh
bGxiYWNrPiYmKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFu
YWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4
IGJiOTk0YmY5OWZjMjUxNjY5ZjhkNzNhNGRmMGI1NWVjMGY1NmM2MTMuLjUyZDNmZDcwZjZhMjk5
ZDlhZjA0NjkyNGY0YmFlM2RkNWQ2MGIxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCkBAIC02
MSw4ICs2MSw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQgSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUo
aWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjpyZXNldCgpCkBAIC03NCwxNiArNzMsMjAgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6cmVzZXQoKQogICAgIG1fc3VwcHJlc3NMYXllckNoYW5nZUV2ZW50cyA9IGZhbHNlOwog
fQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmVu
YWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXllclRyZWVB
Z2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTGF5ZXJUcmVlQWdlbnQobnVsbHB0cik7CiAKICAgICBy
ZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6bGF5ZXJUcmVlRGlkQ2hhbmdlKCkKQEAgLTEwNiw1MSArMTA5LDQ5IEBAIHZvaWQgSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVu
dCYgcHNldWRvRWxlbWVuCiAgICAgdW5iaW5kUHNldWRvRWxlbWVudCgmcHNldWRvRWxlbWVudCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
Pj4+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7Ci0gICAgbGF5ZXJzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPjo6Y3JlYXRlKCk7Ci0KICAgICBhdXRvKiBub2Rl
ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5ub2RlRm9ySWQo
bm9kZUlkKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBub2RlIGZvciBnaXZlbiBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgbm9kZSBm
b3IgZ2l2ZW4gbm9kZUlkIl9zKTsKIAogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgcmVuZGVyZXIgb2Ygbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyByZW5kZXJlciBvZiBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAg
aWYgKCFpczxSZW5kZXJFbGVtZW50PigqcmVuZGVyZXIpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXJlciBvZiBlbGVtZW50IGZv
ciBnaXZlbiBub2RlSWQiX3MpOwogCi0gICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RI
aWVyYXJjaHkoZXJyb3JTdHJpbmcsIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJlciks
IGxheWVycyk7CisgICAgYXV0byBsYXllcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXll
clRyZWU6OkxheWVyPjo6Y3JlYXRlKCk7CisKKyAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9i
amVjdEhpZXJhcmNoeShkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqcmVuZGVyZXIpLCBsYXllcnMp
OwogCiAgICAgbV9zdXBwcmVzc0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CisKKyAgICByZXR1
cm4gV1RGTW92ZShsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK3ZvaWQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJlci5oYXNMYXllcigpKSB7Ci0g
ICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcs
IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXll
cnMpOworICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGRvd25j
YXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNp
bmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIGNoaWxkLCBsYXllcnMpOworICAg
ICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShjaGlsZCwgbGF5ZXJz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVy
KiByZW5kZXJMYXllciwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCit2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KFJlbmRlckxheWVyKiByZW5k
ZXJMYXllciwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mIGxheWVy
cykKIHsKICAgICBpZiAocmVuZGVyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKQotICAgICAgICBsYXll
cnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JMYXllcihlcnJvclN0cmluZywgcmVuZGVyTGF5ZXIp
KTsKKyAgICAgICAgbGF5ZXJzLmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JMYXllcihyZW5kZXJMYXll
cikpOwogCiAgICAgZm9yIChyZW5kZXJMYXllciA9IHJlbmRlckxheWVyLT5maXJzdENoaWxkKCk7
IHJlbmRlckxheWVyOyByZW5kZXJMYXllciA9IHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQot
ICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5n
LCByZW5kZXJMYXllciwgbGF5ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJM
YXllckhpZXJhcmNoeShyZW5kZXJMYXllciwgbGF5ZXJzKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWls
ZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJl
bmRlckxheWVyKQorUmVmPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIp
CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIo
KTsKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2lu
ZygpOwpAQCAtMTcwLDkgKzE3MSw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgICAg
IG5vZGUgPSByZW5kZXJlci0+cGFyZW50KCktPmVsZW1lbnQoKTsKIAogICAgIC8vIEJhc2ljIHNl
dCBvZiBwcm9wZXJ0aWVzLgotICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQorICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldExheWVySWQo
YmluZChyZW5kZXJMYXllcikpCi0gICAgICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKGVycm9yU3Ry
aW5nLCBub2RlKSkKKyAgICAgICAgLnNldE5vZGVJZChpZEZvck5vZGUobm9kZSkpCiAgICAgICAg
IC5zZXRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5k
aW5nQm94UmVjdCgpKSkKICAgICAgICAgLnNldE1lbW9yeShiYWNraW5nLT5iYWNraW5nU3RvcmVN
ZW1vcnlFc3RpbWF0ZSgpKQogICAgICAgICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVj
dEZvckludFJlY3QoZW5jbG9zaW5nSW50UmVjdChiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkp
KSkKQEAgLTIwOSwyNSArMjEwLDI1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgcmV0
dXJuIGxheWVyT2JqZWN0OwogfQogCi1pbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9y
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCitQcm90b2NvbDo6RE9N
OjpOb2RlSWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShOb2RlKiBub2RlKQog
ewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50
KCk7CiAgICAgCi0gICAgaW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsK
KyAgICBhdXRvIG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsKICAgICBpZiAo
IW5vZGVJZCkgewogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5
OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRlZCBhdCBh
bnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxz
byBiZWVuIGluc3RydW1lbnRlZAotICAgICAgICBub2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm5vZGUtPmRvY3Vt
ZW50KCkpLCBub2RlKTsKKyAgICAgICAgbm9kZUlkID0gZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9u
dGVuZChub2RlKTsKICAgICB9CiAKICAgICByZXR1cm4gbm9kZUlkOwogfQogCi1SZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCitSZWY8UHJvdG9j
b2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRYKHJlY3Qu
eCgpKQogICAgICAgICAuc2V0WShyZWN0LnkoKSkKICAgICAgICAgLnNldFdpZHRoKHJlY3Qud2lk
dGgoKSkKQEAgLTIzNSwxNyArMjM2LDE1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjCiAgICAg
ICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNv
bnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21w
b3NpdGluZ1JlYXNvbnM+JiBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPj4g
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKGNvbnN0
IFByb3RvY29sOjpMYXllclRyZWU6OkxheWVySWQmIGxheWVySWQpCiB7CiAgICAgY29uc3QgUmVu
ZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbV9pZFRvTGF5ZXIuZ2V0KGxheWVySWQpOwogCi0gICAg
aWYgKCFyZW5kZXJMYXllcikgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlbmRl
ciBsYXllciBmb3IgZ2l2ZW4gbGF5ZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXJlbmRlckxheWVyKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgcmVuZGVyIGxheWVyIGZvciBnaXZlbiBsYXllcklkIl9zKTsKIAogICAgIE9wdGlvblNldDxD
b21wb3NpdGluZ1JlYXNvbj4gcmVhc29ucyA9IHJlbmRlckxheWVyLT5jb21wb3NpdG9yKCkucmVh
c29uc0ZvckNvbXBvc2l0aW5nKCpyZW5kZXJMYXllcik7Ci0gICAgYXV0byBjb21wb3NpdGluZ1Jl
YXNvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29u
czo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gY29tcG9zaXRpbmdSZWFzb25zID0gUHJv
dG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7
CiAKICAgICBpZiAocmVhc29ucy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNvbjo6VHJhbnNmb3Jt
M0QpKQogICAgICAgICBjb21wb3NpdGluZ1JlYXNvbnMtPnNldFRyYW5zZm9ybTNEKHRydWUpOwpA
QCAtMzI0LDcgKzMyMyw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNG
b3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgaWYgKHJlYXNv
bnMuY29udGFpbnMoQ29tcG9zaXRpbmdSZWFzb246OlJvb3QpKQogICAgICAgICBjb21wb3NpdGlu
Z1JlYXNvbnMtPnNldFJvb3QodHJ1ZSk7CiAKLSAgICBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQg
PSBXVEZNb3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CisgICAgcmV0dXJuIFdURk1vdmUoY29tcG9z
aXRpbmdSZWFzb25zKTsKIH0KIAogU3RyaW5nIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpiaW5k
KGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAppbmRleCA4NzIzNTgw
YzY1MzAxMGUxZWVhNjBkNDBlOWNkOWQ3MzIzNThkOWZiLi41ZjExNTMxY2M2NDQ0MjlmNDhkMWQ2
ZDgxNTUxZGQ4NGI5Zjk0Y2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC00MiwyNCArNDIsMjIg
QEAgY2xhc3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5k
ZXJMYXllcjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JMYXllclRyZWVBZ2VudCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoV2Vi
QWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckxheWVyVHJlZUFnZW50KCkgb3ZlcnJpZGU7
CisgICAgfkluc3BlY3RvckxheWVyVHJlZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2Vu
dEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZy
b250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwot
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
ciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpE
aXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIExheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsYXllcnNGb3JOb2RlKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWFzb25z
Rm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25z
PiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4+IGxh
eWVyc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Okxh
eWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPj4gcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGxheWVyVHJlZURpZENoYW5nZSgp
OwpAQCAtNzIsMTMgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGJpbmQoY29uc3QgUmVu
ZGVyTGF5ZXIqKTsKICAgICB2b2lkIHVuYmluZChjb25zdCBSZW5kZXJMYXllciopOwogCi0gICAg
dm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYs
IFJlbmRlckVsZW1lbnQmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpMYXllclRyZWU6OkxheWVyPj4mKTsKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
TGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciosIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOworICAgIHZv
aWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYs
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsK
KyAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoUmVuZGVyTGF5
ZXIqLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
Jik7CiAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVp
bGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYsIFJlbmRlckxheWVyKik7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIo
UmVuZGVyTGF5ZXIqKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJ
bnRSZWN0PiBidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYpOwogCi0gICAgaW50
IGlkRm9yTm9kZShFcnJvclN0cmluZyYsIE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCBpZEZvck5vZGUoTm9kZSopOwogCiAgICAgU3RyaW5nIGJpbmRQc2V1ZG9F
bGVtZW50KFBzZXVkb0VsZW1lbnQqKTsKICAgICB2b2lkIHVuYmluZFBzZXVkb0VsZW1lbnQoUHNl
dWRvRWxlbWVudCopOwpAQCAtODYsMTEgKzg0LDExIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3Rvcjo6TGF5ZXJUcmVlRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIAotICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5
ZXIqLCBTdHJpbmc+IG1fZG9jdW1lbnRMYXllclRvSWRNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IGNvbnN0IFJlbmRlckxheWVyKj4gbV9pZFRvTGF5ZXI7CisgICAgSGFzaE1hcDxjb25zdCBSZW5k
ZXJMYXllciosIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZD4gbV9kb2N1
bWVudExheWVyVG9JZE1hcDsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6TGF5ZXJJZCwgY29uc3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9MYXllcjsKIAotICAgIEhh
c2hNYXA8UHNldWRvRWxlbWVudCosIFN0cmluZz4gbV9wc2V1ZG9FbGVtZW50VG9JZE1hcDsKLSAg
ICBIYXNoTWFwPFN0cmluZywgUHNldWRvRWxlbWVudCo+IG1faWRUb1BzZXVkb0VsZW1lbnQ7Cisg
ICAgSGFzaE1hcDxQc2V1ZG9FbGVtZW50KiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpQc2V1ZG9FbGVtZW50SWQ+IG1fcHNldWRvRWxlbWVudFRvSWRNYXA7CisgICAgSGFzaE1hcDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZCwgUHNldWRvRWxl
bWVudCo+IG1faWRUb1BzZXVkb0VsZW1lbnQ7CiAKICAgICBib29sIG1fc3VwcHJlc3NMYXllckNo
YW5nZUV2ZW50cyB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCBkMGU4YWE2ODgz
MzY1OWU2NGFmZTU1MzQ3Y2I1NmY3NzNlYjdkN2E1Li4xNGNlNjcwOTZhMjQyNDQ5NGM1OTI0NjYw
ODZhMWQxZTI4Nzc0MTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtNTQsNDAgKzU0LDM5IEBAIHZv
aWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9u
dGVuZFJvdXRlciosIEJhY2tlbmRECiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50TWVtb3J5QWdlbnQobnVsbHB0
cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRNZW1vcnlBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWVtb3J5
IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBlbmFi
bGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTWVtb3J5QWdl
bnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRNZW1vcnlBZ2VudCgpICE9IHRoaXMpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZE1lbW9yeUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNZW1vcnkgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRNZW1vcnlBZ2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tp
bmcgPSBmYWxzZTsKIAogICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRo
aXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6
c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZygpCiB7CiAgICAgaWYgKG1fdHJh
Y2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291
cmNlVXNhZ2VUaHJlYWQ6OmFkZE9ic2VydmVyKHRoaXMsIE1lbW9yeSwgW3RoaXNdIChjb25zdCBS
ZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkgewogICAgICAgICBjb2xsZWN0U2FtcGxlKGRhdGEpOwpA
QCAtOTYsMjQgKzk1LDI4IEBAIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0YXJ0VHJhY2tp
bmcoRXJyb3JTdHJpbmcmKQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnRyYWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0
Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0b3BUcmFj
a2luZygpCiB7CiAgICAgaWYgKCFtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVPYnNlcnZlcih0
aGlzKTsKIAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT50cmFja2luZ0NvbXBsZXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlkSGFuZGxlTWVtb3J5UHJlc3N1cmUoQ3JpdGljYWwgY3Jp
dGljYWwpCiB7CiAgICAgTWVtb3J5RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eSBzZXZlcml0
eSA9IGNyaXRpY2FsID09IENyaXRpY2FsOjpZZXMgPyBNZW1vcnlGcm9udGVuZERpc3BhdGNoZXI6
OlNldmVyaXR5OjpDcml0aWNhbCA6IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6
Ok5vbkNyaXRpY2FsOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZW1vcnlQcmVzc3VyZSht
X2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
LCBzZXZlcml0eSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1f
ZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCks
IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzZXZlcml0eSkpOwogfQog
CiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojpjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNl
VXNhZ2VEYXRhJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCmluZGV4IGM0NDc3MmRiZWFiZjkxMTRjZmE0NDdm
ZTk2ZTg0ZTNkMmI1MjYyOGUuLjFhNzY0MDhlZjkzYzk2MWI1YTAwYWFjMWY5MjVhODkzNjQzMjk0
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmgKQEAgLTM1LDI0ICszNSwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JNZW1v
cnlBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0
b3I6Ok1lbW9yeUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW5zcGVjdG9yTWVtb3J5QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3Rvck1lbW9yeUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsK
LSAgICB+SW5zcGVjdG9yTWVtb3J5QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTWVt
b3J5QWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAg
ICAgLy8gTWVtb3J5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAog
ICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkSGFuZGxlTWVtb3J5
UHJlc3N1cmUoQ3JpdGljYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCmluZGV4IDA5ZjI3N2YxOTVkMzU2
Y2Y2ZDMxNGZiZjcyY2ZjYmVhZDY2N2UxNWMuLjA5ZTZjNmQ0Yzk2ZDY0NDE4MjNkZDA1MTBiZjlk
YzkyNjg0OTcwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKQEAgLTE3Miw5ICsxNzIsOSBAQCBwcml2
YXRlOgogICAgIGludCBtX3N0YXR1c0NvZGU7CiB9OwogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShjb25zdCBX
ZWJTb2NrZXRGcmFtZSYgZnJhbWUpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZy
YW1lPiBidWlsZFdlYlNvY2tldE1lc3NhZ2UoY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQog
ewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFt
ZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1l
OjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNl
dE1hc2soZnJhbWUubWFza2VkKQogICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2Rl
ID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQs
IGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlKGZyYW1lLnBheWxvYWQsIGZyYW1l
LnBheWxvYWRMZW5ndGgpKQpAQCAtMjAxLDIwICsyMDEsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGUKIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmlu
ZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi1z
dGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlYWRlcnMpCitzdGF0aWMgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJz
PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKIHsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIGhlYWRlcnNWYWx1ZSA9IFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJz
OjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKKyAgICBhdXRvIGhlYWRlcnNPYmplY3QgPSBoZWFkZXJz
VmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJz
KQogICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaGVhZGVyLmtleSwgaGVhZGVyLnZh
bHVlKTsKLSAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKKworICAgIHJldHVybiBoZWFkZXJzVmFs
dWU7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWlu
Zz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3
b3JrTG9hZE1ldHJpY3MqIHRpbWluZywgUmVzb3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQor
UmVmPFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqIHRpbWlu
ZywgUmVzb3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQogewogICAgIGF1dG8mIGxvYWRUaW1p
bmcgPSByZXNvdXJjZUxvYWRlci5sb2FkVGltaW5nKCk7CiAKQEAgLTIyNyw3ICsyMjgsNyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYgogICAgICAgICB0aW1pbmcgPSAmZW1wdHkudmFsdWUoKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3Vy
Y2VUaW1pbmc6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJj
ZVRpbWluZzo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXJ0VGltZShlbGFwc2VkVGltZVNpbmNl
KGxvYWRUaW1pbmcuc3RhcnRUaW1lKCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RTdGFydChlbGFw
c2VkVGltZVNpbmNlKGxvYWRUaW1pbmcucmVkaXJlY3RTdGFydCgpKSkKICAgICAgICAgLnNldFJl
ZGlyZWN0RW5kKGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5yZWRpcmVjdEVuZCgpKSkKQEAg
LTI0MywyNiArMjQ0LDI2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNv
dXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAgICAgIC5yZWxl
YXNlKCk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNz
OjpQcmlvcml0eSB0b1Byb3RvY29sKE5ldHdvcmtMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCitzdGF0
aWMgUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29y
a0xvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CiAgICAg
Y2FzZSBOZXR3b3JrTG9hZFByaW9yaXR5OjpMb3c6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TG93OworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpMb3c7CiAgICAgY2FzZSBO
ZXR3b3JrTG9hZFByaW9yaXR5OjpNZWRpdW06Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVtOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CiAgICAgY2Fz
ZSBOZXR3b3JrTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CiAgICAgY2FzZSBO
ZXR3b3JrTG9hZFByaW9yaXR5OjpVbmtub3duOgogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6Ok1lZGl1bTsKKyAgICByZXR1cm4gUHJvdG9jb2w6
Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yTWV0cmljcyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0
cmljcykKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBuZXR3
b3JrTG9hZE1ldHJpY3MpCiB7Ci0gICAgYXV0byBtZXRyaWNzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6TWV0cmljczo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gbWV0cmlj
cyA9IFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAg
ICBpZiAoIW5ldHdvcmtMb2FkTWV0cmljcy5wcm90b2NvbC5pc051bGwoKSkKICAgICAgICAgbWV0
cmljcy0+c2V0UHJvdG9jb2wobmV0d29ya0xvYWRNZXRyaWNzLnByb3RvY29sKTsKQEAgLTI4Niw3
ICsyODcsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvcgogICAgIGlmIChuZXR3b3JrTG9hZE1l
dHJpY3MucmVzcG9uc2VCb2R5RGVjb2RlZFNpemUgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKQogICAgICAgICBtZXRyaWNzLT5zZXRSZXNwb25zZUJvZHlEZWNvZGVkU2l6
ZShuZXR3b3JrTG9hZE1ldHJpY3MucmVzcG9uc2VCb2R5RGVjb2RlZFNpemUpOwogCi0gICAgYXV0
byBjb25uZWN0aW9uUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpDb25u
ZWN0aW9uOjpjcmVhdGUoKQorICAgIGF1dG8gY29ubmVjdGlvblBheWxvYWQgPSBQcm90b2NvbDo6
U2VjdXJpdHk6OkNvbm5lY3Rpb246OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAg
ICBpZiAoIW5ldHdvcmtMb2FkTWV0cmljcy50bHNQcm90b2NvbC5pc0VtcHR5KCkpCkBAIC0zMDAs
OSArMzAxLDkgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3IKICAgICByZXR1cm4gbWV0cmljczsK
IH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBi
dWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCitzdGF0aWMgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9iamVjdEZv
clJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAg
YXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6
UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXF1ZXN0LnVybCgpLnN0cmluZygp
KQogICAgICAgICAuc2V0TWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQogICAgICAgICAuc2V0
SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkp
KQpAQCAtMzE0LDQ0ICszMTUsNDIgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdCgKICAgICByZXR1
cm4gcmVxdWVzdE9iamVjdDsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpTb3VyY2UgcmVzcG9uc2VTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291
cmNlIHNvdXJjZSkKK3N0YXRpYyBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSBy
ZXNwb25zZVNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQogewogICAgIHN3
aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRPTUNh
Y2hlOgogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpBcHBsaWNhdGlvbkNhY2hl
OgogICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEFwcGxpY2F0aW9uQ2FjaGUgaW4g
aW5zcGVjdG9yLgogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpVbmtub3duOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNv
dXJjZTo6VW5rbm93bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6U291cmNlOjpVbmtub3duOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpO
ZXR3b3JrOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U6OlNvdXJjZTo6TmV0d29yazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3Jr
OjpSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpNZW1vcnlDYWNoZToKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6
TWVtb3J5Q2FjaGVBZnRlclZhbGlkYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsK
ICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlOgogICAgIGNhc2Ug
UmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb246Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNl
OjpEaXNrQ2FjaGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6
OlNvdXJjZTo6RGlza0NhY2hlOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpT
ZXJ2aWNlV29ya2VyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyOwogICAgIGNhc2Ug
UmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Okluc3Bl
Y3Rvck92ZXJyaWRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
OjpTb3VyY2U6Okluc3BlY3Rvck92ZXJyaWRlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6U291cmNlOjpVbmtub3duOworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9u
c2U6OlNvdXJjZTo6VW5rbm93bjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUmVz
b3VyY2VSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VM
b2FkZXIqIHJlc291cmNlTG9hZGVyKQorUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlTG9hZGVyKiByZXNvdXJj
ZUxvYWRlcikKIHsKICAgICBpZiAocmVzcG9uc2UuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4gaGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwotCi0gICAgYXV0byByZXNwb25z
ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpjcmVhdGUo
KQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwocmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpCiAgICAg
ICAgIC5zZXRTdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0
YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkKLSAgICAgICAgLnNldEhlYWRlcnMo
V1RGTW92ZShoZWFkZXJzKSkKKyAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFk
ZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5zZXRNaW1lVHlwZShy
ZXNwb25zZS5taW1lVHlwZSgpKQogICAgICAgICAuc2V0U291cmNlKHJlc3BvbnNlU291cmNlKHJl
c3BvbnNlLnNvdXJjZSgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTM2MCwxMSArMzU5LDEx
IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjCiAgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRU
aW1pbmcoYnVpbGRPYmplY3RGb3JUaW1pbmcocmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2Fk
TWV0cmljc09yTnVsbCgpLCAqcmVzb3VyY2VMb2FkZXIpKTsKIAogICAgIGlmIChhdXRvJiBjZXJ0
aWZpY2F0ZUluZm8gPSByZXNwb25zZS5jZXJ0aWZpY2F0ZUluZm8oKSkgewotICAgICAgICBhdXRv
IHNlY3VyaXR5UGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpTZWN1cml0
eTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBzZWN1cml0eVBheWxvYWQgPSBQcm90b2NvbDo6U2Vj
dXJpdHk6OlNlY3VyaXR5OjpjcmVhdGUoKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAg
ICAgICBpZiAoYXV0byBjZXJ0aWZpY2F0ZVN1bW1hcnlJbmZvID0gY2VydGlmaWNhdGVJbmZvLnZh
bHVlKCkuc3VtbWFyeSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlUGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpDZXJ0aWZpY2F0ZTo6Y3JlYXRlKCkKKyAg
ICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVQYXlsb2FkID0gUHJvdG9jb2w6OlNlY3VyaXR5OjpD
ZXJ0aWZpY2F0ZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAg
ICAgICAgICBjZXJ0aWZpY2F0ZVBheWxvYWQtPnNldFN1YmplY3QoY2VydGlmaWNhdGVTdW1tYXJ5
SW5mby52YWx1ZSgpLnN1YmplY3QpOwpAQCAtMzk2LDE2ICszOTUsMTYgQEAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmJ1aWxkT2JqZWMKICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Q7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRS
ZXNvdXJjZSkKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UpCiB7Ci0gICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlOjpjcmVhdGUoKQorICAgIGF1dG8g
cmVzb3VyY2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAg
ICAgICAuc2V0VHlwZShJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpTT04o
KmNhY2hlZFJlc291cmNlKSkKICAgICAgICAgLnNldEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5l
bmNvZGVkU2l6ZSgpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgYXV0byByZXNvdXJjZVJl
c3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNlLT5y
ZXNwb25zZSgpLCBjYWNoZWRSZXNvdXJjZS0+bG9hZGVyKCkpOwotICAgIHJlc291cmNlT2JqZWN0
LT5zZXRSZXNwb25zZShXVEZNb3ZlKHJlc291cmNlUmVzcG9uc2UpKTsKKyAgICBpZiAoYXV0byBy
ZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJl
c291cmNlLT5yZXNwb25zZSgpLCBjYWNoZWRSZXNvdXJjZS0+bG9hZGVyKCkpKQorICAgICAgICBy
ZXNvdXJjZU9iamVjdC0+c2V0UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIAogICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gSW5zcGVjdG9yUGFnZUFnZW50
Ojpzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFzb3Vy
Y2VNYXBwaW5nVVJMLmlzRW1wdHkoKSkKQEAgLTQyOSw5ICs0MjgsOSBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMbwogICAgIGRvdWJsZSBzZW5kVGltZXN0YW1wID0gdGltZXN0YW1wKCk7CiAgICAg
V2FsbFRpbWUgd2FsbHRpbWUgPSBXYWxsVGltZTo6bm93KCk7CiAKLSAgICBTdHJpbmcgcmVxdWVz
dElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAgU3Ry
aW5nIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgbG9hZGVy
SWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CisgICAgYXV0byByZXF1ZXN0SWQgPSBJZGVu
dGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKKyAgICBhdXRvIGZyYW1lSWQg
PSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBhdXRvIGxvYWRlcklkID0gbG9hZGVySWRl
bnRpZmllcihsb2FkZXIpOwogICAgIFN0cmluZyB0YXJnZXRJZCA9IHJlcXVlc3QuaW5pdGlhdG9y
SWRlbnRpZmllcigpOwogCiAgICAgaWYgKHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhl
clJlc291cmNlKSB7CkBAIC00NjIsNyArNDYxLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExv
CiAgICAgYXV0byBpbml0aWF0b3JPYmplY3QgPSBidWlsZEluaXRpYXRvck9iamVjdChkb2N1bWVu
dCwgJnJlcXVlc3QpOwogCiAgICAgU3RyaW5nIHVybCA9IGxvYWRlciA/IGxvYWRlci0+dXJsKCku
c3RyaW5nKCkgOiByZXF1ZXN0LnVybCgpLnN0cmluZygpOwotICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5yZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB1cmws
IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5kVGltZXN0YW1wLCB3
YWxsdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgaW5pdGlhdG9yT2JqZWN0LCBi
dWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgbnVsbHB0ciks
IHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnByb3RvY29sUmVz
b3VyY2VUeXBlIDogbnVsbHB0ciwgdGFyZ2V0SWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZ0YXJn
ZXRJZCk7CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZT4gdHlwZVBh
eWxvYWQ7CisgICAgaWYgKHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNl
KQorICAgICAgICB0eXBlUGF5bG9hZCA9IHByb3RvY29sUmVzb3VyY2VUeXBlOworICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxv
YWRlcklkLCB1cmwsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5k
VGltZXN0YW1wLCB3YWxsdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgV1RGTW92
ZShpbml0aWF0b3JPYmplY3QpLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJl
Y3RSZXNwb25zZSwgbnVsbHB0ciksIFdURk1vdmUodHlwZVBheWxvYWQpLCB0YXJnZXRJZCk7CiB9
CiAKIHN0YXRpYyBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVG
b3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCkBAIC01MTQsNyArNTE2
LDggQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW4KICAgICAgICAgfSk7CiAgICAgfQogCi0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJjZVJl
c3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlYWxSZXNwb25zZSA/ICpy
ZWFsUmVzcG9uc2UgOiByZXNwb25zZSwgcmVzb3VyY2VMb2FkZXIpOworICAgIFJlZlB0cjxQcm90
b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UocmVhbFJlc3BvbnNlID8gKnJlYWxSZXNwb25zZSA6IHJlc3BvbnNl
LCByZXNvdXJjZUxvYWRlcik7CisgICAgQVNTRVJUKHJlc291cmNlUmVzcG9uc2UpOwogCiAgICAg
Ym9vbCBpc05vdE1vZGlmaWVkID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7CiAK
QEAgLTUyNyw3ICs1MzAsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbgogICAgIGlmIChjYWNo
ZWRSZXNvdXJjZSkgewogICAgICAgICAvLyBVc2UgbWltZSB0eXBlIGZyb20gY2FjaGVkIHJlc291
cmNlIGluIGNhc2UgdGhlIG9uZSBpbiByZXNwb25zZSBpcyBlbXB0eS4KICAgICAgICAgaWYgKHJl
c291cmNlUmVzcG9uc2UgJiYgcmVzcG9uc2UubWltZVR5cGUoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzcG9uc2U6Ok1pbWVUeXBlLCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1l
VHlwZSgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6Om1pbWVUeXBlS2V5LCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9u
c2UoKS5taW1lVHlwZSgpKTsKICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5hZGRDYWNoZWRSZXNv
dXJjZShyZXF1ZXN0SWQsIGNhY2hlZFJlc291cmNlKTsKICAgICB9CiAKQEAgLTU0OSwyMSArNTUy
LDIxIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVuCiAgICAgICAgICAgICAgICAgbV9yZXNvdXJj
ZXNEYXRhLT5tYXliZUFkZFJlc291cmNlRGF0YShyZXF1ZXN0SWQsIHByZXZpb3VzQnVmZmVyLT5k
YXRhKCksIHByZXZpb3VzQnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoIm1pbWVUeXBlIl9z
LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+bWltZVR5cGUoKSk7CisgICAgICAgICAgICByZXNvdXJj
ZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjptaW1lVHlw
ZUtleSwgcHJldmlvdXNSZXNvdXJjZURhdGEtPm1pbWVUeXBlKCkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKCJzdGF0dXMiX3MsIHByZXZp
b3VzUmVzb3VyY2VEYXRhLT5odHRwU3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIHJlc291cmNl
UmVzcG9uc2UtPnNldFN0cmluZygic3RhdHVzVGV4dCJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEt
Pmh0dHBTdGF0dXNUZXh0KCkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0SW50
ZWdlcihQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnN0YXR1c0tleSwgcHJldmlvdXNSZXNv
dXJjZURhdGEtPmh0dHBTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25z
ZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6c3RhdHVzVGV4dEtleSwg
cHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXNUZXh0KCkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoInNvdXJjZSJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKSk7
CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpzb3VyY2VLZXksIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKSk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmll
cihsb2FkZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVy
KTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkID0gZnJhbWVJZGVudGlm
aWVyKGxvYWRlcik7CisgICAgUHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkID0g
bG9hZGVySWRlbnRpZmllcihsb2FkZXIpOwogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNwb25z
ZVJlY2VpdmVkKHJlcXVlc3RJZCwgZnJhbWVJZCwgcmVzcG9uc2UsIHR5cGUsIHNob3VsZEZvcmNl
QnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpKTsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHRpbWVz
dGFtcCgpLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04odHlwZSksIHJlc291
cmNlUmVzcG9uc2UpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZVJlY2VpdmVk
KHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHRpbWVzdGFtcCgpLCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnJlc291cmNlVHlwZUpTT04odHlwZSksIHJlc291cmNlUmVzcG9uc2UucmVsZWFzZU5v
bk51bGwoKSk7CiAKICAgICAvLyBJZiB3ZSByZXZhbGlkYXRlZCB0aGUgcmVzb3VyY2UgYW5kIGdv
dCBOb3QgbW9kaWZpZWQsIHNlbmQgY29udGVudCBsZW5ndGggZm9sbG93aW5nIGRpZFJlY2VpdmVS
ZXNwb25zZQogICAgIC8vIGFzIHRoZXJlIHdpbGwgYmUgbm8gY2FsbHMgdG8gZGlkUmVjZWl2ZURh
dGEgZnJvbSB0aGUgbmV0d29yayBzdGFjay4KQEAgLTYyMSw5ICs2MjQsOSBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW50TAogICAgICAgICAgICAgcmVhbE1ldHJpY3MgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bmV0d29ya01ldHJpY3NGcm9tUmVzb3VyY2VMb2FkSWRl
bnRpZmllcihpZGVudGlmaWVyKS5pc29sYXRlZENvcHkoKTsKICAgICAgICAgfSk7CiAgICAgfQot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBtZXRyaWNz
ID0gYnVpbGRPYmplY3RGb3JNZXRyaWNzKHJlYWxNZXRyaWNzID8gKnJlYWxNZXRyaWNzIDogbmV0
d29ya0xvYWRNZXRyaWNzKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+
IG1ldHJpY3MgPSBidWlsZE9iamVjdEZvck1ldHJpY3MocmVhbE1ldHJpY3MgPyAqcmVhbE1ldHJp
Y3MgOiBuZXR3b3JrTG9hZE1ldHJpY3MpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxv
YWRpbmdGaW5pc2hlZChyZXF1ZXN0SWQsIGVsYXBzZWRGaW5pc2hUaW1lLCAhc291cmNlTWFwcGlu
Z1VSTC5pc0VtcHR5KCkgPyAmc291cmNlTWFwcGluZ1VSTCA6IG51bGxwdHIsIG1ldHJpY3MpOwor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2FkaW5nRmluaXNoZWQocmVxdWVzdElkLCBlbGFw
c2VkRmluaXNoVGltZSwgc291cmNlTWFwcGluZ1VSTCwgV1RGTW92ZShtZXRyaWNzKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQpAQCAtNjQyLDggKzY0NSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpk
aWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBib29sIGNhbmNlbGVkID0gZXJyb3IuaXNDYW5jZWxsYXRpb24o
KTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZhaWxlZChyZXF1ZXN0SWQsIHRp
bWVzdGFtcCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLCBjYW5jZWxlZCA/ICZjYW5j
ZWxlZCA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2FkaW5nRmFpbGVk
KHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCksIGVy
cm9yLmlzQ2FuY2VsbGF0aW9uKCkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSkKQEAgLTY1NCw4ICs2NTYsOCBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZQogCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gbG9hZGVyLT5mcmFt
ZSgpLT5wYWdlKCktPnByb2dyZXNzKCkuY3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgIFN0
cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVy
KTsKLSAgICBTdHJpbmcgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAg
U3RyaW5nIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7Cisg
ICAgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihs
b2FkZXIpOwogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNvdXJjZUNyZWF0ZWQocmVxdWVzdElk
LCBsb2FkZXJJZCwgcmVzb3VyY2UpOwogCkBAIC02NjUsNyArNjY3LDcgQEAgdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExv
YWRlciogbG9hZGUKICAgICAvLyBpbnN0ZWFkIG9mIHdoYXRldmVyIFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZSB0aGUgQ2FjaGVkUmVzb3VyY2VzJ3MgcmVzcG9uc2UgaGFzLgogICAgIC8vIFRoZSBm
cm9udGVuZCBhbHJlYWR5IGtub3dzIGZvciBjZXJ0YWluIHRoYXQgdGhpcyB3YXMgc2VydmVkIGZy
b20gdGhlIG1lbW9yeSBjYWNoZS4KIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIGxvYWRl
ci0+dXJsKCkuc3RyaW5nKCksIHRpbWVzdGFtcCgpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2Jq
ZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoJnJlc291cmNlKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVzdElkLCBmcmFtZUlkLCBsb2Fk
ZXJJZCwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1wKCksIFdURk1vdmUoaW5pdGlh
dG9yT2JqZWN0KSwgYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3VyY2UpKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEluaXRpYWxTY3JpcHRDb250ZW50KHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCkBAIC03
MjksMjYgKzczMSwyNiBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkU2NoZWR1bGVT
dHlsZVJlY2FsY3VsYXRpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgICAgICBtX3N0eWxlUmVj
YWxjdWxhdGlvbkluaXRpYXRvciA9IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KCZkb2N1bWVudCk7CiB9
CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkKK1JlZjxQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdGlhdG9y
T2JqZWN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0KiByZXNvdXJj
ZVJlcXVlc3QpCiB7CiAgICAgLy8gRklYTUU6IFdvcmtlciBzdXBwb3J0LgogICAgIGlmICghaXNN
YWluVGhyZWFkKCkpIHsKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpJbml0aWF0b3I+IGluaXRpYXRvck9iamVjdDsKKyAgICBSZWZQdHI8UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0OwogCiAgICAgUmVmPFNjcmlw
dENhbGxTdGFjaz4gc3RhY2tUcmFjZSA9IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhKU0V4ZWNTdGF0
ZTo6Y3VycmVudFN0YXRlKCkpOwogICAgIGlmIChzdGFja1RyYWNlLT5zaXplKCkgPiAwKSB7Ci0g
ICAgICAgIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQorICAgICAgICBpbml0aWF0b3JP
YmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAg
ICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQog
ICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRTdGFj
a1RyYWNlKHN0YWNrVHJhY2UtPmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSk7CiAgICAgfSBlbHNlIGlm
IChkb2N1bWVudCAmJiBkb2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkpIHsKLSAg
ICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpQYXJzZXIpCisgICAgICAgIGluaXRpYXRvck9i
amVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAg
ICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpQYXJzZXIpCiAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldFVybChk
b2N1bWVudC0+dXJsKCkuc3RyaW5nKCkpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldExp
bmVOdW1iZXIoZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT50ZXh0UG9zaXRp
b24oKS5tX2xpbmUub25lQmFzZWRJbnQoKSk7CkBAIC03NTgsOCArNzYwLDggQEAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZEluaXQKICAgICBpZiAoZG9tQWdlbnQgJiYgcmVzb3VyY2VSZXF1ZXN0KSB7CiAg
ICAgICAgIGlmIChhdXRvIGluc3BlY3RvckluaXRpYXRvck5vZGVJZGVudGlmaWVyID0gcmVzb3Vy
Y2VSZXF1ZXN0LT5pbnNwZWN0b3JJbml0aWF0b3JOb2RlSWRlbnRpZmllcigpKSB7CiAgICAgICAg
ICAgICBpZiAoIWluaXRpYXRvck9iamVjdCkgewotICAgICAgICAgICAgICAgIGluaXRpYXRvck9i
amVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkK
LSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKKyAgICAgICAgICAgICAgICBpbml0aWF0b3JPYmpl
Y3QgPSBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAg
ICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhl
cikKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KIApAQCAt
NzY4LDEzICs3NzAsMTMgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZEluaXQKICAgICB9CiAKICAgICBp
ZiAoaW5pdGlhdG9yT2JqZWN0KQotICAgICAgICByZXR1cm4gaW5pdGlhdG9yT2JqZWN0OworICAg
ICAgICByZXR1cm4gaW5pdGlhdG9yT2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiAKICAgICBpZiAo
bV9pc1JlY2FsY3VsYXRpbmdTdHlsZSAmJiBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcikK
LSAgICAgICAgcmV0dXJuIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yOworICAgICAgICBy
ZXR1cm4gKm1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yOwogCi0gICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgLnNl
dFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhl
cikKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAg
ICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKQEAgLTc4NSw3ICs3ODcsNyBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgVQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJT
b2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCisgICAg
YXV0byByZXF1ZXN0T2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChJZGVudGlm
aWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdhbGxUaW1l
Ojpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgV1RGTW92ZShyZXF1ZXN0T2Jq
ZWN0KSk7CkBAIC03OTMsNyArNzk1LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6Ondp
bGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW4KIAogdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQogewotICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3BvbnNl
T2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0U3RhdHVzKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpCiAgICAgICAgIC5z
ZXRTdGF0dXNUZXh0KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCiAgICAgICAgIC5zZXRIZWFk
ZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQpA
QCAtODIwLDEyICs4MjIsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEZyYW1lRXJyb3IodW5zaWduZWQgbG9uZyBpZGVudGlmaQogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT53ZWJTb2NrZXRGcmFtZUVycm9yKElkZW50aWZpZXJzRmFjdG9yeTo6cmVx
dWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCi17Ci0gICAgZW5h
YmxlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoKQog
ewogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVu
YWJsZWROZXR3b3JrQWdlbnQodGhpcyk7CkBAIC04NTcsOSArODU0LDExIEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjplbmFibGUoKQogICAgICAgICAgICAgICAgIGRpZENsb3NlV2ViU29j
a2V0KGlkZW50aWZpZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaXNhYmxl
KCkKIHsKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKICAgICBtX2ludGVyY2VwdGlvbkVuYWJsZWQg
PSBmYWxzZTsKQEAgLTg3Miw5ICs4NzEsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogICAgIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpOwog
CiAgICAgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoZmFsc2UpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZEludGVyY2VwdChVUkwg
dXJsLCBOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQorYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OnNob3VsZEludGVyY2VwdChVUkwgdXJsLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlIG5ldHdvcmtTdGFnZSkKIHsKICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7
CiAKQEAgLTkxMSw1NiArOTEyLDU1IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpjb250
aW51ZVBlbmRpbmdSZXNwb25zZXMoKQogICAgIG1fcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlcy5j
bGVhcigpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0RXh0cmFIVFRQSGVh
ZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0RXh0cmFIVFRQ
SGVhZGVycyhSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpCiB7Ci0gICAgZm9yIChhdXRvJiBl
bnRyeSA6IGhlYWRlcnMpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICBp
ZiAoZW50cnkudmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogaGVhZGVycy5nZXQoKSkgeworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gZW50cnku
dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghIXN0cmluZ1ZhbHVlKQogICAgICAgICAg
ICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzLnNldChlbnRyeS5rZXksIHN0cmluZ1ZhbHVlKTsKICAg
ICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQg
Ki8+PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFJlc3BvbnNlQm9keShjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCiB7CiAgICAgTmV0d29ya1Jlc291cmNl
c0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRh
LT5kYXRhKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTWlzc2luZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVzb3VyY2VEYXRhKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJf
cyk7CiAKLSAgICBpZiAocmVzb3VyY2VEYXRhLT5oYXNDb250ZW50KCkpIHsKLSAgICAgICAgKmJh
c2U2NEVuY29kZWQgPSByZXNvdXJjZURhdGEtPmJhc2U2NEVuY29kZWQoKTsKLSAgICAgICAgKmNv
bnRlbnQgPSByZXNvdXJjZURhdGEtPmNvbnRlbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAocmVzb3VyY2VEYXRhLT5oYXNDb250ZW50KCkpCisgICAgICAgIHJldHVybiB7IHsg
cmVzb3VyY2VEYXRhLT5jb250ZW50KCksIHJlc291cmNlRGF0YS0+YmFzZTY0RW5jb2RlZCgpIH0g
fTsKIAotICAgIGlmIChyZXNvdXJjZURhdGEtPmlzQ29udGVudEV2aWN0ZWQoKSkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJSZXNvdXJjZSBjb250ZW50IHdhcyBldmljdGVkIGZyb20gaW5zcGVj
dG9yIGNhY2hlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXNvdXJjZURh
dGEtPmlzQ29udGVudEV2aWN0ZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJS
ZXNvdXJjZSBjb250ZW50IHdhcyBldmljdGVkIGZyb20gaW5zcGVjdG9yIGNhY2hlIl9zKTsKIAog
ICAgIGlmIChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpICYmICFyZXNvdXJjZURhdGEtPnRleHRFbmNv
ZGluZ05hbWUoKS5pc051bGwoKSkgewotICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IGZhbHNlOwot
ICAgICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KHJlc291
cmNlRGF0YS0+YnVmZmVyKCksIHJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLCAqYmFz
ZTY0RW5jb2RlZCwgY29udGVudCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmlu
ZyBib2R5OworICAgICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250
ZW50KHJlc291cmNlRGF0YS0+YnVmZmVyKCksIHJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFt
ZSgpLCBmYWxzZSwgJmJvZHkpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyBib2R5LCBmYWxzZSB9
IH07CiAgICAgfQogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkgewot
ICAgICAgICBpZiAoSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQo
KnJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmluZyBib2R5OworICAgICAgICBib29s
IGJhc2U2NEVuY29kZWQ7CisgICAgICAgIGlmIChJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hl
ZFJlc291cmNlQ29udGVudCgqcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpLCAmYm9keSwg
JmJhc2U2NEVuY29kZWQpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyBib2R5LCBiYXNlNjRFbmNv
ZGVkIH0gfTsKICAgICB9CiAKLSAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGNvbnRlbnQgb2Yg
cmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIk1pc3NpbmcgY29udGVudCBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2Fi
bGVkKEVycm9yU3RyaW5nJiwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQo
Ym9vbCBkaXNhYmxlZCkKIHsKLSAgICBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChkaXNhYmxl
ZCk7CisgICAgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGRpc2FibGVkKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpsb2FkUmVz
b3VyY2UoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgUmVm
PExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghY29udGV4dCkg
ewogICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3JTdHJpbmcpOwpAQCAtOTk0LDI2
ICs5OTQsMjIgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXIKICAgICBpbnNwZWN0b3JUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50LT5zZXRMb2FkZXIoV1RGTW92ZShsb2FkZXIpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIHNlcmlhbGl6
ZWRDZXJ0aWZpY2F0ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIGF1dG8qIHJlc291cmNlRGF0YSA9
IG1fcmVzb3VyY2VzRGF0YS0+ZGF0YShyZXF1ZXN0SWQpOwotICAgIGlmICghcmVzb3VyY2VEYXRh
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJl
cXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlc291cmNlRGF0
YSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlc291cmNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgY2VydGlmaWNhdGUgPSByZXNvdXJjZURh
dGEtPmNlcnRpZmljYXRlSW5mbygpOwotICAgIGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNh
dGUudmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBj
ZXJ0aWZpY2F0ZSBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNhdGUudmFsdWUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjZXJ0
aWZpY2F0ZSBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFdURjo6
UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUu
dmFsdWUoKSk7Ci0gICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NEVuY29kZShlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKLVdlYlNv
Y2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQpCitXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2Vi
U29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJl
cXVlc3RJZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2soV2ViU29ja2V0OjphbGxBY3RpdmVXZWJT
b2NrZXRzTXV0ZXgoKSk7CiAKQEAgLTEwMzEsMzkgKzEwMjcsMzYgQEAgc3RhdGljIEpTQzo6SlNW
YWx1ZSB3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBX
ZWJTb2NrZXQKICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RG
b3JQcm90b3R5cGUoJnN0YXRlKSwgd2ViU29ja2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OnJlc29sdmVXZWJTb2NrZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4g
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpyZXNvbHZlV2ViU29ja2V0KGNvbnN0IFByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkK
IHsKICAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHdlYlNvY2tldEZvclJlcXVlc3RJZChyZXF1
ZXN0SWQpOwotICAgIGlmICghd2ViU29ja2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1p
c3Npbmcgd2ViIHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghd2ViU29ja2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIk1pc3Npbmcgd2ViIHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTY4NDc1PiBXZWIgSW5zcGVjdG9yOiBDb3Jy
ZWN0bHkgZGlzcGxheSBpZnJhbWUncyBhbmQgd29ya2VyJ3MgV2ViU29ja2V0cwogICAgIGlmICgh
aXM8RG9jdW1lbnQ+KHdlYlNvY2tldC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQi
KTsKIAogICAgIGF1dG8qIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHdlYlNvY2tldC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBmcmFtZSBvZiB3ZWIgc29ja2V0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGZyYW1lIG9mIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7
CiAKICAgICBhdXRvJiBzdGF0ZSA9ICptYWluV29ybGRFeGVjU3RhdGUoZnJhbWUpOwogICAgIGF1
dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlw
dEZvcigmc3RhdGUpOwogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsK
IAotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91
cCA6IFN0cmluZygpOwotICAgIHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2Vi
U29ja2V0QXNTY3JpcHRWYWx1ZShzdGF0ZSwgd2ViU29ja2V0KSwgb2JqZWN0R3JvdXBOYW1lKTsK
KyAgICBhdXRvIG9iamVjdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2ViU29ja2V0QXNT
Y3JpcHRWYWx1ZShzdGF0ZSwgd2ViU29ja2V0KSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2Jq
ZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFi
bGUgdG8gY2FzdCBXZWJTb2NrZXQiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51
bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVu
YWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlv
bkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGlmIChtX2ludGVyY2VwdGlvbkVuYWJsZWQg
PT0gZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1faW50ZXJjZXB0aW9uRW5hYmxl
ZCA/ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBlbmFibGVkIl9zIDogIkludGVyY2VwdGlvbiBhbHJl
YWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2ludGVy
Y2VwdGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KG1faW50ZXJjZXB0aW9uRW5hYmxlZCA/ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBlbmFibGVkIl9z
IDogIkludGVyY2VwdGlvbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW50ZXJjZXB0
aW9uRW5hYmxlZCA9IGVuYWJsZWQ7CiAKQEAgLTEwNzEsNDYgKzEwNjQsNDAgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBib28KICAgICAgICAgY29udGludWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICAg
ICAgY29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmFkZEludGVyY2VwdGlvbihFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdv
cmtTdGFnZVN0cmluZywgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBi
b29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmFkZEludGVyY2VwdGlvbihjb25zdCBTdHJpbmcmIHVybCwgUHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJvb2w+
JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAgIGF1dG8g
bmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdv
cmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtTdGFnZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29ya1N0YWdlOiAi
X3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJ
bnRlcmNlcHQgaW50ZXJjZXB0OwogICAgIGludGVyY2VwdC51cmwgPSB1cmw7Ci0gICAgaWYgKG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUgPSAq
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAgIGlmIChvcHRpb25hbElzUmVnZXgpCi0gICAgICAg
IGludGVyY2VwdC5pc1JlZ2V4ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAgICBpbnRlcmNlcHQubmV0
d29ya1N0YWdlID0gbmV0d29ya1N0YWdlLnZhbHVlKCk7CisgICAgaWYgKGNhc2VTZW5zaXRpdmUp
CisgICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VTZW5zaXRpdmU7CisgICAg
aWYgKGlzUmVnZXgpCisgICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKmlzUmVnZXg7CisgICAg
aW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZTsKIAogICAgIGlmICghbV9pbnRl
cmNlcHRzLmFwcGVuZElmTm90Q29udGFpbnMoaW50ZXJjZXB0KSkKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiSW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBz
dGFnZSBhbHJlYWR5IGV4aXN0cyJfczsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJ
bnRlcmNlcHQgZm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFs
cmVhZHkgZXhpc3RzIl9zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpyZW1vdmVJbnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1Jl
Z2V4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50
OjpyZW1vdmVJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIFByb3RvY29sOjpOZXR3b3Jr
OjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRp
dmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkKIHsKLSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdv
cmtTdGFnZVN0cmluZyk7Ci0gICAgaWYgKCFuZXR3b3JrU3RhZ2UpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIG5ldHdvcmtTdGFnZTogIl9zLCBuZXR3b3JrU3Rh
Z2VTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJjZXB0IGludGVy
Y2VwdDsKICAgICBpbnRlcmNlcHQudXJsID0gdXJsOwotICAgIGlmIChvcHRpb25hbENhc2VTZW5z
aXRpdmUpCi0gICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKm9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZTsKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4KQotICAgICAgICBpbnRlcmNlcHQuaXNS
ZWdleCA9ICpvcHRpb25hbElzUmVnZXg7Ci0gICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5l
dHdvcmtTdGFnZS52YWx1ZSgpOworICAgIGlmIChjYXNlU2Vuc2l0aXZlKQorICAgICAgICBpbnRl
cmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpjYXNlU2Vuc2l0aXZlOworICAgIGlmIChpc1JlZ2V4KQor
ICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICppc1JlZ2V4OworICAgIGludGVyY2VwdC5uZXR3
b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2U7CiAKICAgICBpZiAoIW1faW50ZXJjZXB0cy5yZW1vdmVB
bGwoaW50ZXJjZXB0KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbnRlcmNlcHQg
Zm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIl9zOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW50ZXJjZXB0IGZvciBnaXZlbiB1cmws
IGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBzdGFnZSJfcyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbEludGVyY2VwdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC0xMTE4LDggKzExMDUsOCBAQCBib29sIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6d2lsbEludGVyY2VwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgTmV0d29ya1N0
YWdlOjpSZXF1ZXN0KQotICAgICAgICB8fCBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwg
TmV0d29ya1N0YWdlOjpSZXNwb25zZSk7CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1
ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0KQorICAg
ICAgICB8fCBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgUHJvdG9jb2w6Ok5ldHdvcms6
Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UpOwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2hvdWxkSW50ZXJjZXB0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CkBAIC0xMTI3LDcgKzExMTQsNyBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxk
SW50ZXJjZXB0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlcwogICAgIGlmICgh
bV9pbnRlcmNlcHRpb25FbmFibGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIE5ldHdvcmtTdGFnZTo6UmVxdWVzdCk7
CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0
d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OnNob3VsZEludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQpAQCAtMTEzNSw3ICsxMTIyLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OnNob3VsZEludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3AKICAg
ICBpZiAoIW1faW50ZXJjZXB0aW9uRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXNwb25zZS51cmwoKSwgTmV0d29ya1N0YWdlOjpS
ZXNwb25zZSk7CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXNwb25zZS51cmwoKSwgUHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UpOwogfQogCiB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYgbG9hZGVy
LCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiYmIGhhbmRsZXIpCkBAIC0x
MTY2LDkyICsxMTUzLDg5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwKIAogICAgIG1fcGVuZGlu
Z0ludGVyY2VwdFJlc3BvbnNlcy5zZXQocmVxdWVzdElkLCBtYWtlVW5pcXVlPFBlbmRpbmdJbnRl
cmNlcHRSZXNwb25zZT4ocmVzcG9uc2UsIFdURk1vdmUoaGFuZGxlcikpKTsKIAotICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwgYnVpbGRPYmpl
Y3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlLCBudWxscHRyKSk7CisgICAgYXV0byByZXNv
dXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlLCBu
dWxscHRyKTsKKyAgICBpZiAoIXJlc291cmNlUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwg
cmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmludGVyY2VwdENvbnRpbnVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpp
bnRlcmNlcHRDb250aW51ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1
ZXN0SWQsIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewot
ICAgIGF1dG8gbmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVs
cGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6Ok5ldHdvcmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtT
dGFnZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29y
a1N0YWdlOiAiX3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBz
d2l0Y2ggKG5ldHdvcmtTdGFnZSkgeworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdv
cmtTdGFnZTo6UmVxdWVzdDoKKyAgICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3QgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAg
ICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0LT5jb250aW51ZVdpdGhPcmlnaW5hbFJlcXVl
c3QoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdp
dmVuIHJlcXVlc3RJZCJfcyk7CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3Jr
U3RhZ2U6OlJlc3BvbnNlOgorICAgICAgICBpZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9u
c2UgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpKSB7CisgICAg
ICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNw
b25zZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9y
IGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChuZXR3b3JrU3RhZ2Uu
dmFsdWUoKSkgewotICAgIGNhc2UgTmV0d29ya1N0YWdlOjpSZXF1ZXN0OgotICAgICAgICBpZiAo
YXV0byBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3Rz
LnRha2UocmVxdWVzdElkKSkKLSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0LT5j
b250aW51ZVdpdGhPcmlnaW5hbFJlcXVlc3QoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1ZXN0IGZvciBnaXZl
biByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE5ldHdvcmtTdGFnZTo6
UmVzcG9uc2U6Ci0gICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1f
cGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlcy50YWtlKHJlcXVlc3RJZCkpCi0gICAgICAgICAgICBw
ZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcg
aW50ZXJjZXB0IHJlc3BvbnNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyogdXJsLCBjb25zdCBTdHJpbmcqIG1ldGhvZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoZWFkZXJz
LCBjb25zdCBTdHJpbmcqIHBvc3REYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVxdWVzdChjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBT
dHJpbmcmIHBvc3REYXRhKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJ
bnRlcmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVz
dCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJl
cXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsK
IAogICAgIGF1dG8mIGxvYWRlciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7CiAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBsb2FkZXIucmVxdWVzdCgpOwotICAgIGlmICh1cmwpCi0g
ICAgICAgIHJlcXVlc3Quc2V0VVJMKFVSTCh7IH0sICp1cmwpKTsKLSAgICBpZiAobWV0aG9kKQot
ICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoKm1ldGhvZCk7CisgICAgaWYgKCEhdXJsKQor
ICAgICAgICByZXF1ZXN0LnNldFVSTChVUkwoeyB9LCB1cmwpKTsKKyAgICBpZiAoISFtZXRob2Qp
CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtZXRob2QpOwogICAgIGlmIChoZWFkZXJz
KSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBmb3Ig
KGF1dG8mIGhlYWRlciA6ICpoZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFs
dWU7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1ZSkp
CisgICAgICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhwbGlj
aXRIZWFkZXJzLmFkZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGljaXRIZWFkZXJzKSk7
CiAgICAgfQotICAgIGlmIChwb3N0RGF0YSkgeworICAgIGlmICghIXBvc3REYXRhKSB7CiAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKCpw
b3N0RGF0YSwgYnVmZmVyKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRv
IGRlY29kZSBnaXZlbiBwb3N0RGF0YSJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBwb3N0RGF0
YSJfcyk7CiAKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKGJ1
ZmZlcikpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gaWRlbnRpZnkg
d2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVuIHdlIGFkZCB0aGlzIHRvIHRo
ZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGludWVXaXRoUmVxdWVzdChyZXF1
ZXN0KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50
OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGNvbnN0IFN0cmluZyogbWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJp
bmcqIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJl
c3BvbnNlKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGludD4mJiBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ0ludGVy
Y2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRha2UocmVxdWVzdElk
KTsKLSAgICBpZiAoIXBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBnaXZlbiByZXF1
ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFwZW5kaW5nSW50ZXJj
ZXB0UmVzcG9uc2UpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5k
aW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFJl
c291cmNlUmVzcG9uc2Ugb3ZlcnJpZGVSZXNwb25zZShwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2Ut
Pm9yaWdpbmFsUmVzcG9uc2UoKSk7CiAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRTb3VyY2UoUmVz
b3VyY2VSZXNwb25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZSk7CiAKICAgICBpZiAoc3Rh
dHVzKQogICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKCpzdGF0dXMp
OwotICAgIGlmIChzdGF0dXNUZXh0KQotICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBT
dGF0dXNUZXh0KCpzdGF0dXNUZXh0KTsKLSAgICBpZiAobWltZVR5cGUpCi0gICAgICAgIG92ZXJy
aWRlUmVzcG9uc2Uuc2V0TWltZVR5cGUoKm1pbWVUeXBlKTsKKyAgICBpZiAoISFzdGF0dXNUZXh0
KQorICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1c1RleHQp
OworICAgIGlmICghIW1pbWVUeXBlKQorICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldE1pbWVU
eXBlKG1pbWVUeXBlKTsKICAgICBpZiAoaGVhZGVycykgewogICAgICAgICBIVFRQSGVhZGVyTWFw
IGV4cGxpY2l0SGVhZGVyczsKICAgICAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiAqaGVhZGVycykg
ewotICAgICAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlOwotICAgICAgICAgICAgaWYgKGhlYWRl
ci52YWx1ZS0+YXNTdHJpbmcoaGVhZGVyVmFsdWUpKQorICAgICAgICAgICAgYXV0byBoZWFkZXJW
YWx1ZSA9IGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghIWhlYWRl
clZhbHVlKQogICAgICAgICAgICAgICAgIGV4cGxpY2l0SGVhZGVycy5hZGQoaGVhZGVyLmtleSwg
aGVhZGVyVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRU
UEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwpAQCAtMTI2MSw0MSArMTI0
NSwzNCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29ucwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IG92ZXJyaWRlRGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewogICAgICAgICBWZWN0b3I8
dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZm
ZXIpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVu
IGNvbnRlbnQiX3M7Ci0gICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3Bv
bmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpCisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJf
cyk7CiAKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShidWZmZXIpKTsKICAgICB9IGVsc2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoY29udGVudC51dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgo
KSk7CiAKICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmQob3ZlcnJpZGVSZXNw
b25zZSwgb3ZlcnJpZGVEYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3Rh
dHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVy
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVx
dWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNv
ZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0
YXR1c1RleHQsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykKIHsKICAgICBhdXRvIHBlbmRp
bmdSZXF1ZXN0ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwot
ICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBwZW5kaW5nIGludGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9y
IGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICAvLyBMb2FkZXIgd2lsbCBiZSByZXRhaW5lZCBp
biB0aGUgZGlkUmVjZWl2ZVJlc3BvbnNlIGxhbWJkYSBiZWxvdy4KICAgICBSZWZQdHI8UmVzb3Vy
Y2VMb2FkZXI+IGxvYWRlciA9IHBlbmRpbmdSZXF1ZXN0LT5tX2xvYWRlci5nZXQoKTsKLSAgICBp
ZiAobG9hZGVyLT5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIlVuYWJsZSB0byBmdWxmaWxsIHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vz
c2VkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChsb2FkZXItPnJlYWNoZWRU
ZXJtaW5hbFN0YXRlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRv
IGZ1bGZpbGwgcmVxdWVzdCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3MpOwogCiAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewog
ICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUg
dG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50
Il9zKTsKIAogICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZm
ZXIpKTsKICAgICB9IGVsc2UKQEAgLTEzMDcsOSArMTI4NCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluCiAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzKTsKICAgICByZXNw
b25zZS5zZXRIVFRQU3RhdHVzVGV4dChzdGF0dXNUZXh0KTsKICAgICBIVFRQSGVhZGVyTWFwIGV4
cGxpY2l0SGVhZGVyczsKLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpIHsKLSAgICAg
ICAgU3RyaW5nIGhlYWRlclZhbHVlOwotICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmlu
ZyhoZWFkZXJWYWx1ZSkpCisgICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFkZXJzLmdldCgpKSB7
CisgICAgICAgIGF1dG8gaGVhZGVyVmFsdWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7Cisg
ICAgICAgIGlmICghIWhlYWRlclZhbHVlKQogICAgICAgICAgICAgZXhwbGljaXRIZWFkZXJzLmFk
ZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgfQogICAgIHJlc3BvbnNlLnNldEhUVFBI
ZWFkZXJGaWVsZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKQEAgLTEzMTksNDQgKzEyOTYs
NDAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVz
cG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVj
ZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciksIGJ1ZmZlci0+c2l6ZSgpLCBEYXRhUGF5bG9hZFdo
b2xlUmVzb3VyY2UpOwogICAgICAgICBsb2FkZXItPmRpZEZpbmlzaExvYWRpbmcoTmV0d29ya0xv
YWRNZXRyaWNzKCkpOwogICAgIH0pOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBlcnJv
clR5cGVTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJv
clR5cGUgZXJyb3JUeXBlKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJ
bnRlcmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVz
dCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJl
cXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsK
IAogICAgIGF1dG8mIGxvYWRlciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7Ci0gICAgaWYg
KGxvYWRlci5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
IlVuYWJsZSB0byBhYm9ydCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCJf
czsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChsb2FkZXIucmVhY2hlZFRlcm1pbmFsU3RhdGUo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gYWJvcnQgcmVxdWVz
dCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3MpOworCisgICAgc3dpdGNoIChlcnJv
clR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6
R2VuZXJhbDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
bldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGludGVyY2VwdGVkIl9z
LCBSZXNvdXJjZUVycm9yOjpUeXBlOjpHZW5lcmFsKSk7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6QWNjZXNzQ29u
dHJvbDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldl
YktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJBY2Nlc3MgZGVuaWVkIl9zLCBSZXNvdXJj
ZUVycm9yOjpUeXBlOjpBY2Nlc3NDb250cm9sKSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6Q2FuY2VsbGF0aW9u
OgorICAgICAgICBsb2FkZXIuZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0
SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgY2FuY2VsZWQiX3MsIFJlc291cmNl
RXJyb3I6OlR5cGU6OkNhbmNlbGxhdGlvbikpOworICAgICAgICByZXR1cm4geyB9OworCisgICAg
Y2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OlRpbWVvdXQ6CisgICAg
ICAgIGxvYWRlci5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6
OlR5cGU6OlRpbWVvdXQpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRv
IGVycm9yVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJj
ZUVycm9yVHlwZT4oZXJyb3JUeXBlU3RyaW5nKTsKLSAgICBpZiAoIWVycm9yVHlwZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gZXJyb3JUeXBlOiAiX3MsIGVy
cm9yVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZUVy
cm9yIGVycm9yOwotICAgIHN3aXRjaCAoZXJyb3JUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgot
ICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwg
MCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCBpbnRlcmNlcHRlZCJfcywgUmVzb3VyY2VFcnJvcjo6
VHlwZTo6R2VuZXJhbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OkFjY2Vzc0NvbnRyb2w6Ci0gICAgICAg
IGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2Fk
ZXIudXJsKCksICJBY2Nlc3MgZGVuaWVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpBY2Nlc3ND
b250cm9sKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6Q2FuY2VsbGF0aW9uOgotICAgICAgICBlcnJvciA9
IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgp
LCAiUmVxdWVzdCBjYW5jZWxlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9u
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXNvdXJjZUVycm9yVHlwZTo6VGltZW91dDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVy
cm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3Qg
dGltZWQgb3V0Il9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGxvYWRlci5kaWRGYWlsKGVycm9yKTsKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2hvdWxkVHJlYXRBc1RleHQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKQEAgLTE0MzksOSAr
MTQxMiw5IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRl
bnQoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlLCBTdHJpCiAgICAgfQogfQogCi1zdGF0aWMgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JT
ZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0
IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgUHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hl
c0NvdW50KQogewotICAgIGF1dG8gc2VhcmNoUmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQorICAgIGF1dG8gc2VhcmNoUmVzdWx0ID0gUHJv
dG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwp
CiAgICAgICAgIC5zZXRGcmFtZUlkKGZyYW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQo
bWF0Y2hlc0NvdW50KQpAQCAtMTQ2MSw3ICsxNDM0LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmlu
Zz4gdGV4dENvbnRlbnRGb3JSZXNvdXJjZURhdGEoY29uc3QgTmV0d29ya1Jlc291cmNlc0RhdGE6
OlIKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNz
aW9uJiByZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0Pj4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpz
ZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJl
Z2V4LCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mIHJl
c3VsdCkKIHsKICAgICBWZWN0b3I8TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSo+
IHJlc291cmNlcyA9IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VzKCk7CiAgICAgZm9yIChhdXRv
KiByZXNvdXJjZURhdGEgOiByZXNvdXJjZXMpIHsKQEAgLTE0NzMsNyArMTQ0Niw3IEBAIHZvaWQg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFy
cjo6UmVndWxhckV4cHJlc3NpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2VhcmNoSW5SZXF1ZXN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9v
bCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5l
cmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2VhcmNoSW5SZXF1ZXN0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMp
CiB7CiAgICAgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCogcmVzb3Vy
Y2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7CiAgICAgaWYgKCFyZXNv
dXJjZURhdGEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oCmluZGV4IDM0NDBlNzFhNWVkNWVmMzg0NjIwYTlmNjI4
MDM3NTFlOTgzZGI1YjEuLjQwZTIzYzQzYTcwZTc5YjBjMmMwYjFkNmExNTNlZGUzOTU4MDJhYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JOZXR3b3JrQWdlbnQuaApAQCAtNjEsOCArNjEsNiBAQCBjbGFzcyBXZWJTb2NrZXQ7CiAKIHN0
cnVjdCBXZWJTb2NrZXRGcmFtZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNs
YXNzIEluc3BlY3Rvck5ldHdvcmtBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBJbnNwZWN0b3I6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvck5ldHdvcmtBZ2VudCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC03OSwyMiArNzcsMjIgQEAgcHVibGljOgogICAgIHZvaWQgd2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBm
aW5hbDsKIAogICAgIC8vIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIGZpbmFsOwotICAgIHZvaWQgc2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBnZXRSZXNwb25zZUJv
ZHkoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50
LCBib29sKiBiYXNlNjRFbmNvZGVkKSBmaW5hbDsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBkaXNhYmxlZCkgZmluYWw7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVm
PExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcq
IHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSkgZmluYWw7Ci0gICAgdm9pZCByZXNvbHZlV2ViU29ja2V0
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogb2Jq
ZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JikgZmluYWw7Ci0gICAgdm9pZCBzZXRJbnRlcmNlcHRpb25FbmFibGVkKEVycm9yU3RyaW5n
JiwgYm9vbCBlbmFibGVkKSBmaW5hbDsKLSAgICB2b2lkIGFkZEludGVyY2VwdGlvbihFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmlu
ZywgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCkgZmluYWw7
Ci0gICAgdm9pZCByZW1vdmVJbnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIGNhc2VT
ZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0
Q29udGludWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJl
cXVlc3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
KiB1cmwsIGNvbnN0IFN0cmluZyogbWV0aG9kLCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMs
IGNvbnN0IFN0cmluZyogcG9zdERhdGEpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJl
c3BvbnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcqIG1pbWVUeXBlLCBj
b25zdCBpbnQqIHN0YXR1cywgY29uc3QgU3RyaW5nKiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpP
YmplY3QqIGhlYWRlcnMpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNw
b25zZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50
IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QmIGhl
YWRlcnMpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSkg
ZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFi
bGUoKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldEV4dHJhSFRUUEhlYWRlcnMoUmVmPEpTT046Ok9iamVjdD4mJikgZmluYWw7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywg
Ym9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gZ2V0UmVzcG9uc2VCb2R5KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQo
Ym9vbCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291
cmNlQ2FsbGJhY2s+JiYpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZVdlYlNvY2tldChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5hbDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEludGVyY2VwdGlv
bkVuYWJsZWQoYm9vbCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBhZGRJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vu
c2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlSW50ZXJjZXB0aW9uKGNvbnN0IFN0
cmluZyYgdXJsLCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UsIE9w
dGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBm
aW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVy
Y2VwdENvbnRpbnVlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSkgZmluYWw7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRo
UmVxdWVzdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBwb3N0RGF0YSkgZmluYWw7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRoUmVzcG9uc2Uo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGludD4mJiBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBz
dGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4mJiBoZWFk
ZXJzKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVxdWVzdElkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VF
cnJvclR5cGUpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCB3aWxsUmVjYWxjdWxhdGVTdHlsZSgpOwpAQCAtMTI3LDMyICsxMjUsMjkgQEAgcHVibGlj
OgogICAgIHZvaWQgaW50ZXJjZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmKTsKICAgICB2b2lkIGludGVy
Y2VwdFJlcXVlc3QoUmVzb3VyY2VMb2FkZXImLCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpPiYmKTsKIAotICAgIHZvaWQgc2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6
OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKTsKLSAgICB2b2lkIHNlYXJjaEluUmVx
dWVzdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7
CisgICAgdm9pZCBzZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4
cHJlc3Npb24mLCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZWFyY2hSZXN1bHQ+PiYpOworICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29s
IGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yTmV0
d29ya0FnZW50KFdlYkFnZW50Q29udGV4dCYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgbG9hZGVy
SWRlbnRpZmllcihEb2N1bWVudExvYWRlciopID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmcmFt
ZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9h
ZGVyKikgPSAwOworICAgIHZpcnR1YWwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJh
bWVJZCBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CiAgICAgdmlydHVhbCBW
ZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSA9IDA7
Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJhbChib29sKSA9IDA7CisgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRm9yY2VC
dWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3QgPSAwOwogCiBwcml2YXRlOgotICAg
IHZvaWQgZW5hYmxlKCk7Ci0KICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSwgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUpOwogCi0gICAgdXNpbmcgTmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6TmV0d29ya1N0YWdlOwotICAgIGJvb2wgc2hvdWxkSW50ZXJjZXB0KFVSTCwg
TmV0d29ya1N0YWdlKTsKKyAgICBib29sIHNob3VsZEludGVyY2VwdChVUkwsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSk7CiAgICAgdm9pZCBjb250aW51ZVBlbmRp
bmdSZXF1ZXN0cygpOwogICAgIHZvaWQgY29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKLSAg
ICBXZWJTb2NrZXQqIHdlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCk7CisgICAgV2ViU29ja2V0KiB3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJik7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1
bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCogPSBudWxscHRyKTsKKyAgICBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChE
b2N1bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCogPSBudWxscHRyKTsKICAgICBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9y
VGltaW5nKGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyosIFJlc291cmNlTG9hZGVyJik7CiAgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IGJ1aWxkT2JqZWN0Rm9y
TWV0cmljcyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKTsKICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgUmVzb3VyY2VMb2FkZXIqKTsKQEAgLTIzNiw3
ICsyMzEsNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmcgdXJsOwogICAgICAgICBib29sIGNh
c2VTZW5zaXRpdmUgeyB0cnVlIH07CiAgICAgICAgIGJvb2wgaXNSZWdleCB7IGZhbHNlIH07Ci0g
ICAgICAgIE5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UgeyBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNl
IH07CisgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBu
ZXR3b3JrU3RhZ2UgeyBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6
OlJlc3BvbnNlIH07CiAKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRl
cmNlcHQmIG90aGVyKSBjb25zdAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggNTM5ZTgxMDVi
NjZlN2IyYTZhMDU1NzFhMWUxYzhjZDZiZGYyN2M5MC4uOGJmN2FlMWUwZDA1YTI2NDljMTNhYmIw
ZDE0ZDIwODQzNzc1ODA5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VzRm9y
RnJhbWUoRnJhbWUqIGZyYW1lCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEZy
YW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNlNjRF
bmNvZGVkKQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJs
LCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKIHsKICAgICBEb2N1bWVudExv
YWRlciogbG9hZGVyID0gYXNzZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsK
ICAgICBpZiAoIWxvYWRlcikKQEAgLTIxMywzNyArMjEzLDM3IEBAIENhY2hlZFJlc291cmNlKiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJM
JiB1cmwpCiAgICAgcmV0dXJuIGNhY2hlZFJlc291cmNlOwogfQogCi1JbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVK
U09OKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKK1Byb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVK
U09OKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHJlc291cmNlVHlwZSkgewogICAgIGNhc2UgRG9jdW1lbnRSZXNvdXJjZToKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6RG9j
dW1lbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpEb2N1
bWVudDsKICAgICBjYXNlIEltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkltYWdlOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6SW1hZ2U7CiAgICAgY2FzZSBGb250UmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6
OkZvbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGb250
OwogICAgIGNhc2UgU3R5bGVTaGVldFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpTdHlsZVNoZWV0OworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6U3R5bGVTaGVldDsKICAgICBjYXNlIFNj
cmlwdFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpTY3JpcHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVz
b3VyY2VUeXBlOjpTY3JpcHQ7CiAgICAgY2FzZSBYSFJSZXNvdXJjZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6WEhSOworICAgICAgICBy
ZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6WEhSOwogICAgIGNhc2UgRmV0Y2hS
ZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291
cmNlVHlwZTo6RmV0Y2g7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpGZXRjaDsKICAgICBjYXNlIFBpbmdSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6UGluZzsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlBpbmc7CiAgICAgY2FzZSBCZWFjb25SZXNv
dXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNl
VHlwZTo6QmVhY29uOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6QmVhY29uOwogICAgIGNhc2UgV2ViU29ja2V0UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OldlYlNvY2tldDsKKyAgICAg
ICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OldlYlNvY2tldDsKICAgICBj
YXNlIE90aGVyUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZTo6T3RoZXI7CiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQog
ICAgIGNhc2UgQXBwbGljYXRpb25NYW5pZmVzdFJlc291cmNlOgogICAgICAgICBicmVhazsKICNl
bmRpZgogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpPdGhlcjsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6
T3RoZXI7CiB9CiAKIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBh
Z2VBZ2VudDo6aW5zcGVjdG9yUmVzb3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUp
CkBAIC0yOTcsNyArMjk3LDcgQEAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgSW5z
cGVjdG9yUGFnZUFnZW50OjppbnNwZWN0b3JSZXNvdXJjZVR5cGUoY29uc3QKICAgICByZXR1cm4g
aW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlLnR5cGUoKSk7CiB9CiAKLUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNh
Y2hlZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNl
KQorUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hl
ZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQog
ewogICAgIHJldHVybiByZXNvdXJjZVR5cGVKU09OKGluc3BlY3RvclJlc291cmNlVHlwZShjYWNo
ZWRSZXNvdXJjZSkpOwogfQpAQCAtMzExLDcgKzMxMSw3IEBAIEZyYW1lKiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihQYWdlJiBwYWdlLCBjb25zdCBTdHJp
bmcmCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLURvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
RnJhbWUqIGZyYW1lKQorRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0
RG9jdW1lbnRMb2FkZXIoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUq
IGZyYW1lKQogewogICAgIEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIo
KTsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxvYWRlci5kb2N1
bWVudExvYWRlcigpOwpAQCAtMzM4LDE2ICszMzgsMTMgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVy
KiwKIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyB1bnVz
ZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0g
ICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkgPT0gdGhpcykg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5l
bmFibGVkUGFnZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJQYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlQWdlbnQodGhpcyk7CiAKQEAgLTM1OCwyMSArMzU1LDIyIEBA
IHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQogICAgIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKG1faW5zcGVjdGVkUGFnZS5kZWZhdWx0
VXNlRGFya0FwcGVhcmFuY2UoKSk7CiAjZW5kaWYKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBFcnJvclN0cmluZyB1bnVzZWQ7Ci0gICAgc2V0U2hvd1BhaW50UmVjdHModW51c2VkLCBmYWxz
ZSk7CisgICAgc2V0U2hvd1BhaW50UmVjdHMoZmFsc2UpOwogI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIHNldFNob3dSdWxlcnModW51c2VkLCBmYWxzZSk7CisgICAgc2V0U2hvd1J1bGVy
cyhmYWxzZSk7CiAjZW5kaWYKLSAgICBvdmVycmlkZVVzZXJBZ2VudCh1bnVzZWQsIG51bGxwdHIp
OwotICAgIHNldEVtdWxhdGVkTWVkaWEodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyAgICBvdmVy
cmlkZVVzZXJBZ2VudChudWxsU3RyaW5nKCkpOworICAgIHNldEVtdWxhdGVkTWVkaWEoZW1wdHlT
dHJpbmcoKSk7CiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCi0gICAgc2V0Rm9yY2VkQXBwZWFyYW5jZSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkp
OworICAgIHNldEZvcmNlZEFwcGVhcmFuY2UoV1RGOjpudWxsb3B0KTsKICNlbmRpZgogCiAgICAg
YXV0byYgaW5zcGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7
CkBAIC0zOTEsNiArMzg5LDggQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUoRXJy
b3JTdHJpbmcmKQogICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUo
SW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGVFbmFibGVkLCBXVEY6Om51bGxvcHQpOwogICAgIG1fY2xpZW50LT5zZXREZXZlbG9w
ZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNl
OjpJVFBEZWJ1Z01vZGVFbmFibGVkLCBXVEY6Om51bGxvcHQpOwogICAgIG1fY2xpZW50LT5zZXRE
ZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVm
ZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkLCBXVEY6Om51bGxvcHQpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAogZG91YmxlIEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkK
QEAgLTM5OCwyMSArMzk4LDE5IEBAIGRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRpbWVzdGFt
cCgpCiAgICAgcmV0dXJuIG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNl
ZFRpbWUoKS5zZWNvbmRzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZWxvYWQo
RXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4sIGNvbnN0
IGJvb2wqIG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJlc291cmNlcykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6cmVsb2FkKE9wdGlvbmFsPGJvb2w+JiYg
aWdub3JlQ2FjaGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV2YWxpZGF0ZUFsbFJlc291cmNlcykKIHsK
LSAgICBib29sIHJlbG9hZEZyb21PcmlnaW4gPSBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4gJiYg
Km9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbjsKLSAgICBib29sIHJldmFsaWRhdGVBbGxSZXNvdXJj
ZXMgPSBvcHRpb25hbFJldmFsaWRhdGVBbGxSZXNvdXJjZXMgJiYgKm9wdGlvbmFsUmV2YWxpZGF0
ZUFsbFJlc291cmNlczsKLQogICAgIE9wdGlvblNldDxSZWxvYWRPcHRpb24+IHJlbG9hZE9wdGlv
bnM7Ci0gICAgaWYgKHJlbG9hZEZyb21PcmlnaW4pCisgICAgaWYgKGlnbm9yZUNhY2hlICYmICpp
Z25vcmVDYWNoZSkKICAgICAgICAgcmVsb2FkT3B0aW9ucy5hZGQoUmVsb2FkT3B0aW9uOjpGcm9t
T3JpZ2luKTsKLSAgICBpZiAoIXJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCisgICAgaWYgKCFyZXZh
bGlkYXRlQWxsUmVzb3VyY2VzIHx8ICEqcmV2YWxpZGF0ZUFsbFJlc291cmNlcykKICAgICAgICAg
cmVsb2FkT3B0aW9ucy5hZGQoUmVsb2FkT3B0aW9uOjpFeHBpcmVkT25seSk7Ci0KICAgICBtX2lu
c3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkubG9hZGVyKCkucmVsb2FkKHJlbG9hZE9wdGlvbnMpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKGNvbnN0IFN0cmluZyYgdXJsKQog
ewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvciB7IFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSB9OwogICAgIEZyYW1lJiBmcmFtZSA9IG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsK
QEAgLTQyMSwxMTEgKzQxOSw5NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZy
YW1lTG9hZFJlcXVlc3QgeyAqZnJhbWUuZG9jdW1lbnQoKSwgZnJhbWUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSwgV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpLCAiX3NlbGYiX3MsIEluaXRp
YXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5kaXNhYmxl
TmF2aWdhdGlvblRvSW52YWxpZFVSTCgpOwogICAgIGZyYW1lLmxvYWRlcigpLmNoYW5nZUxvY2F0
aW9uKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlVXNlckFnZW50KEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nKiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6b3ZlcnJpZGVVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBtX3VzZXJBZ2VudE92ZXJyaWRlID0gdmFsdWUgPyAqdmFsdWUgOiBTdHJpbmcoKTsKKyAg
ICBtX3VzZXJBZ2VudE92ZXJyaWRlID0gdmFsdWU7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1z
dGF0aWMgaW5saW5lIE9wdGlvbmFsPGJvb2w+IGFzT3B0aW9uYWxCb29sKGNvbnN0IGJvb2wqIHZh
bHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50Ojpv
dmVycmlkZVNldHRpbmcoUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmcgc2V0dGluZywgT3B0aW9uYWw8
Ym9vbD4mJiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIHJldHVybiAqdmFsdWU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpvdmVycmlkZVNldHRpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNldHRpbmdTdHJpbmcsIGNvbnN0IGJvb2wqIHZhbHVlKQotewotICAgIGlmIChzZXR0aW5nU3Ry
aW5nLmlzRW1wdHkoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJzZXR0aW5nU3RyaW5nIGlz
IGVtcHR5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzZXR0aW5nID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc+KHNldHRpbmdTdHJpbmcp
OwotICAgIGlmICghc2V0dGluZykgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmco
IlVua25vd24gc2V0dGluZ1N0cmluZzogIl9zLCBzZXR0aW5nU3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5zcGVj
dGVkUGFnZS5zZXR0aW5ncygpOwogCi0gICAgYXV0byBvdmVycmlkZVZhbHVlID0gYXNPcHRpb25h
bEJvb2wodmFsdWUpOwotICAgIHN3aXRjaCAoc2V0dGluZy52YWx1ZSgpKSB7Ci0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGVFbmFibGVkOgotICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92
ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlRW5hYmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBzd2l0Y2ggKHNldHRpbmcpIHsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5n
OjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkOgorICAgICAgICBtX2NsaWVudC0+
c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVy
UHJlZmVyZW5jZTo6QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZCwgdmFsdWUpOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpTZXR0aW5nOjpBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVk
UGFnZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJp
ZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQ
YWdlOjpTZXR0aW5nOjpBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVj
dGVkUGFnZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3Zl
cnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOgot
ICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5h
YmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5h
YmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldElDRUNhbmRpZGF0ZUZpbHRl
cmluZ0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklUUERlYnVn
TW9kZUVuYWJsZWQ6Ci0gICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3Zl
cnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpJVFBEZWJ1Z01vZGVF
bmFibGVkLCBvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9j
b2w6OlBhZ2U6OlNldHRpbmc6OklUUERlYnVnTW9kZUVuYWJsZWQ6CisgICAgICAgIG1fY2xpZW50
LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9w
ZXJQcmVmZXJlbmNlOjpJVFBEZWJ1Z01vZGVFbmFibGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Oklt
YWdlc0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJbWFnZXNFbmFi
bGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJbWFnZXNFbmFibGVkOgorICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0SW1hZ2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6U2V0dGluZzo6TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOgot
ICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNZWRpYUNhcHR1cmVSZXF1
aXJlc1NlY3VyZUNvbm5lY3Rpb246CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRN
ZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25JbnNwZWN0b3JPdmVycmlkZSh2YWx1
ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OlNldHRpbmc6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkSW5zcGVjdG9yT3Zl
cnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVm
ZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkLCBvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICBtX2NsaWVudC0+c2V0RGV2
ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVy
ZW5jZTo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgdmFsdWUpOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpOZWVk
c1NpdGVTcGVjaWZpY1F1aXJrczoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpOZWVkc1Np
dGVTcGVjaWZpY1F1aXJrczoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpT
Y3JpcHRFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2NyaXB0RW5h
YmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2NyaXB0RW5hYmxlZDoKKyAgICAgICAg
aW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNjcmlwdEVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2
YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlNldHRpbmc6OlNob3dEZWJ1Z0JvcmRlcnM6Ci0gICAgICAgIGluc3BlY3RlZFBh
Z2VTZXR0aW5ncy5zZXRTaG93RGVidWdCb3JkZXJzSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVW
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5n
OjpTaG93RGVidWdCb3JkZXJzOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hv
d0RlYnVnQm9yZGVyc0luc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd1Jl
cGFpbnRDb3VudGVyOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd1JlcGFp
bnRDb3VudGVySW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93UmVwYWludENvdW50ZXI6
CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93UmVwYWludENvdW50ZXJJbnNw
ZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlJUQ0VuY3J5cHRpb25FbmFibGVk
OgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJs
ZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlJUQ0VuY3J5cHRpb25FbmFibGVkOgor
ICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWRJ
bnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlNlY3VyaXR5RW5hYmxlZDoK
LSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlNlY3VyaXR5RW5hYmxlZEluc3Bl
Y3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQ
cm90b2NvbDo6UGFnZTo6U2V0dGluZzo6V2ViU2VjdXJpdHlFbmFibGVkOgorICAgICAgICBpbnNw
ZWN0ZWRQYWdlU2V0dGluZ3Muc2V0V2ViU2VjdXJpdHlFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUo
dmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeSBjb29raWVTYW1lU2l0ZVBvbGljeUpTT04oQ29v
a2llOjpTYW1lU2l0ZVBvbGljeSBwb2xpY3kpCitzdGF0aWMgUHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZVNhbWVTaXRlUG9saWN5IGNvb2tpZVNhbWVTaXRlUG9saWN5SlNPTihDb29raWU6OlNhbWVTaXRl
UG9saWN5IHBvbGljeSkKIHsKICAgICBzd2l0Y2ggKHBvbGljeSkgewogICAgIGNhc2UgQ29va2ll
OjpTYW1lU2l0ZVBvbGljeTo6Tm9uZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOwogICAgIGNhc2UgQ29va2ll
OjpTYW1lU2l0ZVBvbGljeTo6TGF4OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4OwogICAgIGNhc2UgQ29va2llOjpT
YW1lU2l0ZVBvbGljeTo6U3RyaWN0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0OwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU7CisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdl
OjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tp
ZSYgY29va2llKQorc3RhdGljIFJlZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVj
dEZvckNvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6Q29va2llOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6
UGFnZTo6Q29va2llOjpjcmVhdGUoKQogICAgICAgICAuc2V0TmFtZShjb29raWUubmFtZSkKICAg
ICAgICAgLnNldFZhbHVlKGNvb2tpZS52YWx1ZSkKICAgICAgICAgLnNldERvbWFpbihjb29raWUu
ZG9tYWluKQpAQCAtNTM4LDkgKzUyMiw5IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmCiAgICAg
ICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNl
dDxDb29raWU+JiBjb29raWVzTGlzdCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UGFnZTo6Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2ll
PiYgY29va2llc0xpc3QpCiB7Ci0gICAgYXV0byBjb29raWVzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvb2tp
ZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKIAog
ICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogY29va2llc0xpc3QpCiAgICAgICAgIGNvb2tp
ZXMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JDb29raWUoY29va2llKSk7CkBAIC01NjAsNyArNTQ0
LDcgQEAgc3RhdGljIFZlY3RvcjxVUkw+IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShGcmFtZSog
ZnJhbWUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiYgY29va2llcykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+Pj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRDb29raWVzKCkKIHsKICAgICBMaXN0SGFzaFNldDxDb29raWU+IGFsbFJh
d0Nvb2tpZXM7CiAKQEAgLTU3OSw3MiArNTYzLDg0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb29raWVzID0gYnVpbGRBcnJheUZvckNvb2tpZXMo
YWxsUmF3Q29va2llcyk7CisgICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JDb29raWVzKGFsbFJhd0Nv
b2tpZXMpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZU9iamVjdChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0
KQorc3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29raWVPYmplY3QoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWVPYmplY3Qp
CiB7CiAgICAgQ29va2llIGNvb2tpZTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmlu
ZygibmFtZSJfcywgY29va2llLm5hbWUpKSB7CisgICAgY29va2llLm5hbWUgPSBjb29raWVPYmpl
Y3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpuYW1lS2V5KTsKKyAgICBpZiAo
IWNvb2tpZS5uYW1lKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9y
IGtleSBuYW1lIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29v
a2llLnZhbHVlKSkgeworICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5n
KFByb3RvY29sOjpQYWdlOjpDb29raWU6OnZhbHVlS2V5KTsKKyAgICBpZiAoIWNvb2tpZS52YWx1
ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgdmFsdWUg
aW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAK
LSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoImRvbWFpbiJfcywgY29va2llLmRvbWFp
bikpIHsKKyAgICBjb29raWUuZG9tYWluID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZTo6ZG9tYWluS2V5KTsKKyAgICBpZiAoIWNvb2tpZS5kb21haW4pIHsK
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IGRvbWFpbiBpbiBn
aXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAg
IGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKSB7Cisg
ICAgY29va2llLnBhdGggPSBjb29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6
Q29va2llOjpwYXRoS2V5KTsKKyAgICBpZiAoIWNvb2tpZS5wYXRoKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBwYXRoIGluIGdpdmVuIGNvb2tpZSI7CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmpl
Y3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpIHsKKyAgICBhdXRv
IGh0dHBPbmx5ID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpDb29r
aWU6Omh0dHBPbmx5S2V5KTsKKyAgICBpZiAoIWh0dHBPbmx5KSB7CiAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBodHRwT25seSBpbiBnaXZlbiBjb29raWUiOwog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2Jq
ZWN0LmdldEJvb2xlYW4oInNlY3VyZSJfcywgY29va2llLnNlY3VyZSkpIHsKKyAgICBjb29raWUu
aHR0cE9ubHkgPSAqaHR0cE9ubHk7CisKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tpZU9iamVjdC0+
Z2V0Qm9vbGVhbihQcm90b2NvbDo6UGFnZTo6Q29va2llOjpzZWN1cmVLZXkpOworICAgIGlmICgh
c2VjdXJlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBz
ZWN1cmUgaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKLSAgICBib29sIHZhbGlkU2Vzc2lvbiA9IGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJz
ZXNzaW9uIl9zLCBjb29raWUuc2Vzc2lvbik7Ci0gICAgY29va2llLmV4cGlyZXMgPSBjb29raWVP
YmplY3QuZ2V0TnVtYmVyPGRvdWJsZT4oImV4cGlyZXMiX3MpOwotICAgIGlmICghdmFsaWRTZXNz
aW9uICYmICFjb29raWUuZXhwaXJlcykgeworICAgIGNvb2tpZS5zZWN1cmUgPSAqc2VjdXJlOwor
CisgICAgYXV0byBzZXNzaW9uID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQ
YWdlOjpDb29raWU6OnNlc3Npb25LZXkpOworICAgIGNvb2tpZS5leHBpcmVzID0gY29va2llT2Jq
ZWN0LT5nZXREb3VibGUoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6ZXhwaXJlc0tleSk7CisgICAg
aWYgKCFzZXNzaW9uICYmICFjb29raWUuZXhwaXJlcykgewogICAgICAgICBlcnJvclN0cmluZyA9
ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgZXhwaXJlcyBpbiBnaXZlbiBjb29raWUiOwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIFN0cmluZyBzYW1lU2l0ZVN0cmlu
ZzsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInNhbWVTaXRlIl9zLCBzYW1lU2l0
ZVN0cmluZykpIHsKKyAgICBjb29raWUuc2Vzc2lvbiA9ICpzZXNzaW9uOworCisgICAgYXV0byBz
YW1lU2l0ZVN0cmluZyA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpD
b29raWU6OnNhbWVTaXRlS2V5KTsKKyAgICBpZiAoIXNhbWVTaXRlU3RyaW5nKSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBzYW1lU2l0ZSBpbiBnaXZlbiBj
b29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGF1dG8g
c2FtZVNpdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNp
dGVQb2xpY3k+KHNhbWVTaXRlU3RyaW5nKTsKKyAgICBhdXRvIHNhbWVTaXRlID0gUHJvdG9jb2w6
OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UGFnZTo6Q29va2ll
U2FtZVNpdGVQb2xpY3k+KHNhbWVTaXRlU3RyaW5nKTsKICAgICBpZiAoIXNhbWVTaXRlKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBzYW1lU2l0ZSBpbiBn
aXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAg
IHN3aXRjaCAoc2FtZVNpdGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU6CisgICAgY2FzZSBQcm90b2NvbDo6
UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0
ZSA9IENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6Ok5vbmU7Ci0KICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4
OgorCisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDoK
ICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6TGF4Owot
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29v
a2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDoKKworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZVNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0ZSA9IENv
b2tpZTo6U2FtZVNpdGVQb2xpY3k6OlN0cmljdDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
NjUyLDExICs2NDgsMTMgQEAgc3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29raWVPYmpl
Y3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjoKICAgICByZXR1cm4gY29v
a2llOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvb2tpZShSZWY8
SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCkKIHsKLSAgICBhdXRvIGNvb2tpZSA9IHBhcnNl
Q29va2llT2JqZWN0KGVycm9yU3RyaW5nLCBjb29raWVPYmplY3QpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gY29va2llID0gcGFyc2VDb29raWVP
YmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUoY29va2llT2JqZWN0KSk7CiAgICAgaWYgKCFjb29r
aWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAogICAgIGZvciAoYXV0byogZnJhbWUgPSAmbV9pbnNwZWN0ZWRQYWdlLm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7CkBAIC02NjQs
OSArNjYyLDExIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb29raWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmCiAgICAgICAgICAgICAgICAgcGFn
ZS0+Y29va2llSmFyKCkuc2V0UmF3Q29va2llKCpkb2N1bWVudCwgY29va2llLnZhbHVlKCkpOwog
ICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUs
IGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFVSTCBwYXJzZWRVUkwoeyB9LCB1cmwpOwogICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewpAQCAtNjc1LDQ4ICs2NzUs
NTkgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY28KICAgICAgICAgICAgICAgICBwYWdlLT5jb29r
aWVKYXIoKS5kZWxldGVDb29raWUoKmRvY3VtZW50LCBwYXJzZWRVUkwsIGNvb2tpZU5hbWUpOwog
ICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4mIG9iamVjdCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlVHJlZSgpCiB7Ci0gICAgb2JqZWN0ID0gYnVpbGRP
YmplY3RGb3JGcmFtZVRyZWUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CisgICAgcmV0
dXJuIGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkp
OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcm
IHVybCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+
IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KGNvbnN0IFByb3RvY29sOjpO
ZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWUgPSBhc3Nl
cnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgcmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFtZSwgVVJMKHsgfSwgdXJsKSwgY29u
dGVudCwgYmFzZTY0RW5jb2RlZCk7CisgICAgU3RyaW5nIGNvbnRlbnQ7CisgICAgYm9vbCBiYXNl
NjRFbmNvZGVkOworCisgICAgcmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFtZSwgVVJM
KHsgfSwgdXJsKSwgJmNvbnRlbnQsICZiYXNlNjRFbmNvZGVkKTsKKworICAgIHJldHVybiB7IHsg
Y29udGVudCwgYmFzZTY0RW5jb2RlZCB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpzZXRCb290c3RyYXBTY3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50
OjpzZXRCb290c3RyYXBTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7Ci0gICAgbV9ib290
c3RyYXBTY3JpcHQgPSBvcHRpb25hbFNvdXJjZSA/ICpvcHRpb25hbFNvdXJjZSA6IG51bGxTdHJp
bmcoKTsKKyAgICBtX2Jvb3RzdHJhcFNjcmlwdCA9IHNvdXJjZTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxSZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IElu
c3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShjb25zdCBQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVl
cnksIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1Jl
Z2V4LCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCiB7Ci0g
ICAgcmVzdWx0cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5
cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKIAotICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRp
b25hbElzUmVnZXggOiBmYWxzZTsKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENh
c2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0KLSAgICBpZiAo
b3B0aW9uYWxSZXF1ZXN0SWQpIHsKKyAgICBpZiAoISFyZXF1ZXN0SWQpIHsKICAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTmV0d29y
a0FnZW50KCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoSW5SZXF1ZXN0KGVy
cm9yU3RyaW5nLCAqb3B0aW9uYWxSZXF1ZXN0SWQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4LCByZXN1bHRzKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gcmVzdWx0
OworICAgICAgICAgICAgbmV0d29ya0FnZW50LT5zZWFyY2hJblJlcXVlc3QoZXJyb3JTdHJpbmcs
IHJlcXVlc3RJZCwgcXVlcnksIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5zaXRpdmUsIGlzUmVn
ZXggJiYgKmlzUmVnZXgsIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgRnJhbWUqIGZyYW1lID0gYXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBhc3NlcnRE
b2N1bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOwogICAgIGlmICghbG9hZGVyKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBVUkwga3VybCh7IH0sIHVybCk7CiAKQEAgLTczNSwyOSArNzQ2LDI2IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nCiAgICAgfQogCiAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlw
ZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7CiAKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJj
aFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSwgaXNSZWdleCk7CisgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJj
aEluVGV4dEJ5TGluZXMoY29udGVudCwgcXVlcnksIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5z
aXRpdmUsIGlzUmVnZXggJiYgKmlzUmVnZXgpOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3Vu
dCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RG
b3JTZWFyY2hSZXN1bHQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQogewotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCisgICAgcmV0dXJu
IFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwo
dXJsKQogICAgICAgICAuc2V0RnJhbWVJZChmcmFtZUlkKQogICAgICAgICAuc2V0TWF0Y2hlc0Nv
dW50KG1hdGNoZXNDb3VudCkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsSXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2VhcmNoUmVzdWx0Pj4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+Pj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbmFs
PGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAg
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNo
UmVzdWx0Pjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUoKTsKIAotICAgIGJvb2wgY2FzZVNlbnNp
dGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBm
YWxzZTsKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1Jl
Z2V4IDogZmFsc2U7Ci0KLSAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSBpc1JlZ2V4ID8gQ29u
dGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6UmVnZXggOiBDb250ZW50U2Vh
cmNoVXRpbGl0aWVzOjpTZWFyY2hTdHJpbmdUeXBlOjpDb250YWluc1N0cmluZzsKLSAgICBhdXRv
IHJlZ2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlUmVndWxhckV4cHJlc3Npb25G
b3JTZWFyY2hTdHJpbmcodGV4dCwgY2FzZVNlbnNpdGl2ZSwgc2VhcmNoU3RyaW5nVHlwZSk7Cisg
ICAgYXV0byBzZWFyY2hTdHJpbmdUeXBlID0gKGlzUmVnZXggJiYgKmlzUmVnZXgpID8gQ29udGVu
dFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6UmVnZXggOiBDb250ZW50U2VhcmNo
VXRpbGl0aWVzOjpTZWFyY2hTdHJpbmdUeXBlOjpDb250YWluc1N0cmluZzsKKyAgICBhdXRvIHJl
Z2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlUmVndWxhckV4cHJlc3Npb25Gb3JT
ZWFyY2hTdHJpbmcodGV4dCwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgc2VhcmNo
U3RyaW5nVHlwZSk7CiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2Uu
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKICAgICAgICAgZm9yIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0Zv
ckZyYW1lKGZyYW1lKSkgewpAQCAtNzcxLDI0ICs3NzksMzAgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb24KIAogICAgIGlmIChhdXRvKiBuZXR3b3JrQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZE5ldHdvcmtBZ2VudCgpKQogICAgICAgICBuZXR3b3JrQWdlbnQtPnNlYXJjaE90
aGVyUmVxdWVzdHMocmVnZXgsIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hv
d1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wgc2hvd1J1bGVycykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hvd1J1bGVycyhib29sIHNob3dS
dWxlcnMpCiB7CiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0
U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3cpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKGJvb2wg
c2hvdykKIHsKICAgICBtX3Nob3dQYWludFJlY3RzID0gc2hvdzsKICAgICBtX2NsaWVudC0+c2V0
U2hvd1BhaW50UmVjdHMoc2hvdyk7CiAKICAgICBpZiAobV9jbGllbnQtPm92ZXJyaWRlc1Nob3dQ
YWludFJlY3RzKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IG1fb3ZlcmxheS0+c2V0U2hvd1BhaW50UmVjdHMoc2hvdyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQpAQCAt
ODE2LDcgKzgzMCw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZy
YW1lJiBmcmFtZSkKICAgICBtX2lkZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpZGVudGlmaWVyKTsK
IH0KIAotRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVGb3JJZChjb25zdCBTdHJpbmcm
IGZyYW1lSWQpCitGcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUZvcklkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAgIHJldHVybiBmcmFtZUlk
LmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX2lkZW50aWZpZXJUb0ZyYW1lLmdldChmcmFtZUlkKTsK
IH0KQEAgLTg0MSw3ICs4NTUsNyBAQCBTdHJpbmcgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkZXJJ
ZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAot
RnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitGcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50
Ojphc3NlcnRGcmFtZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBQ
cm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBmcmFtZUZvcklkKGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCkBAIC04NzcsNyArODkxLDcg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRp
b24oRnJhbWUmIGZyYW1lKQogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKQogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlZmF1bHRBcHBlYXJh
bmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7Ci0gICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlID8g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6RGFyayA6IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBQcm90
b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6RGFyayA6IFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNl
OjpMaWdodCk7CiB9CiAjZW5kaWYKIApAQCAtOTMzLDExICs5NDcsMTEgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQogICAgIG1fb3ZlcmxheS0+dXBkYXRl
KCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9y
UGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1JlZjxQcm90b2Nv
bDo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShG
cmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUX0FSRyhmcmFtZSwgZnJhbWUpOwogCi0gICAgYXV0
byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUo
KQorICAgIGF1dG8gZnJhbWVPYmplY3QgPSBQcm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgp
CiAgICAgICAgIC5zZXRJZChmcmFtZUlkKGZyYW1lKSkKICAgICAgICAgLnNldExvYWRlcklkKGxv
YWRlcklkKGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKSkKICAgICAgICAgLnNldFVy
bChmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpCkBAIC05NTYsMTkgKzk3MCwxOSBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcgogICAgIHJldHVybiBmcmFtZU9iamVjdDsKIH0KIAot
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKK1JlZjxQ
cm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVp
bGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVF9BUkcoZnJh
bWUsIGZyYW1lKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4g
ZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKLSAgICBhdXRvIHN1YnJl
c291cmNlcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVS
ZXNvdXJjZT46OmNyZWF0ZSgpOwotICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpQ
YWdlOjpGcmFtZT4gZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKKyAg
ICBhdXRvIHN1YnJlc291cmNlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
UmVzb3VyY2U+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldEZyYW1lKFdURk1vdmUoZnJh
bWVPYmplY3QpKQogICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcy5jb3B5UmVmKCkp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNlIDog
Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGF1dG8gcmVzb3VyY2VP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUo
KQorICAgICAgICBhdXRvIHJlc291cmNlT2JqZWN0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVz
b3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwo
KS5zdHJpbmcoKSkKICAgICAgICAgICAgIC5zZXRUeXBlKGNhY2hlZFJlc291cmNlVHlwZUpTT04o
KmNhY2hlZFJlc291cmNlKSkKICAgICAgICAgICAgIC5zZXRNaW1lVHlwZShjYWNoZWRSZXNvdXJj
ZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKQpAQCAtOTg2LDIxICsxMDAwLDIxIEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpidWlsZE9iamVjCiAgICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShXVEZNb3ZlKHJl
c291cmNlT2JqZWN0KSk7CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5Owor
ICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJl
ZT4+IGNoaWxkcmVuQXJyYXk7CiAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgp
LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmICghY2hpbGRyZW5BcnJheSkgewotICAgICAgICAgICAgY2hpbGRyZW5B
cnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0Q2hpbGRGcmFtZXMo
Y2hpbGRyZW5BcnJheSk7CisgICAgICAgICAgICBjaGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0Q2hpbGRGcmFtZXMoKmNoaWxkcmVuQXJyYXkpOwogICAgICAgICB9CiAg
ICAgICAgIGNoaWxkcmVuQXJyYXktPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoY2hp
bGQpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlh
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRF
bXVsYXRlZE1lZGlhKGNvbnN0IFN0cmluZyYgbWVkaWEpCiB7CiAgICAgaWYgKG1lZGlhID09IG1f
ZW11bGF0ZWRNZWRpYSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgbV9lbXVsYXRlZE1lZGlhID0gbWVkaWE7CiAKQEAgLTEwMDksMjEgKzEwMjMsMzQgQEAgdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG1lZGlhKQogCiAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOwogICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGRvY3VtZW50LT51cGRh
dGVMYXlvdXQoKTsKICAgICBkb2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRD
aGFuZ2VzKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKERBUktfTU9ERV9D
U1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi12b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFy
YW5jZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
c2V0Rm9yY2VkQXBwZWFyYW5jZShPcHRpb25hbDxQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZT4m
JiBhcHBlYXJhbmNlKQogewotICAgIGlmIChhcHBlYXJhbmNlID09ICJMaWdodCJfcykKLSAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOwot
ICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gIkRhcmsiX3MpCi0gICAgICAgIG1faW5zcGVjdGVk
UGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKHRydWUpOwotICAgIGVsc2UKKyAgICBp
ZiAoIWFwcGVhcmFuY2UpIHsKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBl
YXJhbmNlT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBzd2l0Y2ggKCphcHBlYXJhbmNlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6
QXBwZWFyYW5jZTo6TGlnaHQ6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBw
ZWFyYW5jZU92ZXJyaWRlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2Ug
UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcms6CisgICAgICAgIG1faW5zcGVjdGVkUGFn
ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKHRydWUpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9
CiAjZW5kaWYKIApAQCAtMTAzOSw1MSArMTA2Niw0NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YXBwbHlFbXVsYXRlZE1lZGlhKFN0cmluZyYgbWVkaWEpCiAgICAgICAgIG1lZGlhID0gbV9l
bXVsYXRlZE1lZGlhOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJM
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNu
YXBzaG90Tm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICBB
U1NFUlQoZG9tQWdlbnQpOwogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3QgPSBXZWJDb3JlOjpzbmFwc2hvdE5vZGUobV9p
bnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCAqbm9kZSk7Ci0gICAgaWYgKCFzbmFwc2hvdCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNuYXBzaG90KQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zKTsKIAotICAgICpv
dXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxv
cHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICByZXR1cm4gc25hcHNob3QtPnRvRGF0
YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25z
dCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3Qo
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFByb3RvY29sOjpQYWdlOjpDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCiB7CiAgICAgU25hcHNob3RPcHRpb25zIG9w
dGlvbnMgPSBTbmFwc2hvdE9wdGlvbnNOb25lOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
ICJWaWV3cG9ydCIpCisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gUHJvdG9jb2w6OlBhZ2U6
OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXdwb3J0KQogICAgICAgICBvcHRpb25zIHw9IFNuYXBzaG90
T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOwogCiAgICAgSW50UmVjdCByZWN0YW5nbGUoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hv
dCA9IHNuYXBzaG90RnJhbWVSZWN0KG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSwgcmVjdGFu
Z2xlLCBvcHRpb25zKTsKIAotICAgIGlmICghc25hcHNob3QpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiQ291bGQgbm90IGNhcHR1cmUgc25hcHNob3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFzbmFwc2hvdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJD
b3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfcyk7CiAKLSAgICAqb3V0RGF0YVVSTCA9IHNuYXBz
aG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CisgICAgcmV0dXJuIHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJf
cywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiB9CiAKICNpZiBFTkFC
TEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcmNo
aXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoKQogewogICAg
IGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2Uu
bWFpbkZyYW1lKCkpOwotICAgIGlmICghYXJjaGl2ZSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghYXJjaGl2ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9z
KTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFS
ZXByZXNlbnRhdGlvbigpOwotICAgICpkYXRhID0gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQ
dHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFH
ZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggM2JjZDA0
ODdjZmM4NzY2YmFhMDFjNzgwNDE3M2ExNTc0N2I0N2IyZC4uZDJiMDY1ZTEzNjUxZmFmZTc0NzMy
NWYwMmU3NzAxZmJmMWU4ZTQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC01MSwxNCArNTEsMTIgQEAgY2xhc3Mg
UGFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudCBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlBhZ2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclBh
Z2VBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yUGFnZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNw
ZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3RvclBhZ2VBZ2VudCgpIG92ZXJyaWRlOworICAg
IH5JbnNwZWN0b3JQYWdlQWdlbnQoKTsKIAogICAgIGVudW0gUmVzb3VyY2VUeXBlIHsKICAgICAg
ICAgRG9jdW1lbnRSZXNvdXJjZSwKQEAgLTc5LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIGJvb2wgc2hhcmVkQnVmZmVyQ29udGVudChSZWZQdHI8U2hhcmVkQnVmZmVyPiYmLCBjb25z
dCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5n
KiByZXN1bHQpOwogICAgIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNv
dXJjZXNGb3JGcmFtZShGcmFtZSopOwotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlQ29udGVudChF
cnJvclN0cmluZyYsIEZyYW1lKiwgY29uc3QgVVJMJiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJh
c2U2NEVuY29kZWQpOworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlQ29udGVudChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEZyYW1lKiwgY29uc3QgVVJMJiwgU3RyaW5nKiByZXN1
bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAgIHN0YXRpYyBTdHJpbmcgc291cmNlTWFwVVJM
Rm9yUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlKEZyYW1lKiwgY29uc3QgVVJMJik7CiAgICAgc3RhdGljIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVKU09OKFJlc291cmNl
VHlwZSk7CkBAIC04NywzOSArODUsMzkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZXNvdXJjZVR5
cGUgaW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNlJik7CiAgICAgc3Rh
dGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBjYWNoZWRSZXNvdXJj
ZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJik7CiAgICAgc3RhdGljIEZyYW1lKiBmaW5k
RnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oUGFnZSYsIGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3Ry
aW5nKTsKLSAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEVy
cm9yU3RyaW5nJiwgRnJhbWUqKTsKKyAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERv
Y3VtZW50TG9hZGVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRnJhbWUqKTsK
IAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gUGFnZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25hbFJlbG9hZEZyb21Pcmln
aW4sIGNvbnN0IGJvb2wqIG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJlc291cmNlcykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVy
cmlkZTsKLSAgICB2b2lkIG92ZXJyaWRlVXNlckFnZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nKiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvdmVycmlkZVNldHRpbmcoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHNldHRpbmcsIGNvbnN0IGJvb2wqIHZhbHVlKSBvdmVycmlkZTsK
LSAgICB2b2lkIGdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiYgY29va2llcykgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tp
ZU9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4mKSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzZXRCb290c3RyYXBTY3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcqIG9wdGlvbmFsU291cmNlKSBmaW5hbDsKLSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2Uo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVz
OjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNv
bnN0IGJvb2wqIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbG9hZChPcHRpb25hbDxib29sPiYmIGlnbm9yZUNh
Y2hlLCBPcHRpb25hbDxib29sPiYmIHJldmFsaWRhdGVBbGxSZXNvdXJjZXMpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbmF2aWdhdGUoY29uc3QgU3RyaW5n
JiB1cmwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gb3Zl
cnJpZGVVc2VyQWdlbnQoY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBvdmVycmlkZVNldHRpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2V0dGluZywgT3B0aW9uYWw8Ym9vbD4mJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpDb29raWU+Pj4gZ2V0Q29va2llcygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Q29va2llKFJlZjxKU09OOjpPYmplY3Q+JiYpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGVsZXRlQ29va2ll
KGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gZ2V0UmVzb3VyY2VUcmVlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgYm9vbCAvKiBiYXNl
NjRFbmNvZGVkICovPj4gZ2V0UmVzb3VyY2VDb250ZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRCb290c3RyYXBTY3JpcHQoY29uc3Qg
U3RyaW5nJiBzb3VyY2UpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFy
Y2hNYXRjaD4+PiBzZWFyY2hJblJlc291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
T3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4+IHNlYXJjaEluUmVzb3VyY2VzKGNv
bnN0IFN0cmluZyYsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9v
bD4mJiBpc1JlZ2V4KTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNldFNo
b3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3dSdWxlcnMoYm9vbCk7CiAjZW5kaWYK
LSAgICB2b2lkIHNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFNob3dQYWludFJlY3RzKGJvb2wpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0RW11bGF0ZWRNZWRpYShjb25zdCBTdHJpbmcmKTsKICNpZiBF
TkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2
b2lkIHNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEZv
cmNlZEFwcGVhcmFuY2UoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFy
YW5jZT4mJik7CiAjZW5kaWYKLSAgICB2b2lkIHNuYXBzaG90Tm9kZShFcnJvclN0cmluZyYsIGlu
dCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzbmFwc2hv
dFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Y29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBzbmFw
c2hvdE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBzbmFwc2hvdFJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b3JkaW5hdGVTeXN0ZW0pOwogI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQotICAg
IHZvaWQgYXJjaGl2ZShFcnJvclN0cmluZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGFyY2hpdmUoKTsKICNl
bmRpZgogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCkBAIC0xNDMsMTAgKzE0MSwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRTY3JvbGwoKTsKICAgICB2b2lkIGRpZFJlY2FsY3Vs
YXRlU3R5bGUoKTsKIAotICAgIEZyYW1lKiBmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCk7CisgICAgRnJhbWUqIGZyYW1lRm9ySWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6RnJhbWVJZCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmcmFtZUlkKEZyYW1l
Kik7CiAgICAgU3RyaW5nIGxvYWRlcklkKERvY3VtZW50TG9hZGVyKik7Ci0gICAgRnJhbWUqIGFz
c2VydEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFt
ZSogYXNzZXJ0RnJhbWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKIHByaXZhdGU6CiAgICAg
ZG91YmxlIHRpbWVzdGFtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggMGI0NjYwNjhkOTBm
ZTE0OTVhODQyOWI3NjM5ZjMxMzViZDQzM2Y0OC4uMGRmOTUwNTcwM2QwYjM4MTgxMTI1ZTUzMDFl
MjA0MTEyN2ZjM2I1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC0xMDIsODAgKzEwMiw4MiBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dAogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7Cisg
ICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjplbmFibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZFRpbWVsaW5lQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlRpbWVsaW5lIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxp
bmVBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGltZWxp
bmUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuc2V0RW5hYmxlZFRpbWVsaW5lQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
VGltZWxpbmVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxp
bmUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2VudCgpICE9IHRo
aXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGltZWxpbmUgZG9tYWluIGFscmVh
ZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRU
aW1lbGluZUFnZW50KG51bGxwdHIpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBz
dG9wKGlnbm9yZWQpOworICAgIHN0b3AoKTsKIAogICAgIG1fYXV0b0NhcHR1cmVFbmFibGVkID0g
ZmFsc2U7CiAgICAgbV9pbnN0cnVtZW50cy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydChFcnJvclN0cmluZyYsIGNvbnN0
IGludCogbWF4Q2FsbFN0YWNrRGVwdGgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNr
RGVwdGgpCiB7CiAgICAgbV90cmFja2luZ0Zyb21Gcm9udGVuZCA9IHRydWU7CiAKLSAgICBpbnRl
cm5hbFN0YXJ0KG1heENhbGxTdGFja0RlcHRoKTsKKyAgICBpbnRlcm5hbFN0YXJ0KFdURk1vdmUo
bWF4Q2FsbFN0YWNrRGVwdGgpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c3RvcChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKCkKIHsKICAgICBpbnRlcm5h
bFN0b3AoKTsKIAogICAgIG1fdHJhY2tpbmdGcm9tRnJvbnRlbmQgPSBmYWxzZTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0QXV0b0NhcHR1
cmVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0QXV0b0NhcHR1cmVFbmFibGVk
KGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2F1dG9DYXB0dXJlRW5hYmxlZCA9IGVuYWJsZWQ7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldElu
c3RydW1lbnRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIGlu
c3RydW1lbnRzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6c2V0SW5zdHJ1bWVudHMoUmVmPEpTT046OkFycmF5PiYmIGluc3RydW1lbnRzKQog
ewogICAgIFZlY3RvcjxQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ+IG5ld0luc3RydW1l
bnRzOwotICAgIG5ld0luc3RydW1lbnRzLnJlc2VydmVDYXBhY2l0eShpbnN0cnVtZW50cy5sZW5n
dGgoKSk7CisgICAgbmV3SW5zdHJ1bWVudHMucmVzZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLT5s
ZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydW1lbnRWYWx1ZSA6IGluc3Ry
dW1lbnRzKSB7Ci0gICAgICAgIFN0cmluZyBlbnVtVmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICgh
aW5zdHJ1bWVudFZhbHVlLT5hc1N0cmluZyhlbnVtVmFsdWVTdHJpbmcpKSB7Ci0gICAgICAgICAg
ICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1zdHJpbmcgdmFsdWUgaW4gZ2l2ZW4gaW5z
dHJ1bWVudHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGluc3RydW1lbnRWYWx1ZSA6IGluc3RydW1lbnRzLmdldCgpKSB7CisgICAgICAg
IGF1dG8gaW5zdHJ1bWVudFN0cmluZyA9IGluc3RydW1lbnRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICAgICAgaWYgKCFpbnN0cnVtZW50U3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1zdHJpbmcgdmFsdWUgaW4gZ2l2ZW4gaW5zdHJ1bWVudHMi
X3MpOwogCi0gICAgICAgIE9wdGlvbmFsPFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudD4g
aW5zdHJ1bWVudFR5cGUgPSBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudD4oZW51bVZhbHVlU3Ry
aW5nKTsKLSAgICAgICAgaWYgKCFpbnN0cnVtZW50VHlwZSkgewotICAgICAgICAgICAgZXJyb3JT
dHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGl0ZW0gaW4gZ2l2ZW4gaW5zdHJ1bWVudHM6ICIs
IGVudW1WYWx1ZVN0cmluZyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAg
ICAgYXV0byBpbnN0cnVtZW50ID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ+KGluc3RydW1lbnRTdHJpbmcp
OworICAgICAgICBpZiAoIWluc3RydW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQobWFrZVN0cmluZygiVW5rbm93biBpbnN0cnVtZW50OiAiLCBpbnN0cnVtZW50U3RyaW5n
KSk7CiAKLSAgICAgICAgbmV3SW5zdHJ1bWVudHMudW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50
VHlwZSk7CisgICAgICAgIG5ld0luc3RydW1lbnRzLnVuY2hlY2tlZEFwcGVuZCgqaW5zdHJ1bWVu
dCk7CiAgICAgfQogCiAgICAgbV9pbnN0cnVtZW50cy5zd2FwKG5ld0luc3RydW1lbnRzKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJu
YWxTdGFydChjb25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRoKQordm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0
aCkKIHsKICAgICBpZiAobV90cmFja2luZykKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDggKzI5
NCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBTCiAgICAgLy8gQWxsb3cgZHVwbGljYXRlIHVu
bmFtZWQgcHJvZmlsZXMuIERpc2FsbG93IGR1cGxpY2F0ZSBuYW1lZCBwcm9maWxlcy4KICAgICBp
ZiAoIXRpdGxlLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGNvbnN0IFRpbWVsaW5lUmVjb3Jk
RW50cnkmIHJlY29yZCA6IG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3JkcykgewotICAgICAg
ICAgICAgU3RyaW5nIHJlY29yZFRpdGxlOwotICAgICAgICAgICAgcmVjb3JkLmRhdGEtPmdldFN0
cmluZygidGl0bGUiX3MsIHJlY29yZFRpdGxlKTsKKyAgICAgICAgICAgIGF1dG8gcmVjb3JkVGl0
bGUgPSByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcyk7CiAgICAgICAgICAgICBpZiAo
cmVjb3JkVGl0bGUgPT0gdGl0bGUpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogY29uc29s
ZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTZW5kIGFuIGVudW0gdG8gdGhlIGZyb250ZW5kIGZv
ciBsb2NhbGl6YXRpb24/CkBAIC0zMTgsOCArMzE5LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmlu
ZyYKICAgICBmb3IgKGludCBpID0gbV9wZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkm
IHJlY29yZCA9IG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkc1tpXTsKIAotICAgICAgICBT
dHJpbmcgcmVjb3JkVGl0bGU7Ci0gICAgICAgIHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxl
Il9zLCByZWNvcmRUaXRsZSk7CisgICAgICAgIGF1dG8gcmVjb3JkVGl0bGUgPSByZWNvcmQuZGF0
YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcyk7CiAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkgfHwg
cmVjb3JkVGl0bGUgPT0gdGl0bGUpIHsKICAgICAgICAgICAgIGRpZENvbXBsZXRlUmVjb3JkRW50
cnkocmVjb3JkKTsKICAgICAgICAgICAgIG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5y
ZW1vdmUoaSk7CkBAIC00OTYsMTAgKzQ5Niw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6bWFpbkZyYW1lU3RhcnRlZExvYWRpbmcoKQogICAgIG1fYXV0b0NhcHR1cmVQaGFzZSA9IEF1
dG9DYXB0dXJlUGhhc2U6OkJlZm9yZUxvYWQ7CiAKICAgICAvLyBQcmUtZW1wdGl2ZWx5IGRpc2Fi
bGUgYnJlYWtwb2ludHMuIFRoZSBmcm9udGVuZCBtdXN0IHJlLWVuYWJsZSB0aGVtLgotICAgIGlm
IChhdXRvKiB3ZWJEZWJ1Z2dlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRX
ZWJEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAg
ICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2Up
OwotICAgIH0KKyAgICBpZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpKQorICAgICAgICB3ZWJEZWJ1Z2dlckFn
ZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAKICAgICAvLyBJbmZvcm0gdGhlIGZy
b250ZW5kIHdlIHN0YXJ0ZWQgYW4gYXV0byBjYXB0dXJlLiBUaGUgZnJvbnRlbmQgbXVzdCBzdG9w
IGNhcHR1cmUuCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmF1dG9DYXB0dXJlU3RhcnRlZCgp
OwpAQCAtNTIzLDEwICs1MjEsOCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0
UHJvZ3JhbW1hdGljQ2FwdHVyZSgpCiAgICAgLy8gRGlzYWJsZSBicmVha3BvaW50cyBkdXJpbmcg
cHJvZ3JhbW1hdGljIGNhcHR1cmUuCiAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewogICAgICAg
ICBtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlID0gd2Vi
RGVidWdnZXJBZ2VudC0+YnJlYWtwb2ludHNBY3RpdmUoKTsKLSAgICAgICAgaWYgKG1fcHJvZ3Jh
bW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpIHsKLSAgICAgICAgICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRC
cmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpCisgICAg
ICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50
QWN0aXZlVmFsdWUgPSBmYWxzZTsKIApAQCAtNTQ2LDEwICs1NDIsOCBAQCB2b2lkIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OnN0b3BQcm9ncmFtbWF0aWNDYXB0dXJlKCkKIAogICAgIC8vIFJlLWVu
YWJsZSBicmVha3BvaW50cyBpZiB0aGV5IHdlcmUgZW5hYmxlZC4KICAgICBpZiAobV9wcm9ncmFt
bWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSkgewotICAgICAgICBpZiAo
YXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2Vi
RGVidWdnZXJBZ2VudCgpKSB7Ci0gICAgICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAg
ICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwg
dHJ1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAg
ICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKHRydWUpOwogICAgIH0K
IH0KIApAQCAtNTU3LDI2ICs1NTEsMjYgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0
b2dnbGVJbnN0cnVtZW50cyhJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgZm9yIChhdXRv
IGluc3RydW1lbnRUeXBlIDogbV9pbnN0cnVtZW50cykgewogICAgICAgICBzd2l0Y2ggKGluc3Ry
dW1lbnRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6
Okluc3RydW1lbnQ6OlNjcmlwdFByb2ZpbGVyOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRp
bWVsaW5lOjpJbnN0cnVtZW50OjpTY3JpcHRQcm9maWxlcjogewogICAgICAgICAgICAgdG9nZ2xl
U2NyaXB0UHJvZmlsZXJJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3Ry
dW1lbnQ6OkhlYXA6IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1l
bnQ6OkhlYXA6IHsKICAgICAgICAgICAgIHRvZ2dsZUhlYXBJbnN0cnVtZW50KHN0YXRlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkNQVTogeworICAgICAgICBjYXNlIFByb3RvY29s
OjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6Q1BVOiB7CiAgICAgICAgICAgICB0b2dnbGVDUFVJbnN0
cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6Ok1lbW9yeTogewor
ICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CiAg
ICAgICAgICAgICB0b2dnbGVNZW1vcnlJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6Okluc3RydW1lbnQ6OlRpbWVsaW5lOgorICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGlu
ZTo6SW5zdHJ1bWVudDo6VGltZWxpbmU6CiAgICAgICAgICAgICB0b2dnbGVUaW1lbGluZUluc3Ry
dW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkFuaW1hdGlvbjoKKyAgICAgICAgY2Fz
ZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkFuaW1hdGlvbjoKICAgICAgICAgICAg
IHRvZ2dsZUFuaW1hdGlvbkluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTU4NiwyNCArNTgwLDIxIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6dG9nZ2xlSW5zdHJ1bWVudHMoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVTY3JpcHRQcm9maWxlckluc3RydW1lbnQoSW5zdHJ1bWVu
dFN0YXRlIHN0YXRlKQogewogICAgIGlmIChhdXRvKiBzY3JpcHRQcm9maWxlckFnZW50ID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRTY3JpcHRQcm9maWxlckFnZW50KCkpIHsKLSAg
ICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1l
bnRTdGF0ZTo6U3RhcnQpIHsKLSAgICAgICAgICAgIGNvbnN0IGJvb2wgaW5jbHVkZVNhbXBsZXMg
PSB0cnVlOwotICAgICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhp
Z25vcmVkLCAmaW5jbHVkZVNhbXBsZXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNj
cmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgaWYgKHN0
YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCisgICAgICAgICAgICBzY3JpcHRQcm9maWxl
ckFnZW50LT5zdGFydFRyYWNraW5nKHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
Y3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlSGVhcEluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRl
IHN0YXRlKQogewogICAgIGlmIChhdXRvKiBoZWFwQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFBhZ2VIZWFwQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVk
OwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkgewogICAgICAg
ICAgICAgaWYgKG1fYXV0b0NhcHR1cmVQaGFzZSA9PSBBdXRvQ2FwdHVyZVBoYXNlOjpOb25lIHx8
IG1fYXV0b0NhcHR1cmVQaGFzZSA9PSBBdXRvQ2FwdHVyZVBoYXNlOjpGaXJzdE5hdmlnYXRpb24p
Ci0gICAgICAgICAgICAgICAgaGVhcEFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAg
ICAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RhcnRUcmFja2luZygpOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAg
ICAgaGVhcEFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKQEAgLTYxMSwxMSArNjAy
LDEwIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlQ1BVSW5zdHJ1bWVudChJ
bnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAg
IGlmIChhdXRvKiBjcHVQcm9maWxlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRDUFVQcm9maWxlckFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsK
ICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAg
ICBjcHVQcm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAg
Y3B1UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZygpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjcHVQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAg
ICBjcHVQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC02MjYsMTEgKzYxNiwxMCBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnRvZ2dsZU1lbW9yeUluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRl
KQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBpZiAoYXV0byogbWVtb3J5QWdl
bnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudE1lbW9yeUFnZW50KCkpIHsKLSAg
ICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1l
bnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RhcnRUcmFja2luZyhp
Z25vcmVkKTsKKyAgICAgICAgICAgIG1lbW9yeUFnZW50LT5zdGFydFRyYWNraW5nKCk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1lbW9yeUFnZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7
CisgICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNjQwLDcgKzYyOSw3IEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlTWVtb3J5SW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUg
c3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVRpbWVsaW5lSW5zdHJ1
bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKHN0YXRlID09IEluc3RydW1l
bnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgIGludGVybmFsU3RhcnQoKTsKKyAgICAgICAgaW50ZXJu
YWxTdGFydChXVEY6Om51bGxvcHQpOwogICAgIGVsc2UKICAgICAgICAgaW50ZXJuYWxTdG9wKCk7
CiB9CkBAIC02NDgsMTEgKzYzNywxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRv
Z2dsZVRpbWVsaW5lSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUFuaW1hdGlvbkluc3RydW1lbnQoSW5zdHJ1bWVudFN0
YXRlIHN0YXRlKQogewogICAgIGlmIChhdXRvKiBhbmltYXRpb25BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50QW5pbWF0aW9uQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFy
dCkKLSAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOwor
ICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAg
ICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKQEAg
LTY5MSw3MSArNjc5LDcxIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YnJlYWtwb2lu
dEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHCiAgICAgYXBwZW5kUmVj
b3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGFjdGlvbklE
LCBzYW1wbGVJZCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGUsIGZhbHNlLCBmcmFt
ZUZyb21FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZSB0b1Byb3RvY29sKFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlIHRvUHJv
dG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkV2ZW50RGlzcGF0Y2g6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpFdmVudERpc3BhdGNo
OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkV2ZW50RGlz
cGF0Y2g7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1
bGF0aW9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb247CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb247CiAg
ICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlY2FsY3VsYXRlU3R5bGVzOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVjYWxjdWxh
dGVTdHlsZXM7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6
UmVjYWxjdWxhdGVTdHlsZXM7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkludmFsaWRh
dGVMYXlvdXQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6
RXZlbnRUeXBlOjpJbnZhbGlkYXRlTGF5b3V0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OkludmFsaWRhdGVMYXlvdXQ7CiAgICAgY2FzZSBUaW1lbGluZVJl
Y29yZFR5cGU6OkxheW91dDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OkxheW91dDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1l
bGluZTo6RXZlbnRUeXBlOjpMYXlvdXQ7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlBh
aW50OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6UGFpbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlw
ZTo6UGFpbnQ7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkNvbXBvc2l0ZToKLSAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBv
c2l0ZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDb21w
b3NpdGU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlbmRlcmluZ0ZyYW1lOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVu
ZGVyaW5nRnJhbWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlw
ZTo6UmVuZGVyaW5nRnJhbWU7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJJ
bnN0YWxsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6VGltZXJJbnN0YWxsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OlRpbWVySW5zdGFsbDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
VGltZXJSZW1vdmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlOjpUaW1lclJlbW92ZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1l
bGluZTo6RXZlbnRUeXBlOjpUaW1lclJlbW92ZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6VGltZXJGaXJlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6OkV2ZW50VHlwZTo6VGltZXJGaXJlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OlRpbWVyRmlyZTsKIAogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBl
OjpFdmFsdWF0ZVNjcmlwdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OkV2YWx1YXRlU2NyaXB0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkV2YWx1YXRlU2NyaXB0OwogCiAgICAgY2FzZSBUaW1l
bGluZVJlY29yZFR5cGU6OlRpbWVTdGFtcDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7CiAgICAgY2FzZSBUaW1lbGlu
ZVJlY29yZFR5cGU6OlRpbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OlRpbWU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVF
bmQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpUaW1lRW5kOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5
cGU6OlRpbWVFbmQ7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RnVuY3Rpb25DYWxs
OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlw
ZTo6RnVuY3Rpb25DYWxsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OkZ1bmN0aW9uQ2FsbDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVT
YW1wbGU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZl
bnRUeXBlOjpQcm9iZVNhbXBsZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6
RXZlbnRUeXBlOjpQcm9iZVNhbXBsZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6Q29u
c29sZVByb2ZpbGU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlOjpDb25zb2xlUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpDb25zb2xlUHJvZmlsZTsKIAogICAgIGNhc2UgVGltZWxpbmVS
ZWNvcmRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVxdWVzdEFu
aW1hdGlvbkZyYW1lOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDYW5jZWxBbmltYXRp
b25GcmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOwogICAgIGNhc2UgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RmlyZUFuaW1h
dGlvbkZyYW1lOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6Ok9ic2VydmVyQ2FsbGJh
Y2s6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpPYnNlcnZlckNhbGxiYWNrOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKKyAgICByZXR1
cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3ZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShSZWY8SlNPTjo6T2JqZWN0PiYmIHJl
Y29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUX0FSRyhyZWNvcmQs
IHJlY29yZCk7Ci0gICAgcmVjb3JkLT5zZXRTdHJpbmcoInR5cGUiLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5
cGUpKSk7CisgICAgcmVjb3JkLT5zZXRTdHJpbmcoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50Ojp0eXBlS2V5LCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dG9Qcm90b2NvbCh0eXBlKSkpOwogCiAgICAgaWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGF1dG8gcmVjb3JkT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVj
b3JkKSk7CisgICAgICAgIC8vIEZJWE1FOiBydW50aW1lQ2FzdCBpcyBhIGhhY2suIFdlIGRvIGl0
IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQgVGltZWxpbmVFdmVudCBkaXJlY3RseSBub3cuCisgICAg
ICAgIGF1dG8gcmVjb3JkT2JqZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsK
ICAgICAgICAgc2VuZEV2ZW50KFdURk1vdmUocmVjb3JkT2JqZWN0KSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcGFyZW50ID0gbV9yZWNvcmRTdGFj
ay5sYXN0KCk7CkBAIC03ODEsOCArNzY5LDkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpzZXRGcmFtZUlkZW50aWZpZXIoSlNPTjo6T2JqZWN0KiByZWNvcmQsIEZyYW1lKiBmcmEKIAog
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0
IFRpbWVsaW5lUmVjb3JkRW50cnkmIGVudHJ5KQogewotICAgIGVudHJ5LnJlY29yZC0+c2V0T2Jq
ZWN0KCJkYXRhIl9zLCBlbnRyeS5kYXRhKTsKLSAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KCJj
aGlsZHJlbiJfcywgZW50cnkuY2hpbGRyZW4pOworICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0
KFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6ZGF0YUtleSwgZW50cnkuZGF0YS5j
b3B5UmVmKCkpOworICAgIGlmIChlbnRyeS5jaGlsZHJlbikKKyAgICAgICAgZW50cnkucmVjb3Jk
LT5zZXRBcnJheShQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OmNoaWxkcmVuS2V5
LCAqZW50cnkuY2hpbGRyZW4pOwogICAgIGVudHJ5LnJlY29yZC0+c2V0RG91YmxlKCJlbmRUaW1l
Il9zLCB0aW1lc3RhbXAoKSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShlbnRyeS5yZWNvcmQu
Y29weVJlZigpLCBlbnRyeS50eXBlKTsKIH0KQEAgLTgwNCwyOSArNzkzLDI5IEBAIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojph
cHBlbmRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5
cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKIHsKICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sg
PyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7Ci0gICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEi
LCBXVEZNb3ZlKGRhdGEpKTsKKyAgICByZWNvcmQtPnNldE9iamVjdChQcm90b2NvbDo6VGltZWxp
bmU6OlRpbWVsaW5lRXZlbnQ6OmRhdGFLZXksIFdURk1vdmUoZGF0YSkpOwogICAgIHNldEZyYW1l
SWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGlu
ZShXVEZNb3ZlKHJlY29yZCksIHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnNlbmRFdmVudChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGV2ZW50KQordm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVmPEpTT046Ok9iamVjdD4mJiBldmVudCkKIHsK
ICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdl
IGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkgbm93LgotICAgIGF1dG8gcmVjb3Jk
Q2hlY2tlZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRp
bWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChXVEZNb3ZlKGV2ZW50KSk7CisgICAgYXV0byByZWNv
cmRDaGVja2VkID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRpbWVsaW5lOjpU
aW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShldmVudCkpOwogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKFdURk1vdmUocmVjb3JkQ2hlY2tlZCkpOwogfQog
Ci1JbnNwZWN0b3JUaW1lbGluZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0
YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUq
IGZyYW1lKQorSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYm
IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZy
YW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxs
U3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVy
KCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsKICAgICByZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShX
VEZNb3ZlKHJlY29yZCksIFdURk1vdmUoZGF0YSksIEpTT046OkFycmF5OjpjcmVhdGUoKSwgdHlw
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQo
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9v
bCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxp
bmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQog
ewogICAgIHB1c2hDdXJyZW50UmVjb3JkKGNyZWF0ZVJlY29yZEVudHJ5KFdURk1vdmUoZGF0YSks
IHR5cGUsIGNhcHR1cmVDYWxsU3RhY2ssIGZyYW1lKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4
IGFlNzU3OWExNWYwNTcyYjUyZjlhYWUxYWZiZWUwOTJmYjgyNGM4MTkuLmZlNzVlNDBiNDM0Zjg1
ZDk3M2FlZGJiNDI5N2E5NGJhZTE4ZmJiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC01MCw4ICs1
MCw2IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUnVuTG9vcE9i
c2VydmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogZW51bSBjbGFzcyBUaW1l
bGluZVJlY29yZFR5cGUgewogICAgIEV2ZW50RGlzcGF0Y2gsCiAgICAgU2NoZWR1bGVTdHlsZVJl
Y2FsY3VsYXRpb24sCkBAIC04OCwyMiArODYsMjIgQEAgY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UgLCBwdWJsaWMgSW5zcGVjdG8K
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JUaW1l
bGluZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciop
IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFRpbWVsaW5lQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0
KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpIG92
ZXJyaWRlOwotICAgIHZvaWQgc3RvcChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0QXV0b0NhcHR1cmVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRJbnN0cnVtZW50cyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5Jikgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFi
bGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2Fi
bGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0YXJ0
KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoYm9vbCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnN0cnVtZW50cyhS
ZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAg
ICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpC
cmVha3BvaW50QWN0aW9uSUQsIHVuc2lnbmVkIGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBK
U0M6OkpTVmFsdWUgcmVzdWx0KSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9i
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpCcmVha3BvaW50QWN0aW9uSUQsIHVuc2lnbmVk
IGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBKU0M6OkpTVmFsdWUgcmVzdWx0KTsKIAogICAg
IC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkSW5zdGFsbFRpbWVyKGlu
dCB0aW1lcklkLCBTZWNvbmRzIHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCwgRnJhbWUqKTsKQEAg
LTE2MCw5ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBUaW1lbGluZVJlY29y
ZFN0YWNrOwogCiAgICAgc3RydWN0IFRpbWVsaW5lUmVjb3JkRW50cnkgewotICAgICAgICBUaW1l
bGluZVJlY29yZEVudHJ5KCkKLSAgICAgICAgICAgIDogdHlwZShUaW1lbGluZVJlY29yZFR5cGU6
OkV2ZW50RGlzcGF0Y2gpIHsgfQotICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcmVjb3JkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFJlZlB0
cjxKU09OOjpBcnJheT4mJiBjaGlsZHJlbiwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCisgICAg
ICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoUmVmPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFJlZjxK
U09OOjpPYmplY3Q+JiYgZGF0YSwgUmVmUHRyPEpTT046OkFycmF5PiYmIGNoaWxkcmVuLCBUaW1l
bGluZVJlY29yZFR5cGUgdHlwZSkKICAgICAgICAgICAgIDogcmVjb3JkKFdURk1vdmUocmVjb3Jk
KSkKICAgICAgICAgICAgICwgZGF0YShXVEZNb3ZlKGRhdGEpKQogICAgICAgICAgICAgLCBjaGls
ZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKQEAgLTE3MCwyOSArMTY2LDI5IEBAIHByaXZhdGU6CiAg
ICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY29y
ZDsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZGF0YTsKKyAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVjb3JkOworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBkYXRhOwogICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNoaWxkcmVuOwogICAgICAgICBUaW1lbGluZVJlY29yZFR5
cGUgdHlwZTsKICAgICB9OwogCi0gICAgdm9pZCBpbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4
Q2FsbFN0YWNrRGVwdGggPSBudWxscHRyKTsKKyAgICB2b2lkIGludGVybmFsU3RhcnQoT3B0aW9u
YWw8aW50PiYmIG1heENhbGxTdGFja0RlcHRoKTsKICAgICB2b2lkIGludGVybmFsU3RvcCgpOwog
ICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKIAotICAgIHZvaWQgc2VuZEV2ZW50KFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpOwotICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1l
Kik7Ci0gICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmLCBU
aW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICB2
b2lkIHNlbmRFdmVudChSZWY8SlNPTjo6T2JqZWN0PiYmKTsKKyAgICB2b2lkIGFwcGVuZFJlY29y
ZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmPEpT
T046Ok9iamVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ss
IEZyYW1lKik7CiAgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChjb25zdCBUaW1lbGluZVJlY29y
ZEVudHJ5JiByZWNvcmQpIHsgbV9yZWNvcmRTdGFjay5hcHBlbmQocmVjb3JkKTsgfQogCi0gICAg
VGltZWxpbmVSZWNvcmRFbnRyeSBjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFt
ZSopOworICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50cnkoUmVmPEpTT046
Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFj
aywgRnJhbWUqKTsKIAogICAgIHZvaWQgc2V0RnJhbWVJZGVudGlmaWVyKEpTT046Ok9iamVjdCog
cmVjb3JkLCBGcmFtZSopOwogCiAgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0
IFRpbWVsaW5lUmVjb3JkRW50cnkmKTsKICAgICB2b2lkIGRpZENvbXBsZXRlQ3VycmVudFJlY29y
ZChUaW1lbGluZVJlY29yZFR5cGUpOwogCi0gICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSk7CisgICAgdm9pZCBhZGRS
ZWNvcmRUb1RpbWVsaW5lKFJlZjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSk7
CiAKICAgICB2b2lkIGxvY2FsVG9QYWdlUXVhZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBM
YXlvdXRSZWN0JiwgRmxvYXRRdWFkKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggOTA5YzQ2NmY4
N2U5YmZhOGM0YzE3MjhjNDZhZDZlN2U1OTA3YjQ2ZS4uMzNjYWEwYWEyMDc5YWQ0MDgxY2MyOTYw
NWE1MzUzN2MyNGQ2NmJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTUzLDU1ICs1Myw1NiBAQCB2
b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChE
aXNjb25uZWN0UmVhc29uKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0
ZW50V29ya2VyQWdlbnQobnVsbHB0cik7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAg
IGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVk
ID0gdHJ1ZTsKIAogICAgIGNvbm5lY3RUb0FsbFdvcmtlckluc3BlY3RvclByb3hpZXNGb3JQYWdl
KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvcldvcmtlckFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7
CiAKICAgICBkaXNjb25uZWN0RnJvbUFsbFdvcmtlckluc3BlY3RvclByb3hpZXMoKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVk
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50Ojppbml0aWFsaXpl
ZChjb25zdCBTdHJpbmcmIHdvcmtlcklkKQogewogICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBw
cm94eSA9IG1fY29ubmVjdGVkUHJveGllcy5nZXQod29ya2VySWQpOwotICAgIGlmICghcHJveHkp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtl
cklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcHJveHkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklk
Il9zKTsKIAogICAgIHByb3h5LT5yZXN1bWVXb3JrZXJJZlBhdXNlZCgpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtl
cihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
cldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKGNvbnN0IFN0cmluZyYgd29ya2VySWQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBpZiAoIW1fZW5hYmxlZCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJXb3JrZXIgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJXb3JrZXIgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBX
b3JrZXJJbnNwZWN0b3JQcm94eSogcHJveHkgPSBtX2Nvbm5lY3RlZFByb3hpZXMuZ2V0KHdvcmtl
cklkKTsKLSAgICBpZiAoIXByb3h5KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcg
d29ya2VyIGZvciBnaXZlbiB3b3JrZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgd29y
a2VyIGZvciBnaXZlbiB3b3JrZXJJZCJfcyk7CiAKICAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb1dv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIobWVzc2FnZSk7CisKKyAgICByZXR1cm4geyB9OwogfQog
CiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250
ZW5kKFdvcmtlckluc3BlY3RvclByb3h5JiBwcm94eSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oCmluZGV4IDE3ZDFiZWFlOTAxMGYzMjAwMWFjNjRkZDlkODkyYTkzZjEwYTdkNTYu
LjYzNmJjODFkZDVhNTBhZWUwNTNjMmUwNGU2ODY5OWQzZmE2YjY0ZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgK
QEAgLTM1LDI3ICszNSwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Oldv
cmtlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIFdvcmtlckluc3BlY3RvclByb3h5
OjpQYWdlQ2hhbm5lbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yV29ya2Vy
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3Bl
Y3RvcldvcmtlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yV29ya2Vy
QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yV29ya2VyQWdlbnQoKTsKIAogICAgIC8v
IEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gV29ya2VyQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRp
YWxpemVkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3
b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW5pdGlhbGl6ZWQoY29uc3QgU3RyaW5nJiB3
b3JrZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZW5kTWVzc2FnZVRvV29ya2VyKGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7CiAKICAgICAvLyBXb3JrZXJJbnNwZWN0b3JQcm94eTo6UGFnZUNoYW5uZWwKLSAg
ICB2b2lkIHNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJv
eHkmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgc2VuZE1lc3Nh
Z2VGcm9tV29ya2VyVG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICBib29s
IHNob3VsZFdhaXRGb3JEZWJ1Z2dlck9uU3RhcnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCmluZGV4IGY3ZDgyNzgwNzBm
ZTQ3MDI5OWYyZGQ2YmFiNjY0NjJkNTg1ODg5MDUuLjBiOGYyMGVhYzM0M2I2NjgxN2FjOWYwZjBj
NmM4Y2IyMGM5YmFjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvV2ViQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9XZWJDb25zb2xlQWdlbnQuaApAQCAtMzMsNyArMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXZWJDb25zb2xl
QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvbnNvbGVBZ2VudCk7CkBAIC00Niw4ICs0NSw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZyYW1lV2luZG93RGlzY2FyZGVkKERPTVdpbmRvdyopOwogICAgIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVk
IGxvbmcgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQotcHJvdGVj
dGVkOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYjkzYTgxZmJm
NGY1MDY0NjZhZGIzZTEzYmJlODhjYzUzOTIzNWI3ZS4uMWM2MTM1N2FmZGNlMzUwYWUyM2FiYzIw
N2YyMjcwNGM5NGViZjRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCkBAIC00OSwxOCArNDksMTggQEAgYm9vbCBXZWJE
ZWJ1Z2dlckFnZW50OjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkgPT0gdGhpcyAmJiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjplbmFibGVkKCk7CiB9CiAKLXZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxl
KCkKK3ZvaWQgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkV2ViRGVidWdnZXJBZ2VudCh0aGlzKTsKIAotICAg
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpOworICAgIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmludGVybmFsRW5hYmxlKCk7CiB9CiAKLXZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlz
YWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShpc0JlaW5nRGVzdHJveWVkKTsKKyAgICBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CiB9CiAK
IHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYg
dGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3Rl
bmVyLCBib29sIGNhcHR1cmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvV2ViRGVidWdnZXJBZ2VudC5oCmluZGV4IDEwYjk2NDg4ODFhYTAxNTY0ZmNiZTcyZTc0ZmZi
YWM3OTY4NDU3NjIuLmE5MjM3MWRhNWQyM2FhMDVlZGI2ODk4NzU5ZWE0MTFlZTc1YTY5OGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2Vu
dC5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgSW5zdHJ1bWVu
dGluZ0FnZW50czsKIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogY2xhc3MgVGltZXJC
YXNlOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFdlYkRlYnVnZ2VyQWdl
bnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShXZWJEZWJ1Z2dlckFnZW50KTsKQEAgLTU2LDggKzU1LDggQEAgcHVi
bGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViRGVidWdnZXJBZ2VudChXZWJBZ2VudENvbnRleHQm
KTsKLSAgICB2b2lkIGVuYWJsZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShib29sIGlz
QmVpbmdEZXN0cm95ZWQpIG92ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxFbmFibGUoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBkaWRDbGVhckFzeW5jU3RhY2tUcmFjZURhdGEoKSBmaW5hbDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3Bw
CmluZGV4IDVhYTc0NTNkMDk1NjA3NjI3OGViMDMwZjgwOGRkZjAxNGRhYmZiODUuLjkyNzVlOGY3
OWQwMGZlMWExMTgyMWVkOGE4NjljMGUxN2I0MDgwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogc3RydWN0IEdh
cmJhZ2VDb2xsZWN0aW9uRGF0YSB7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2Fy
YmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZTsKKyAgICBQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNv
bGxlY3Rpb246OlR5cGUgdHlwZTsKICAgICBTZWNvbmRzIHN0YXJ0VGltZTsKICAgICBTZWNvbmRz
IGVuZFRpbWU7CiB9OwpAQCAtMTAzLDI1ICsxMDMsMjcgQEAgV2ViSGVhcEFnZW50OjpXZWJIZWFw
QWdlbnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBXZWJIZWFwQWdlbnQ6On5XZWJIZWFw
QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgV2ViSGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFn
ZW50OjplbmFibGUoKQogewotICAgIEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKGVycm9yU3Ry
aW5nKTsKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKCk7CiAK
ICAgICBpZiAoYXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNv
bnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnNldEhlYXBBZ2VudCh0aGlzKTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViSGVhcEFnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdl
YkhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9zZW5kR2FyYmFnZUNvbGxlY3Rpb25FdmVu
dHNUYXNrLT5yZXNldCgpOwogCiAgICAgaWYgKGF1dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1
bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5z
ZXRIZWFwQWdlbnQobnVsbHB0cik7CiAKLSAgICBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUo
ZXJyb3JTdHJpbmcpOworICAgIHJldHVybiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoKTsK
IH0KIAotdm9pZCBXZWJIZWFwQWdlbnQ6OmRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGUsIFNl
Y29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpCit2b2lkIFdlYkhlYXBBZ2VudDo6ZGlz
cGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0
aW9uOjpUeXBlIHR5cGUsIFNlY29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpCiB7CiAg
ICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50IGFzeW5jaHJvbm91c2x5IGJlY2F1c2UgdGhpcyBtZXRo
b2QgbWF5IGJlCiAgICAgLy8gY2FsbGVkIGJldHdlZW4gY29sbGVjdGlvbiBhbmQgc3dlZXBpbmcg
YW5kIHdlIGRvbid0IHdhbnQgdG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvV2ViSGVhcEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L1dlYkhlYXBBZ2VudC5oCmluZGV4IDBiYzhlNjRhZjVhODZhNzJkNWY4MDQ0MGZkYjExNjNmZTE3
ZTE1NzMuLmEzNWU1N2NjN2E3MWY4YWY0MTM4NjM3ODdjZWYzNmJlZTQxNmY2YmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaApAQCAtMzMsNyAr
MzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlbmRHYXJiYWdlQ29sbGVjdGlv
bkV2ZW50c1Rhc2s7CiBzdHJ1Y3QgR2FyYmFnZUNvbGxlY3Rpb25EYXRhOwotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFdlYkhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvckhlYXBBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViSGVhcEFn
ZW50KTsKQEAgLTQ0LDggKzQzLDggQEAgcHVibGljOgogICAgIH5XZWJIZWFwQWdlbnQoKSBvdmVy
cmlkZTsKIAogICAgIC8vIEhlYXBCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGRp
c3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkhlYXA6Okdh
cmJhZ2VDb2xsZWN0aW9uOjpUeXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1l
KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlQXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUF1ZGl0QWdlbnQuY3BwCmluZGV4IGRkZDUzYmE1ZGZiY2E1NTM3YmJiNmI3YmUwNjUw
NTdkNzJmYmFiZDguLjlhY2ZlNGRkNGIxNjBlZTliMzg5MTBjYzljNzVhMjQxMjRjZWZlZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VB
dWRpdEFnZW50LmNwcApAQCAtNTYsNyArNTYsNyBAQCBQYWdlQXVkaXRBZ2VudDo6UGFnZUF1ZGl0
QWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKIAogUGFnZUF1ZGl0QWdlbnQ6On5QYWdl
QXVkaXRBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0lu
amVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkKICAgICAgICAgcmV0dXJuIGlu
amVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9ySWQoKmV4ZWN1dGlvbkNvbnRl
eHRJZCk7CkBAIC02NSw5ICs2NSw5IEBAIEluamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0CiAgICAgcmV0
dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRl
KTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9y
RXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZh
bChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6
UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChl
eGVjdXRpb25Db250ZXh0SWQpOworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewogICAgICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dElkKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBz
Y3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmgKaW5kZXggZGRl
YzQ2NTE3ZTFhMDVjYmY1YmY4ZmZkN2QxYWM4ODhhMDg5NGY3OS4uNjkzZmFjMzI3NDY5YTkwNDRk
ODcwMTc2ZmFhMmExZDQ5ZmJhMWIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmgKQEAgLTM3LDE2ICszNywxNiBAQCBj
bGFzcyBQYWdlQXVkaXRBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckF1
ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBh
Z2VBdWRpdEFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZUF1ZGl0QWdlbnQoKSBv
dmVycmlkZTsKKyAgICB+UGFnZUF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCk7Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdEZvckV2YWwoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9u
Q29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpF
eGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYm
KTsKIAotICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2
b2lkIHBvcHVsYXRlQXVkaXRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+JiBhdWRpdE9iamVjdCk7CiAKLSAgICB2b2lkIG11dGVDb25zb2xlKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBt
dXRlQ29uc29sZSgpOworICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpOwogCiAgICAgUGFnZSYgbV9p
bnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcAppbmRleCAxM2ZkMWQ3ZGFiYWE5OWQw
YmIwYzQ5ZmY3YmI1ZTUyZjU0YzY2M2QzLi4xMjEyYjg2NmQ5ZTI4OTk2NzdhOTNmZDcxNmMxZTg2
OGQzYzFmZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwCkBAIC01NCw3OSArNTQsODMgQEAgUGFnZUNv
bnNvbGVBZ2VudDo6UGFnZUNvbnNvbGVBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQog
CiBQYWdlQ29uc29sZUFnZW50Ojp+UGFnZUNvbnNvbGVBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9p
ZCBQYWdlQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFy
TWVzc2FnZXMoKQogewogICAgIGlmIChhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPnJlbGVhc2VEYW5n
bGluZ05vZGVzKCk7CiAKLSAgICBXZWJDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoZXJyb3JT
dHJpbmcpOworICAgIHJldHVybiBXZWJDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKTsKIH0K
IAotdm9pZCBQYWdlQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcm
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPj4mIGNoYW5uZWxzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gUGFnZUNvbnNvbGVBZ2VudDo6Z2V0TG9n
Z2luZ0NoYW5uZWxzKCkKIHsKLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0IENoYW5uZWxUYWJsZSB7
Ci0gICAgICAgIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbmFtZTsKLSAgICAgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSBzb3VyY2U7Ci0gICAgfSBjaGFubmVs
VGFibGVbXSA9IHsKLSAgICAgICAgeyBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViUlRDIiks
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OldlYlJUQyB9LAot
ICAgICAgICB7IE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNZWRpYSIpLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYSB9LAotICAgICAgICB7IE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJNZWRpYVNvdXJjZSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYVNvdXJjZSB9LAotICAgIH07CisgICAgYXV0byBj
aGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVh
dGUoKTsKIAotICAgIGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsPjo6Y3JlYXRlKCk7Ci0KLSAgICBzaXplX3QgbGVuZ3RoID0gV1RG
X0FSUkFZX0xFTkdUSChjaGFubmVsVGFibGUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byogbG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwo
Y2hhbm5lbFRhYmxlW2ldLm5hbWUpOworICAgIGF1dG8gYWRkTG9nQ2hhbm5lbCA9IFsmXSAoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ugc291cmNlKSB7CisgICAgICAgIGF1dG8qIGxv
Z0NoYW5uZWwgPSBnZXRMb2dDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShzb3VyY2UpKTsKICAgICAgICAgaWYgKCFsb2dDaGFubmVsKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGF1dG8gbGV2ZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25z
b2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjsKKyAgICAgICAgYXV0byBsZXZlbCA9IFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjsKICAgICAgICAgaWYgKGxvZ0NoYW5uZWwtPnN0YXRl
ICE9IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T2ZmKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxvZ0No
YW5uZWwtPmxldmVsKSB7CiAgICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpBbHdheXM6CiAg
ICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpFcnJvcjoKICAgICAgICAgICAgIGNhc2UgV1RG
TG9nTGV2ZWw6Oldhcm5pbmc6CiAgICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpJbmZvOgot
ICAgICAgICAgICAgICAgIGxldmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbExldmVsOjpCYXNpYzsKKyAgICAgICAgICAgICAgICBsZXZlbCA9IFByb3RvY29sOjpDb25z
b2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOwogICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpEZWJ1ZzoKLSAgICAgICAgICAgICAgICBsZXZlbCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKKyAg
ICAgICAgICAgICAgICBsZXZlbCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZl
cmJvc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBhdXRvIGNoYW5uZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFNvdXJjZShjaGFubmVsVGFibGVbaV0u
c291cmNlKQorICAgICAgICBhdXRvIGNoYW5uZWwgPSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRTb3VyY2Uoc291cmNlKQogICAgICAgICAgICAg
LnNldExldmVsKGxldmVsKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgY2hhbm5l
bHMtPmFkZEl0ZW0oV1RGTW92ZShjaGFubmVsKSk7Ci0gICAgfQorICAgIH07CisgICAgYWRkTG9n
Q2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6WE1MKTsKKyAgICBhZGRM
b2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpKYXZhU2NyaXB0KTsK
KyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpOZXR3
b3JrKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNl
OjpDb25zb2xlQVBJKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsU291cmNlOjpTdG9yYWdlKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xl
OjpDaGFubmVsU291cmNlOjpBcHBjYWNoZSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6
Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6UmVuZGVyaW5nKTsKKyAgICBhZGRMb2dDaGFubmVsKFBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpDU1MpOworICAgIGFkZExvZ0NoYW5uZWwo
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlNlY3VyaXR5KTsKKyAgICBhZGRMb2dD
aGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpDb250ZW50QmxvY2tlcik7
CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVk
aWEpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6
Ok1lZGlhU291cmNlKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsU291cmNlOjpXZWJSVEMpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OklUUERlYnVnKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlOjpBZENsaWNrQXR0cmlidXRpb24pOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok90aGVyKTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGNoYW5uZWxzKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxX
VEZMb2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVsPj4gY2hhbm5lbENvbmZpZ3VyYXRpb25Gb3JT
dHJpbmcoY29uc3QgU3RyaW5nJiBsZXZlbFN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IFBhZ2VDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJvdG9jb2w6
OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ugc291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bExldmVsIGxldmVsKQogewotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3Ry
aW5nLCAib2ZmIikpCi0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYs
IFdURkxvZ0xldmVsOjpFcnJvciB9IH07CisgICAgc3dpdGNoIChsZXZlbCkgeworICAgIGNhc2Ug
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOgorICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0NoYW5uZWxTdGF0ZTo6T2ZmLCBXVEZMb2dMZXZl
bDo6RXJyb3IpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UobGV2ZWxTdHJpbmcsICJiYXNpYyIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxv
Z0NoYW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpJbmZvIH0gfTsKKyAgICBjYXNlIFByb3Rv
Y29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOgorICAgICAgICBtX2luc3BlY3RlZFBh
Z2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0NoYW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpJ
bmZvKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGxldmVsU3RyaW5nLCAidmVyYm9zZSIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxvZ0No
YW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpEZWJ1ZyB9IH07Ci0KLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVs
TGV2ZWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW1l
LCBjb25zdCBTdHJpbmcmIGNoYW5uZWxMZXZlbCkKLXsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBjaGFubmVsQ29uZmlndXJhdGlvbkZvclN0cmluZyhjaGFubmVsTGV2ZWwpOwotICAgIGlmICgh
Y29uZmlndXJhdGlvbikgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25v
d24gY2hhbm5lbExldmVsOiAiX3MsIGNoYW5uZWxMZXZlbCk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZlcmJvc2U6CisgICAgICAg
IG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5lbChQcm90b2NvbDo6SGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwg
V1RGTG9nTGV2ZWw6OkRlYnVnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBt
X2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoY2hhbm5lbE5hbWUsIGNvbmZp
Z3VyYXRpb24udmFsdWUoKS5maXJzdCwgY29uZmlndXJhdGlvbi52YWx1ZSgpLnNlY29uZCk7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmgKaW5kZXggNGM0NWYyZGFkMGY3YzFiNDA0NTM5ZmU0
ZjU3ZTVhODZkYjIwNjMxOC4uNDFmZTc2ZDAzMjA3MGUwZDQxMDNlNDBhMmMxNDRjZTM3OTgxYzgz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VD
b25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZUNvbnNvbGVBZ2VudC5oCkBAIC00MSwxMiArNDEsMTIgQEAgY2xhc3MgUGFnZUNvbnNvbGVB
Z2VudCBmaW5hbCA6IHB1YmxpYyBXZWJDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VDb25zb2xlQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5QYWdlQ29uc29sZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VDb25zb2xl
QWdlbnQoKTsKIAogICAgIC8vIENvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIGNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldExv
Z2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwg
Y29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVhck1lc3NhZ2VzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsPj4+IGdldExvZ2dpbmdDaGFubmVscygpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChJ
bnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwpOwogCiBwcml2YXRlOgogICAgIEluc3RydW1l
bnRpbmdBZ2VudHMmIG1faW5zdHJ1bWVudGluZ0FnZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQu
Y3BwCmluZGV4IDdjNWZmYTRlMzgzZjUyY2FiNWUyYTI3ZmQ5MTU5MDlmYmNlZjUxNGMuLmM4OGJi
ZGMwM2QyNTQxMGZiNjk1OGIwZjA5YWZjNWJmMTg4ZGIyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFn
ZW50LmNwcApAQCAtNjksODQgKzY5LDc0IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmRp
c2FibGUoKQogICAgIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAot
dm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZywgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUg
dHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBO
b2RlKiBub2RlID0gZG9tQWdlbnQtPmFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlPih0eXBlU3RyaW5nKTsKLSAg
ICBpZiAoIXR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3du
IHR5cGU6ICJfcywgdHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9p
bnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJl
YWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21Q
YXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9p
bnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01C
cmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9tU3VidHJl
ZU1vZGlmaWVkQnJlYWtwb2ludHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwo
KSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2Rl
IGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUg
YW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2lu
dFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9k
b21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRzLmFkZChub2RlLCBicmVha3BvaW50LnJlbGVh
c2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBn
aXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRP
TUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgogICAgICAgICBpZiAoIW1fZG9t
Tm9kZVJlbW92ZWRCcmVha3BvaW50cy5hZGQobm9kZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVs
bCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5v
ZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9k
ZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9CiAKLXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6
OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBQYWdlRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
IHR5cGUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50
KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9t
YWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9k
ZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1dG8g
dHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU+KHR5cGVTdHJpbmcpOwotICAgIGlmICghdHlwZSkgewotICAgICAgICBlcnJvclN0
cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1v
ZGlmaWVkOgorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1f
ZG9tU3VidHJlZU1vZGlmaWVkQnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBt
aXNzaW5nIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJf
cyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6CisgICAg
Y2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVN
b2RpZmllZDoKICAgICAgICAgaWYgKCFtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMu
cmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5v
ZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlw
ZTo6Tm9kZVJlbW92ZWQ6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKICAgICAgICAgaWYgKCFtX2RvbU5vZGVSZW1vdmVkQnJl
YWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtw
b2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9y
IGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfcyk7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9CiAKIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdl
bnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCkBAIC0yMTMsNyArMjAzLDcgQEAgdm9pZCBQYWdlRE9N
RGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50KQogCiAgICAgQVNT
RVJUKGNsb3Nlc3RCcmVha3BvaW50T3duZXIpOwogCi0gICAgYXV0byBwYXVzZURhdGEgPSBidWls
ZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQsICpjbG9zZXN0QnJlYWtwb2lu
dE93bmVyKTsKKyAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtw
b2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9k
aWZpZWQsICpjbG9zZXN0QnJlYWtwb2ludE93bmVyKTsKICAgICBwYXVzZURhdGEtPnNldEJvb2xl
YW4oImluc2VydGlvbiIsIHRydWUpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVu
dGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50
IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCiAgICAgLy8gSW5jbHVkZSB0aGUgbmV3IGNoaWxk
IG5vZGUgSUQgc28gdGhlIGZyb250ZW5kIGNhbiBzaG93IHRoZSBub2RlIHRoYXQncyBhYm91dCB0
byBiZSBpbnNlcnRlZC4KQEAgLTIzMCw3ICsyMjAsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFn
ZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogCiAgICAgT3B0aW9uYWw8c2l6ZV90
PiBjbG9zZXN0RGlzdGFuY2U7CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gY2xvc2VzdEJy
ZWFrcG9pbnQ7Ci0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlPiBjbG9zZXN0QnJlYWtwb2ludFR5cGU7CisgICAgT3B0aW9uYWw8
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4gY2xvc2VzdEJyZWFrcG9p
bnRUeXBlOwogICAgIE5vZGUqIGNsb3Nlc3RCcmVha3BvaW50T3duZXIgPSBudWxscHRyOwogCiAg
ICAgZm9yIChhdXRvIFticmVha3BvaW50T3duZXIsIGJyZWFrcG9pbnRdIDogbV9kb21Ob2RlUmVt
b3ZlZEJyZWFrcG9pbnRzKSB7CkBAIC0yNDEsNyArMjMxLDcgQEAgdm9pZCBQYWdlRE9NRGVidWdn
ZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKCFjbG9z
ZXN0RGlzdGFuY2UgfHwgZGlzdGFuY2UgPCBjbG9zZXN0RGlzdGFuY2UpIHsKICAgICAgICAgICAg
IGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9p
bnQgPSBicmVha3BvaW50LmNvcHlSZWYoKTsKLSAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50
VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlw
ZTo6Tm9kZVJlbW92ZWQ7CisgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludFR5cGUgPSBQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDsKICAgICAg
ICAgICAgIGNsb3Nlc3RCcmVha3BvaW50T3duZXIgPSBicmVha3BvaW50T3duZXI7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNTUsNyArMjQ1LDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6
d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghY2xvc2VzdERp
c3RhbmNlIHx8IGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAg
Y2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7CiAgICAgICAgICAgICAgICAgY2xvc2VzdEJyZWFr
cG9pbnQgPSBicmVha3BvaW50LmNvcHlSZWYoKTsKLSAgICAgICAgICAgICAgICBjbG9zZXN0QnJl
YWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtw
b2ludFR5cGUgPSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0
cmVlTW9kaWZpZWQ7CiAgICAgICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRPd25lciA9IGJy
ZWFrcG9pbnRPd25lcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjk2LDcgKzI4Niw3
IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQm
IGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fZG9tQXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBh
dXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7CisgICAgYXV0
byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQp
OwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3Rvcjo6RGVidWdnZXJG
cm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEZNb3ZlKHBhdXNlRGF0YSksIGl0LT52
YWx1ZS5jb3B5UmVmKCkpOwogfQogCkBAIC0zMzMsMjcgKzMyMywyOCBAQCB2b2lkIFBhZ2VET01E
ZWJ1Z2dlckFnZW50Ojp3aWxsSW52YWxpZGF0ZVN0eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQog
ICAgIGlmIChpdCA9PSBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGF1c2VEYXRhID0gYnVpbGRQYXVzZURhdGFGb3JE
T01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3Bv
aW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQpOworICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkLCBlbGVtZW50KTsKICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3I6OkRlYnVnZ2VyRnJvbnRlbmREaXNw
YXRjaGVyOjpSZWFzb246OkRPTSwgV1RGTW92ZShwYXVzZURhdGEpLCBpdC0+dmFsdWUuY29weVJl
ZigpKTsKIH0KIAotdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4mJiBicmVha3BvaW50KQorYm9vbCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9u
RnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0
cjxKU0M6OkJyZWFrcG9pbnQ+JiYgYnJlYWtwb2ludCkKIHsKICAgICBpZiAoIW1fcGF1c2VPbkFs
bEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQgPT0gIWJyZWFrcG9pbnQpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSBtX3BhdXNlT25BbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50ID8gIkJyZWFr
cG9pbnQgZm9yIEFuaW1hdGlvbkZyYW1lIGFscmVhZHkgZXhpc3RzIl9zIDogIkJyZWFrcG9pbnQg
Zm9yIEFuaW1hdGlvbkZyYW1lIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG1fcGF1c2VPbkFsbEFuaW1hdGlvbkZyYW1lc0Jy
ZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgIHJldHVybiB0cnVlOwogfQogCi1S
ZWY8SlNPTjo6T2JqZWN0PiBQYWdlRE9NRGVidWdnZXJBZ2VudDo6YnVpbGRQYXVzZURhdGFGb3JE
T01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3Bv
aW50VHlwZSBicmVha3BvaW50VHlwZSwgTm9kZSYgYnJlYWtwb2ludE93bmVyKQorUmVmPEpTT046
Ok9iamVjdD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtw
b2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRU
eXBlLCBOb2RlJiBicmVha3BvaW50T3duZXIpCiB7CiAgICAgQVNTRVJUKG1fZGVidWdnZXJBZ2Vu
dC0+YnJlYWtwb2ludHNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKG1fZG9tU3VidHJlZU1vZGlmaWVk
QnJlYWtwb2ludHMuY29udGFpbnMoJmJyZWFrcG9pbnRPd25lcikgfHwgbV9kb21BdHRyaWJ1dGVN
b2RpZmllZEJyZWFrcG9pbnRzLmNvbnRhaW5zKCZicmVha3BvaW50T3duZXIpIHx8IG1fZG9tTm9k
ZVJlbW92ZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtwb2ludE93bmVyKSk7CiAKICAgICBh
dXRvIHBhdXNlRGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGF1c2VEYXRhLT5z
ZXRTdHJpbmcoInR5cGUiLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShicmVha3BvaW50VHlwZSkpOworICAgIHBhdXNlRGF0YS0+c2V0
U3RyaW5nKCJ0eXBlIiwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJy
ZWFrcG9pbnRUeXBlKSk7CiAgICAgaWYgKGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpKSB7CiAgICAgICAgIGlmIChhdXRvIGJyZWFrcG9p
bnRPd25lck5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoJmJyZWFrcG9pbnRP
d25lcikpCiAgICAgICAgICAgICBwYXVzZURhdGEtPnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFr
cG9pbnRPd25lck5vZGVJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IGFkMDFjNjc3ZTVk
MjIyNWEwNjVjZjAxMDQ1MTU2OWIxNzk0ZDY5YTkuLmQ4NzI4MjkyNWVjNjkzMTBlMGJjMGU3ODgz
Y2RjYTUwOGQxMDM1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oCkBAIC0zNiwyMSArMzYsMTkg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgTm9kZTsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFBhZ2VET01EZWJ1Z2dlckFnZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgewogcHVibGljOgogICAgIFBhZ2VET01E
ZWJ1Z2dlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQqKTsKLSAgICB+UGFnZURPTURlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+
UGFnZURPTURlYnVnZ2VyQWdlbnQoKTsKIAotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gRE9NRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlKSBvdmVycmlkZTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTUJyZWFrcG9pbnQoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25z
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURP
TUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSk7CiAKICAgICAvLyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24KLSAgICB2b2lkIG1haW5GcmFtZU5hdmlnYXRlZCgpIGZpbmFs
OworICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVkKCk7CiAgICAgdm9pZCBmcmFtZURvY3VtZW50
VXBkYXRlZChGcmFtZSYpOwogICAgIHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50
KTsKICAgICB2b2lkIHdpbGxSZW1vdmVET01Ob2RlKE5vZGUmKTsKQEAgLTYxLDEwICs1OSwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGaXJlQW5pbWF0aW9uRnJhbWUoKTsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGVuYWJsZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgZW5hYmxlKCk7CisgICAgdm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2b2lkIHNl
dEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFr
cG9pbnQ+JiYpIG92ZXJyaWRlOworICAgIGJvb2wgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4mJik7CiAKICAgICBSZWY8SlNPTjo6T2JqZWN0PiBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFr
cG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
LCBOb2RlJiBicmVha3BvaW50T3duZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAwYzIw
Mzk4MjczM2I0ZWU4YmFiZDA1NThmYTMzYjJhMWRjNGY4ZjI1Li42MTg3MjY4YmQyNzUxODFlOThm
NDVlZTBmYTdlMTZhNzUwOWJjMTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTY4LDI2ICs2
OCwyNSBAQCBib29sIFBhZ2VEZWJ1Z2dlckFnZW50OjplbmFibGVkKCkgY29uc3QKICAgICByZXR1
cm4gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudCgpID09IHRo
aXMgJiYgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dl
ckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNv
bnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9v
bCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29s
KiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJl
c3VsdEluZGV4ICovPj4gUGFnZURlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY29u
c3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9v
bD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUs
IE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVS
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQogewotICAgIGF1dG8g
c2hvdWxkRW11bGF0ZVVzZXJHZXN0dXJlID0gZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRl
VXNlckdlc3R1cmU7Ci0gICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNj
b3BlKG1faW5zcGVjdGVkUGFnZSwgc2hvdWxkRW11bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICBVc2Vy
R2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKLSAgICBXZWJEZWJ1
Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBjYWxsRnJhbWVJZCwg
ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZp
ZXcsIHNhdmVSZXN1bHQsIGVtdWxhdGVVc2VyR2VzdHVyZSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOworICAgIHJldHVybiBXZWJEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9u
Q2FsbEZyYW1lKGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgV1RGTW92ZShp
bmNsdWRlQ29tbWFuZExpbmVBUEkpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2
aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsK
IH0KIAotdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKK3ZvaWQgUGFnZURlYnVnZ2Vy
QWdlbnQ6OmludGVybmFsRW5hYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZFBhZ2VEZWJ1Z2dlckFnZW50KHRoaXMpOwogCi0gICAgV2ViRGVidWdnZXJBZ2VudDo6
ZW5hYmxlKCk7CisgICAgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKTsKIH0KIAot
dm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2
b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJv
eWVkKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2Vy
QWdlbnQobnVsbHB0cik7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlzQmVpbmdE
ZXN0cm95ZWQpOworICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlzYWJsZShpc0JlaW5n
RGVzdHJveWVkKTsKIH0KIAogU3RyaW5nIFBhZ2VEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxG
b3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0JiBzY3JpcHQpCkBAIC0xMjYsNyAr
MTI1LDcgQEAgdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2IKICAgICBtX2luc3BlY3RlZFBhZ2UuY29u
c29sZSgpLmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6TG9nLCBt
ZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2sobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogfQog
Ci1JbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQp
CitJbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAg
IGlmICghZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZy
YW1lKCkpOwpAQCAtMTUzLDggKzE1Miw3IEBAIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6Om1haW5G
cmFtZVN0YXJ0ZWRMb2FkaW5nKCkKICAgICBpZiAoaXNQYXVzZWQoKSkgewogICAgICAgICBzZXRT
dXBwcmVzc0FsbFBhdXNlcyh0cnVlKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgICAgICByZXN1bWUoaWdub3JlZCk7CisgICAgICAgIHJlc3VtZSgpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1
Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURl
YnVnZ2VyQWdlbnQuaAppbmRleCA0YzI3ZGQxYzc0YjEyZTg1N2I2Y2Y2NTEwZjg5OTc2MDdhMTY2
MjA3Li5iZmViZTkzNjJjNDkzNWUxMDFlMWExZjEzYzdhMDJiZTE1M2M5ZWI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2Vy
QWdlbnQuaApAQCAtNDUsMTQgKzQ1LDE0IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IGZpbmFs
IDogcHVibGljIFdlYkRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFBhZ2VEZWJ1Z2dlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAg
ICB+UGFnZURlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKLSAgICBib29sIGVuYWJsZWQoKSBjb25z
dCBmaW5hbDsKKyAgICB+UGFnZURlYnVnZ2VyQWdlbnQoKTsKKyAgICBib29sIGVuYWJsZWQoKSBj
b25zdDsKIAogICAgIC8vIERlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9p
ZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsRnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3Vw
LCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25z
dCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2Fs
bEZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0
aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKTsKIAog
ICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyCi0gICAgdm9pZCBicmVha3BvaW50QWN0aW9u
TG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpIGZpbmFsOworICAg
IHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBkYXRhKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQg
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBA
IC02NCwxNSArNjQsMTUgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ2FuY2VsQW5pbWF0aW9uRnJh
bWUoaW50IGNhbGxiYWNrSWQpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnRlcm5hbEVuYWJsZSgpOworICAgIHZvaWQgaW50ZXJuYWxEaXNhYmxlKGJvb2wg
aXNCZWluZ0Rlc3Ryb3llZCk7CiAKLSAgICBTdHJpbmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNv
bnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYpIG92ZXJyaWRlOworICAgIFN0cmluZyBzb3VyY2VN
YXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0Jik7CiAKLSAgICB2b2lk
IG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBtdXRlQ29uc29sZSgpOworICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpOwog
Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgUGFnZSYgbV9pbnNwZWN0ZWRQ
YWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlSGVhcEFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlSGVhcEFnZW50LmNwcAppbmRleCA0OTIxOGVmMTI4M2ViZDRkZDc1NDIxMTM2OWIzNDlh
NDgyNTIyZDk4Li40MDM2YTIzYzY4NTA3ZTU5NGFiMmU5NzRmNWI2MmRiODY3Yzc4NzYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFw
QWdlbnQuY3BwCkBAIC0zOSwxNiArMzksMjAgQEAgUGFnZUhlYXBBZ2VudDo6UGFnZUhlYXBBZ2Vu
dChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdlSGVhcEFnZW50Ojp+UGFnZUhlYXBB
Z2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBQYWdlSGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBB
Z2VudDo6ZW5hYmxlKCkKIHsKLSAgICBXZWJIZWFwQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7
CisgICAgYXV0byByZXN1bHQgPSBXZWJIZWFwQWdlbnQ6OmVuYWJsZSgpOworCiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlSGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQYWdlSGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VIZWFwQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFn
ZUhlYXBBZ2VudChudWxscHRyKTsKLSAgICBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIFdlYkhlYXBBZ2VudDo6ZGlzYWJsZSgpOwogfQogCiB2b2lkIFBh
Z2VIZWFwQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaAppbmRleCAxYmQ2Y2EwZmM5
ZWYxNWExZDdhMjUyODQyOTVhOGUxOWU4NWYxMGRlLi5mMjZmZjg0YjM4Yjk0Yzk3MmQ5ZjQ2Y2M5
YzRhNzRlYWZmNzRjN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKQEAgLTMxLDE4ICszMSwxNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBQYWdl
SGVhcEFnZW50IGZpbmFsIDogcHVibGljIFdlYkhlYXBBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGFnZUhlYXBBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgUGFnZUhlYXBBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VI
ZWFwQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZUhlYXBBZ2VudCgpOwogCiAgICAgLy8gSGVh
cEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKIAogICAg
IC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZU5ldHdvcmtBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZU5ldHdvcmtBZ2VudC5jcHAKaW5kZXggMmM2NWI4MTA0OTRiYmViNzNkNTM0ZTY2MmFjMzEx
OTNmNDBjM2M2OC4uOWZlMTM5OWMzYjcyNjIzNTUyYjQyM2IwMDMzZTMzZjk4MWMzYjNkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3Jr
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdl
TmV0d29ya0FnZW50LmNwcApAQCAtNDcsNyArNDcsNyBAQCBQYWdlTmV0d29ya0FnZW50OjpQYWdl
TmV0d29ya0FnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VOZXR3b3JrQWdl
bnQ6On5QYWdlTmV0d29ya0FnZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcgUGFnZU5ldHdvcmtB
Z2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6
Ok5ldHdvcms6OkxvYWRlcklkIFBhZ2VOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50aWZpZXIoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAobG9hZGVyKSB7CiAgICAgICAgIGlmIChh
dXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgp
KQpAQCAtNTYsNyArNTYsNyBAQCBTdHJpbmcgUGFnZU5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRp
ZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmlu
ZyBQYWdlTmV0d29ya0FnZW50OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
cikKK1Byb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIGlmIChsb2FkZXIpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
UGFnZUFnZW50KCkpCkBAIC05MSwxMiArOTEsMTIgQEAgVmVjdG9yPFdlYlNvY2tldCo+IFBhZ2VO
ZXR3b3JrQWdlbnQ6OmFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYgbG9jaykKICAg
ICByZXR1cm4gd2ViU29ja2V0czsKIH0KIAotdm9pZCBQYWdlTmV0d29ya0FnZW50OjpzZXRSZXNv
dXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQordm9pZCBQYWdlTmV0d29ya0FnZW50
OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCBkaXNhYmxlZCkKIHsKICAg
ICBtX2luc3BlY3RlZFBhZ2Uuc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3Rv
cihkaXNhYmxlZCk7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFBhZ2VOZXR3b3JrQWdl
bnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQpCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBQYWdlTmV0d29ya0Fn
ZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5oCmluZGV4IGJlZGNlM2U4ZGJi
N2M5ZDIyYjJlMWI5NzJkMjJiMmE1YmNlNDBhY2EuLjAyZDRiZWIyMWM1MmZjMWIzNDY3MmRjZWFh
Mzc1MDQ1MWJlNTI0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaApAQCAtMzYsMTUgKzM2LDE1IEBAIGNsYXNz
IFBhZ2VOZXR3b3JrQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yTmV0d29ya0FnZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlTmV0d29ya0Fn
ZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZU5ldHdvcmtBZ2VudCgpIG92ZXJyaWRl
OworICAgIH5QYWdlTmV0d29ya0FnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxvYWRl
cklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZnJhbWVJ
ZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYlNvY2tl
dCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZl
cmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAgIFZlY3RvcjxX
ZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICB2b2lk
IHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJhbChib29sKTsKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFBhZ2UmIG1faW5zcGVjdGVkUGFnZTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1
bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggZThhYjVmNGM4OWFkZTRmYzg1YzA0MmI0MzQzM2I3MjY1
NjNhYmRkMi4uMDBlNjlmMWFhMmUzZjhlYTJmNDQ1ZThkZDQ0NmRkMTZlYTYzNjNkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVu
dGltZUFnZW50LmNwcApAQCAtNTIsMTEgKzUyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi1zdGF0aWMgYm9vbCBhc0Jvb2woY29uc3QgYm9v
bCogYikKLXsKLSAgICByZXR1cm4gYiAmJiAqYjsKLX0KLQogUGFnZVJ1bnRpbWVBZ2VudDo6UGFn
ZVJ1bnRpbWVBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9y
UnVudGltZUFnZW50KGNvbnRleHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihtYWtlVW5p
cXVlPEluc3BlY3Rvcjo6UnVudGltZUZyb250ZW5kRGlzcGF0Y2hlcj4oY29udGV4dC5mcm9udGVu
ZFJvdXRlcikpCkBAIC02OCwyNyArNjMsMjkgQEAgUGFnZVJ1bnRpbWVBZ2VudDo6UGFnZVJ1bnRp
bWVBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdlUnVudGltZUFnZW50Ojp+
UGFnZVJ1bnRpbWVBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBQYWdlUnVudGltZUFnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gUGFnZVJ1bnRpbWVBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmVuYWJsZWRQYWdlUnVudGltZUFnZW50KCkgPT0gdGhpcykKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
bmFibGUoZXJyb3JTdHJpbmcpOwotICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47CisgICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVu
YWJsZSgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
Ly8gUmVwb3J0IGluaXRpYWwgY29udGV4dHMgYmVmb3JlIGVuYWJsaW5nIGluc3RydW1lbnRhdGlv
biBhcyB0aGUgcmVwb3J0aW5nCiAgICAgLy8gY2FuIGZvcmNlIGNyZWF0aW9uIG9mIHNjcmlwdCBz
dGF0ZSB3aGljaCBjb3VsZCByZXN1bHQgaW4gZHVwbGljYXRlIG5vdGlmaWNhdGlvbnMuCiAgICAg
cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdB
Z2VudHMuc2V0RW5hYmxlZFBhZ2VSdW50aW1lQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZVJ1bnRpbWVBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdl
UnVudGltZUFnZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNh
YmxlKGVycm9yU3RyaW5nKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNh
YmxlKCk7CiB9CiAKIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUm
IGZyYW1lKQpAQCAtMTA2LDcgKzEwMyw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkCiAgICAg
bm90aWZ5Q29udGV4dENyZWF0ZWQocGFnZUFnZW50LT5mcmFtZUlkKCZmcmFtZSksIGZyYW1lLnNj
cmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCksIHdvcmxkKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQg
UGFnZVJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQ
YWdlUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNv
bnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250
ZXh0SWQpIHsKICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWlu
V29ybGRFeGVjU3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CkBAIC0xNTksMjIg
KzE1NiwyMiBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OnJlcG9ydEV4ZWN1dGlvbkNvbnRleHRD
cmVhdGlvbigpCiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dFR5cGUgdG9Qcm90b2NvbChET01XcmFwcGVyV29ybGQ6OlR5cGUg
dHlwZSkKK3N0YXRpYyBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGUgdG9Q
cm90b2NvbChET01XcmFwcGVyV29ybGQ6OlR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6Tm9ybWFsOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Ok5v
cm1hbDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
VHlwZTo6Tm9ybWFsOwogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxkOjpUeXBlOjpVc2VyOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4
dFR5cGU6OlVzZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dFR5cGU6OlVzZXI7CiAgICAgY2FzZSBET01XcmFwcGVyV29ybGQ6OlR5cGU6OkludGVy
bmFsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dFR5cGU6OkludGVybmFsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlJ1bnRp
bWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKICAgICB9CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RXhlY3V0aW9uQ29udGV4dFR5cGU6OkludGVybmFsOworICAgIHJldHVybiBQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6OkludGVybmFsOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCit2b2lkIFBhZ2VSdW50aW1lQWdl
bnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKICAg
ICBhdXRvIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRT
Y3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKQpAQCAtMTg0LDcgKzE4MSw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29u
dGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsCiAgICAgaWYg
KG5hbWUuaXNFbXB0eSgpICYmIHNlY3VyaXR5T3JpZ2luKQogICAgICAgICBuYW1lID0gc2VjdXJp
dHlPcmlnaW4tPnRvUmF3U3RyaW5nKCk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXhl
Y3V0aW9uQ29udGV4dENyZWF0ZWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dERlc2NyaXB0aW9uOjpjcmVhdGUoKQorICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5leGVjdXRpb25Db250ZXh0Q3JlYXRlZChQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29u
dGV4dERlc2NyaXB0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0SWQoaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRJZEZvcihnbG9iYWxPYmplY3QpKQogICAgICAgICAuc2V0
VHlwZSh0b1Byb3RvY29sKHdvcmxkLnR5cGUoKSkpCiAgICAgICAgIC5zZXROYW1lKG5hbWUpCkBA
IC0xOTIsMTYgKzE4OSwxNiBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRD
cmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpKU0dsb2JhbAogICAgICAgICAucmVs
ZWFzZSgpKTsKIH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29s
KiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVV
c2VyR2VzdHVyZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYg
c2F2ZWRSZXN1bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVm
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNU
aHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IFBhZ2VSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9w
dGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNv
bnRleHRJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkKIHsKLSAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNj
b3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBhc0Jvb2woZW11bGF0ZVVzZXJH
ZXN0dXJlKSk7Ci0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShlcnJvclN0cmlu
ZywgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQ
YXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBleGVjdXRpb25Db250ZXh0SWQsIHJldHVy
bkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCwgZW11bGF0ZVVzZXJHZXN0dXJl
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgVXNlckdlc3R1cmVF
bXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVjdGVkUGFnZSwgZW11bGF0ZVVz
ZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmUpOworICAgIHJldHVybiBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmV2YWx1YXRlKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBXVEZNb3ZlKGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSksIFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11
dGVDb25zb2xlKSwgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpLCBXVEZNb3ZlKHJldHVybkJ5
VmFsdWUpLCBXVEZNb3ZlKGdlbmVyYXRlUHJldmlldyksIFdURk1vdmUoc2F2ZVJlc3VsdCksIFdU
Rk1vdmUoZW11bGF0ZVVzZXJHZXN0dXJlKSk7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6
Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRp
b25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVBy
ZXZpZXcsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93bikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24g
Ki8+PiBQYWdlUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRpb25hbEFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4m
JiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYg
cmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFs
PGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQogewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9u
U2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNl
ckdlc3R1cmUpKTsKLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgb3B0aW9uYWxBcmd1bWVudHMsIGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQ
cmV2aWV3LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duKTsKKyAgICBVc2Vy
R2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZSk7CisgICAgcmV0dXJuIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24ob2JqZWN0SWQsIGV4cHJlc3Npb24s
IFdURk1vdmUob3B0aW9uYWxBcmd1bWVudHMpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJh
dGVQcmV2aWV3KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgKaW5kZXggMmFmMzczOWI3ZmU3YzE2ZmFhN2Q4ZDI3
OTdjZTZkMDEwMjE1Mzk4ZC4uMjk4NDY1YzUyYjQyNDY0YzI3MzM2NTllMDdmM2Y3NjAxNzRhOTVl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VS
dW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZVJ1bnRpbWVBZ2VudC5oCkBAIC00NSwzMSArNDUsMzAgQEAgY2xhc3MgRE9NV3JhcHBlcldv
cmxkOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgUGFnZVJ1bnRpbWVBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGFnZVJ1bnRpbWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZVJ1bnRpbWVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7
Ci0gICAgflBhZ2VSdW50aW1lQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZVJ1bnRpbWVBZ2Vu
dCgpOwogCiAgICAgLy8gUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCog
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29s
KiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wq
IHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9w
dGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0
ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8c3RkOjp0dXBsZTxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8q
IHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJv
b2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IGNhbGxG
dW5jdGlvbk9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJn
dW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdl
bmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZChG
cmFtZSYpOwogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9N
V3JhcHBlcldvcmxkJik7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmKTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7CisgICAgdm9pZCB1bm11dGVD
b25zb2xlKCk7CiAgICAgdm9pZCByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKTsKLSAg
ICB2b2lkIG5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5T3JpZ2luKiA9
IG51bGxwdHIpOworICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBET01XcmFwcGVyV29ybGQmLCBTZWN1cml0eU9yaWdpbiogPSBudWxscHRyKTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OlJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJv
bnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlJ1bnRpbWVCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCmlu
ZGV4IDE4YTYwYzNjMWNiMmZhMTEzM2U4OTQxOTEyNjM5ZjkzNzJlZmYyYTYuLmJiZTJjYzAzZDY0
NWZjMTI5MDg0ZGJlZTlkZDgwNDIyYmJkNjNmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmNw
cApAQCAtNTQsOSArNTQsOSBAQCB2b2lkIFNlcnZpY2VXb3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhcwogewogfQogCi12b2lk
IFNlcnZpY2VXb3JrZXJBZ2VudDo6Z2V0SW5pdGlhbGl6YXRpb25JbmZvKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+
JiBpbmZvKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpTZXJ2aWNlV29y
a2VyOjpDb25maWd1cmF0aW9uPj4gU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0aWFsaXphdGlv
bkluZm8oKQogewotICAgIGluZm8gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNlV29ya2Vy
OjpDb25maWd1cmF0aW9uOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6U2VydmljZVdv
cmtlcjo6Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRhcmdldElkKG1fc2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlLmlkZW50aWZpZXIoKSkKICAgICAgICAgLnNldFNlY3VyaXR5
T3JpZ2luKG1fc2VydmljZVdvcmtlckdsb2JhbFNjb3BlLnNlY3VyaXR5T3JpZ2luKCktPnRvUmF3
U3RyaW5nKCkpCiAgICAgICAgIC5zZXRVcmwobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUudGhy
ZWFkKCkuY29udGV4dERhdGEoKS5zY3JpcHRVUkwuc3RyaW5nKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2Vu
dC5oCmluZGV4IDgxNDlmZjNkYWMzNTc4ZmMwNDhiNjU4ZTYzMTdkZTMyYjE5N2Q0MDAuLjBiYTVj
YzVjYzdmMzNkNjExYjQ1YTA0OTg3NDUwNTViOGYyOWZmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2Vu
dC5oCkBAIC0zNCwyMSArMzQsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBj
bGFzcyBTZXJ2aWNlV29ya2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgSW5zcGVjdG9yOjpTZXJ2aWNlV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXJ2aWNlV29ya2VyQWdlbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFNlcnZpY2VXb3JrZXJBZ2VudChX
b3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+U2VydmljZVdvcmtlckFnZW50KCkgb3ZlcnJpZGU7
CisgICAgflNlcnZpY2VXb3JrZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBTZXJ2aWNlV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyCi0gICAgdm9pZCBnZXRJbml0aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mKSBvdmVy
cmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uPj4gZ2V0SW5pdGlhbGl6
YXRpb25JbmZvKCk7CiAKIHByaXZhdGU6CiAgICAgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJiBt
X3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKaW5kZXggYzEy
YjVhYTQxMzJmODlhYzU4MmRlYjlmNzJmMTg1MWE5ZWVmOTUzZi4uODkyNDE5MGVlNjIwZjE1NTE0
YTI1MGQ3NjJlMmJlNGExOTMzMDYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKQEAgLTQ4LDcg
KzQ4LDcgQEAgV29ya2VyQXVkaXRBZ2VudDo6V29ya2VyQXVkaXRBZ2VudChXb3JrZXJBZ2VudENv
bnRleHQmIGNvbnRleHQpCiAKIFdvcmtlckF1ZGl0QWdlbnQ6On5Xb3JrZXJBdWRpdEFnZW50KCkg
PSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlwdCBXb3JrZXJBdWRpdEFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJzIGFzIHRo
ZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oCmlu
ZGV4IGQ2YWNkYzBlYTNlODlmMGZhZDMxY2NiMmQ3NjhlMGUxNDZiZDMyMzUuLmQyNTljNmE3NmMy
ZWNiMGVlYjhlZGQ3MzM5ZWMwNDU5YmQzNzJiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKQEAgLTM3
LDEwICszNywxMCBAQCBjbGFzcyBXb3JrZXJBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgV29ya2VyQXVkaXRBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAg
ICB+V29ya2VyQXVkaXRBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJBdWRpdEFnZW50KCk7
CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dEZvckV2YWwoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29u
dGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAK
ICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNv
bnNvbGVBZ2VudC5oCmluZGV4IGI3YjU1ZDAwNjU5MGVmYjA4M2ZlYmI5NGU0M2I0MTJkNjNjZWFm
ZDAuLjU3MTU5OTEyNDdjYWZiOWQ2N2VmMzMxNzFhZGZkMWM5NmM3ZTQ4MjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNv
bnNvbGVBZ2VudC5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIFdvcmtlckNvbnNvbGVBZ2VudCBm
aW5hbCA6IHB1YmxpYyBXZWJDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIFdvcmtlckNvbnNvbGVBZ2VudChXb3JrZXJBZ2VudENvbnRleHQm
KTsKLSAgICB+V29ya2VyQ29uc29sZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlckNvbnNv
bGVBZ2VudCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01E
ZWJ1Z2dlckFnZW50LmNwcAppbmRleCBiZDVkOGE4MzRlYWU4NjMzMGZjYjk3MmM1OTJkNWY3MGE3
ZTczMDRjLi45MjI3NDM1MGM2MzcxNDYwNTFkNzQ5OWM5YmZiNzQ2MDcwMzIyMTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMzcsMTkgKzM3LDIwIEBAIFdvcmtlckRP
TURlYnVnZ2VyQWdlbnQ6OldvcmtlckRPTURlYnVnZ2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0
JiBjb250ZXh0LCBJbnNwCiAKIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJET01EZWJ1
Z2dlckFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNl
dERPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyogbm9kZUlkICov
LCBjb25zdCBTdHJpbmcmIC8qIHR5cGVTdHJpbmcgKi8sIGNvbnN0IEpTT046Ok9iamVjdCogLyog
b3B0aW9uc1BheWxvYWQgKi8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJE
T01EZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCwg
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiAvKiBvcHRpb25zICovKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0
ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0K
IAotdm9pZCBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IC8qIG5vZGVJZCAqLywgY29uc3QgU3RyaW5nJiAvKiB0
eXBlU3RyaW5nICovKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV29ya2VyRE9NRGVi
dWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpCiB7Ci0gICAgZXJyb3JTdHJp
bmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBz
dXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1h
dGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+JiYpCitib29sIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1hdGlv
bkZyYW1lQnJlYWtwb2ludChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYmKQogewogICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0
ZWQiX3M7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJE
T01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKaW5kZXggODZlYjkzZjVlMTk3NTUxYmJkMjA5Njk2
NTc5YzcwODk0ZDU4YzIxYy4uNTZmNWEwOTBhMzMwODYwMWRiZGJhOWM0ZjJiNGQzZjdjMTEzM2Qx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaApAQCAtMzEsMTkgKzMxLDE3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNs
YXNzIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudCB7CiBwdWJsaWM6CiAgICAgV29ya2VyRE9NRGVidWdnZXJBZ2VudChXb3JrZXJB
Z2VudENvbnRleHQmLCBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqKTsKLSAgICB+
V29ya2VyRE9NRGVidWdnZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50KCk7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgot
ICAgIHZvaWQgc2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIHR5cGUpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0RE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRU
eXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldEFuaW1hdGlvbkZy
YW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpIG92
ZXJyaWRlOworICAgIGJvb2wgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4
IGNiYzYyMDUyMjE5NGYyOWE5NDE4N2E4YTI3YWMxMmI0MTlkMzU5ZTAuLjdhYTcyYjZhNGM2NGNh
OWY2NzgxNTBkMDZhMzJkMDI5NGM1MDg4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgV29ya2VyRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFj
dGlvbkxvZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjCiAgICAgbV93b3JrZXJH
bG9iYWxTY29wZS5hZGRDb25zb2xlTWVzc2FnZShtYWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihN
ZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZVR5cGU6OkxvZywgTWVzc2FnZUxldmVsOjpMb2csIG1l
c3NhZ2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KSkpOwogfQog
Ci1JbmplY3RlZFNjcmlwdCBXb3JrZXJEZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2
YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKK0luamVjdGVkU2NyaXB0IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9y
RXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsK
ICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gImV4
ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJzIGFzIHRoZXJlIGlz
IG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oCmlu
ZGV4IDRhYzA3ZDZjYzM3YzIyODAzMzM4ZWI4MGQzNDIxOTUyMWI5NmYzZGUuLjdjYTY0ZTQwMTNh
NTRiNDE4ZDUzZTQ3NDgwMmU3MzJiZjE5MDhjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgK
QEAgLTM2LDE3ICszNiwxNyBAQCBjbGFzcyBXb3JrZXJEZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVi
bGljIFdlYkRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIFdvcmtlckRlYnVnZ2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAg
fldvcmtlckRlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyRGVidWdnZXJBZ2Vu
dCgpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9p
bnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSkgZmlu
YWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmIGRhdGEpOwogCiBwcml2YXRlOgogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
bXV0ZSBjb25zb2xlIGZvciB3b3JrZXJzLgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlk
ZSB7IH0KLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIG11
dGVDb25zb2xlKCkgeyB9CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKLSAgICBJbnNw
ZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4
ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJH
bG9iYWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcAppbmRleCA1M2ZhODgzYWQ5
NzE4ODY4NGNiOTRjMDkwZTc5NjE2OTA4MWI2YjRkLi4yYjE2OGU2ZDNhN2ExYmUxNDY4MzY5YzMw
Y2MyZWI2YzliMzlkMjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKQEAgLTQzLDEyICs0
MywxMiBAQCBXb3JrZXJOZXR3b3JrQWdlbnQ6Oldvcmtlck5ldHdvcmtBZ2VudChXb3JrZXJBZ2Vu
dENvbnRleHQmIGNvbnRleHQpCiAKIFdvcmtlck5ldHdvcmtBZ2VudDo6fldvcmtlck5ldHdvcmtB
Z2VudCgpID0gZGVmYXVsdDsKIAotU3RyaW5nIFdvcmtlck5ldHdvcmtBZ2VudDo6bG9hZGVySWRl
bnRpZmllcihEb2N1bWVudExvYWRlciopCitQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgV29y
a2VyTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKIHsKICAg
ICByZXR1cm4geyB9OwogfQogCi1TdHJpbmcgV29ya2VyTmV0d29ya0FnZW50OjpmcmFtZUlkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQorUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgV29ya2Vy
TmV0d29ya0FnZW50OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJl
dHVybiB7IH07CiB9CkBAIC01OSwxMiArNTksMTIgQEAgVmVjdG9yPFdlYlNvY2tldCo+IFdvcmtl
ck5ldHdvcmtBZ2VudDo6YWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJikKICAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIFdvcmtlck5ldHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNo
aW5nRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgV29ya2VyTmV0d29ya0FnZW50OjpzZXRS
ZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBtX3dv
cmtlckdsb2JhbFNjb3BlLnRocmVhZCgpLndvcmtlckRlYnVnZ2VyUHJveHkoKS5zZXRSZXNvdXJj
ZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdv
cmtlck5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpCiB7CiAgICAgcmV0dXJu
ICZtX3dvcmtlckdsb2JhbFNjb3BlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaAppbmRleCA4OTlm
MGE1NmZkMWI3ZGE5NDNhNDU1M2I4Yzk0Y2YzYzdiZmIwYjk0Li45MWIwNWI5YzIzMGVjN2NkMzVh
NDZjZTU3YzU2NjM5MjcyMjJkZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaApAQCAtMzQsMTUg
KzM0LDE1IEBAIGNsYXNzIFdvcmtlck5ldHdvcmtBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIFdvcmtlck5ldHdvcmtBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2Vy
TmV0d29ya0FnZW50KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlck5ldHdvcmtBZ2VudCgpOwogCiBw
cml2YXRlOgotICAgIFN0cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopIG92ZXJy
aWRlOwotICAgIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tI
b2xkZXImKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJv
b2wpIG92ZXJyaWRlOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpIG92ZXJyaWRlOwot
ICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkxvYWRlcklkIGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciopOworICAgIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0
IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJh
bChib29sKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOworICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJp
bmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgV29y
a2VyR2xvYmFsU2NvcGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVB
Z2VudC5jcHAKaW5kZXggZDkyMzA4MWM1MWUzYmQyNzUyMWFhMjQxYzdjYWM4ZmI0MGQzZTI4My4u
ZmZmZDNjZWEyMTUzNTlmZTZmMGVkMWVkZDc3MmQxNmI3MDk1MWRlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50
aW1lQWdlbnQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIFdvcmtlclJ1bnRpbWVBZ2VudDo6V29ya2Vy
UnVudGltZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyUnVudGlt
ZUFnZW50Ojp+V29ya2VyUnVudGltZUFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlw
dCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3Jp
cHQgV29ya2VyUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1
dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlv
bkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQg
aXMgbm90IHN1cHBvcnRlZCBmb3Igd29ya2VycyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRp
b24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmgKaW5kZXggNTMwOGViNDM4OGQ0ZDEw
NTJlYzc0NTg1MDQ3YTFlODhlN2Q0M2I0Yi4uNmI5OThmNGQxNzMxODUxZjk5YjY3ZWUxNWE1ZDIw
MDE1ODdmNGQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmgKQEAgLTM3LDIxICszNywyMCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXb3JrZXJSdW50aW1lQWdlbnQgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdvcmtlclJ1bnRpbWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyUnVudGltZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYp
OwotICAgIH5Xb3JrZXJSdW50aW1lQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyUnVudGlt
ZUFnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRl
eHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdEZvckV2YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0gICAgdm9p
ZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSB7IH0KIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlJ1bnRpbWVCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3Jr
ZXJHbG9iYWxTY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCmluZGV4IDVlODg1YWQ2ZTU4NjkwOWMwZWQyMTVi
ZWU1YmU4ZThlZjdjMjdhZjguLjViZWJjYjQ5YWE4ZWI5YTJiYjA3MTFlYWUwODBmMzc3ZTIyYjk4
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNVXRpbGl0aWVzLmNwcApAQCAtNDcsMTIgKzQ3LDEyIEBAIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIAogICAgIC8v
IFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMgYXMgSlNPTiwgcmV0dXJuaW5nIHRoZSByb290IG9i
amVjdCAoaWYgYW55KS4KICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzaXplKSB9OwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTihqc29uLCB2YWx1ZSkgfHwgIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorCisgICAg
YXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gb2JqZWN0OworICAgIHJl
dHVybiB2YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5
LmNwcAppbmRleCBlNmNjMjJkOTBjN2FjMzliNTZmZDgyYTE2YjA3NjVlYzFlMWNmYTg3Li41YTE4
MmZkZjQ1MjY0MmFhOGVmNDYwYjc3NGFjOWU3YjQwYzJlYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuY3BwCkBAIC01NSwyMyArNTUsMjcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxS
ZWZQdHI8S2V5SGFuZGxlPj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBrZXlz
IGFycmF5LgotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2V5c0FycmF5OwotICAgIGlmICghaXQt
PnZhbHVlLT5hc0FycmF5KGtleXNBcnJheSkpCisgICAgYXV0byBrZXlzQXJyYXkgPSBpdC0+dmFs
dWUtPmFzQXJyYXkoKTsKKyAgICBpZiAoIWtleXNBcnJheSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4gZGVjb2RlZEtleXM7CiAg
ICAgYm9vbCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5
c0FycmF5LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVl
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7Ci0gICAgICAg
ICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChrZXlPYmplY3QpKQorICAgICAgICAgICAgYXV0byBr
ZXlPYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICgha2V5T2JqZWN0
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtl
eVR5cGU7Ci0gICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrdHkiLCBrZXlU
eXBlKSB8fCAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5VHlwZSwgIm9jdCIpKQor
ICAgICAgICAgICAgYXV0byBrZXlUeXBlID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImt0eSIpOwor
ICAgICAgICAgICAgaWYgKCFrZXlUeXBlIHx8ICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShrZXlUeXBlLCAib2N0IikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBTdHJpbmcga2V5SUQsIGtleVZhbHVlOwotICAgICAgICAgICAgaWYgKCFrZXlPYmpl
Y3QtPmdldFN0cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdldFN0cmluZygiayIs
IGtleVZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8ga2V5SUQgPSBrZXlPYmplY3QtPmdldFN0cmlu
Zygia2lkIik7CisgICAgICAgICAgICBpZiAoIWtleUlEKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgYXV0byBrZXlWYWx1ZSA9IGtleU9iamVjdC0+Z2V0U3Ry
aW5nKCJrIik7CisgICAgICAgICAgICBpZiAoIWtleVZhbHVlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKQEAgLTk2LDgg
KzEwMCw4IEBAIHN0YXRpYyBib29sIHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRG
b3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBSZXRyaWV2ZSB0aGUga2lkcyBhcnJheS4KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGtpZHNBcnJheTsKLSAgICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShraWRzQXJyYXkpKQorICAg
IGF1dG8ga2lkc0FycmF5ID0gaXQtPnZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFraWRzQXJy
YXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBSZXR1cm4gdGhlIGtl
eSBJRHMgYW5kIHZhbGlkYXRlIHRoZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcAppbmRleCA4YWM0OGVjNWRjNjliMzE0OTU3YmE0MzNmOTcxMDFlYTI3NzY5NjQ0
Li40ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1ZDBjYzg0OWQ5YTcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0
aWMgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBleHRyYWN0U2luZkRhdGEoY29uc3QgU2hhcmVk
QnVmZmVyJiBidWZmZXIpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgU3RyaW5nIGpzb24geyBi
dWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVmZmVyLnNpemUoKSkgfTsKIAot
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKGpzb24sIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9i
amVjdCkpCisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW9i
amVjdCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc2lu
ZkFycmF5OwotICAgIGlmICghb2JqZWN0LT5nZXRBcnJheShDRE1Qcml2YXRlRmFpclBsYXlTdHJl
YW1pbmc6OnNpbmZOYW1lKCksIHNpbmZBcnJheSkpCisgICAgYXV0byBzaW5mQXJyYXkgPSBvYmpl
Y3QtPmdldEFycmF5KENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSk7Cisg
ICAgaWYgKCFzaW5mQXJyYXkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVm
PFNoYXJlZEJ1ZmZlcj4+IHNpbmZzOwogICAgIHNpbmZzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2luZkFycmF5LT5sZW5ndGgoKSk7CiAKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKnNpbmZBcnJh
eSkgewotICAgICAgICBTdHJpbmcga2V5SUQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5n
KGtleUlEKSkKKyAgICAgICAgYXV0byBrZXlJRCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICBpZiAoIWtleUlEKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmVjdG9yPGNo
YXI+IHNpbmZEYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQppbmRleCBjMDUxOWE4YzIyMTkz
MGY1YzYxYTBhODBlOWVjM2ExZTk5YzhmMWQ0Li4xYzQ5Zjg4NzUzYTk0YzkwN2JkZjZkYjAxOWYy
MTk1Yjg0N2I0ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQpAQCAtMzEyLDExICszMTIs
OCBAQCBzdGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBwYXJzZUpTT05WYWx1ZShjb25zdCBTaGFy
ZWRCdWZmZXImIGJ1ZmZlcikKIAogICAgIC8vIFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMgYXMg
SlNPTiwgcmV0dXJuaW5nIHRoZSByb290IG9iamVjdCAoaWYgYW55KS4KICAgICBTdHJpbmcganNv
biB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKSB9OwotICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KGpzb24sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdmFs
dWU7CisgICAgcmV0dXJuIEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CiB9CiAKIGJvb2wg
Q0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnN1cHBvcnRzUGVyc2lzdGFibGVT
dGF0ZSgpCkBAIC04MDQsMTkgKzgwMSwyNCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAg
ICAgICB9KTsKIAogICAgICAgICBhdXRvIHJvb3QgPSBwYXJzZUpTT05WYWx1ZShyZXNwb25zZURh
dGEpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBpZiAoIXJv
b3QgfHwgIXJvb3QtPmFzQXJyYXkoYXJyYXkpKSB7CisgICAgICAgIGlmICghcm9vdCkgewogICAg
ICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQsIEZhaWxlZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIHBhcnNlUmVzcG9uc2UgPSBbJl0oUmVmUHRyPEpTT046OlZhbHVlPiYgdmFsdWUp
IC0+IGJvb2wgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgYXV0byBhcnJh
eSA9IHJvb3QtPmFzQXJyYXkoKTsKKyAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgICAg
Y2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
IEZhaWxlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IHBhcnNlUmVzcG9uc2UgPSBbJl0oUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKSAtPiBib29sIHsK
KyAgICAgICAgICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgICAg
ICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIFN0cmluZyBrZXlJRFN0cmluZzsKLSAgICAgICAgICAgIGlmICghb2JqZWN0LT5nZXRTdHJp
bmcoImtleUlEIiwga2V5SURTdHJpbmcpKQorICAgICAgICAgICAgYXV0byBrZXlJRFN0cmluZyA9
IG9iamVjdC0+Z2V0U3RyaW5nKCJrZXlJRCIpOworICAgICAgICAgICAgaWYgKCFrZXlJRFN0cmlu
ZykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBrZXlJRFZlY3RvcjsKQEAgLTg0MywxNCArODQ1LDE0IEBAIHZvaWQgQ0RNSW5zdGFu
Y2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0
cmluZyYsIExpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBp
ZiAoaGFzRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBOU0ludGVnZXIgZXJyb3JDb2RlOwotICAg
ICAgICAgICAgICAgIGlmICghZXJyb3JGaW5kUmVzdWx0cy0+dmFsdWUtPmFzSW50ZWdlcihlcnJv
ckNvZGUpKQorICAgICAgICAgICAgICAgIGF1dG8gZXJyb3JDb2RlID0gZXJyb3JGaW5kUmVzdWx0
cy0+dmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICAgICAgICAgIGlmICghZXJyb3JDb2RlKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYXV0byBl
cnJvciA9IGFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpAIm9yZy53ZWJr
aXQuZW1lIiBjb2RlOmVycm9yQ29kZSB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOkAib3Jn
LndlYmtpdC5lbWUiIGNvZGU6KmVycm9yQ29kZSB1c2VySW5mbzpuaWxdKTsKICAgICAgICAgICAg
ICAgICBbcmVxdWVzdCBwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlRXJyb3I6ZXJyb3IuZ2V0KCld
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNQYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIHBheWxvYWRTdHJpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkRmluZFJl
c3VsdHMtPnZhbHVlLT5hc1N0cmluZyhwYXlsb2FkU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBh
dXRvIHBheWxvYWRTdHJpbmcgPSBwYXlsb2FkRmluZFJlc3VsdHMtPnZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFN0cmluZykKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXlsb2Fk
VmVjdG9yOwogICAgICAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcs
IHBheWxvYWRWZWN0b3IpKQpAQCAtODYxLDcgKzg2Myw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYs
IExpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfTsKICAgICAgICAgZm9yIChh
dXRvIHZhbHVlIDogKmFycmF5KSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlUmVzcG9uc2UodmFs
dWUpKSB7CisgICAgICAgICAgICBpZiAoIXBhcnNlUmVzcG9uc2UoV1RGTW92ZSh2YWx1ZSkpKSB7
CiAgICAgICAgICAgICAgICAgREVCVUdfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICIn
Y2VuYycgaW5pdERhdGEsIEZhaWxlZCwgY291bGQgbm90IHBhcnNlIHJlc3BvbnNlIik7CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQsIEZhaWxlZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bi5jcHAKaW5kZXggYTU1ZmE0OTM4MGM0OTUxMzBmZTMxYTk2Yzg0ZTA4OWI3NmQxY2FjOC4uNjZl
MmI2ZDQ2OTkyNGY1NDMxYmI1MmVkMDNjNzZkZTA0ZTRhZTI4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci9TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3Bw
CkBAIC04NSw5ICs4NSw4IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGZpcnN0V2luZG93SGFu
ZGxlSW5SZXN1bHQoSlNPTjo6VmFsdWUmIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGhhbmRsZXM7CiAgICAgaWYgKHJlc3VsdC5hc0FycmF5KGhhbmRsZXMpICYmIGhhbmRsZXMt
Pmxlbmd0aCgpKSB7Ci0gICAgICAgIGF1dG8gaGFuZGxlVmFsdWUgPSBoYW5kbGVzLT5nZXQoMCk7
Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAgIGlmIChoYW5kbGVWYWx1ZS0+YXNTdHJp
bmcoaGFuZGxlKSkKKyAgICAgICAgYXV0byBoYW5kbGUgPSBoYW5kbGVzLT5nZXQoMCktPmFzU3Ry
aW5nKCk7CisgICAgICAgIGlmICghIWhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
CiAgICAgfQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xODcsMTEgKzE4NiwxMyBAQCB2
b2lkIFNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJik+JiYgYwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAg
ICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zLCBo
YW5kbGUpKSB7CisKKyAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CisKICAgICAgICAgc3dpdGNoVG9Ub3BMZXZlbEJyb3dzaW5nQ29udGV4dChoYW5kbGUpOwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAg
IH0pOwpAQCAtMjA2LDggKzIwNyw5IEBAIHZvaWQgU2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMo
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgYm9vbCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nOwotICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJyZXN1bHQiLCBpc1Nob3dpbmdKYXZhU2Ny
aXB0RGlhbG9nKSkgeworCisgICAgICAgIGF1dG8gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJyZXN1bHQiKTsKKyAgICAgICAg
aWYgKCFpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5r
bm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI3Myw4ICsy
NzUsOCBAQCB2b2lkIFNlc3Npb246OnJlcG9ydFVuZXhwZWN0ZWRBbGVydE9wZW4oRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbAogICAgIGdldEFsZXJ0VGV4dChbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYm
IHJlc3VsdCkgewogICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGFsZXJ0VGV4dDsKICAgICAgICAg
aWYgKCFyZXN1bHQuaXNFcnJvcigpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh2YWx1ZVN0cmluZykp
CisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCEhdmFsdWVTdHJpbmcpCiAgICAgICAgICAgICAgICAgYWxl
cnRUZXh0ID0gdmFsdWVTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBlcnJvclJlc3Vs
dCA9IENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmV4cGVj
dGVkQWxlcnRPcGVuKTsKQEAgLTMzNywxNiArMzM5LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0Q3Vy
cmVudFVSTChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJy
b3dzaW5nQ29udGV4dDsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3Qt
PmdldE9iamVjdCgiY29udGV4dCIsIGJyb3dzaW5nQ29udGV4dCkpIHsKKworICAgICAgICAgICAg
YXV0byBicm93c2luZ0NvbnRleHQgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0
KCJjb250ZXh0Iik7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwotICAgICAgICAgICAgaWYg
KCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygidXJsIiwgdXJsKSkgeworCisgICAgICAgICAg
ICBhdXRvIHVybCA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJ1cmwiKTsKKyAgICAgICAg
ICAgIGlmICghdXJsKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRl
KHVybCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC00NTcsMTYgKzQ2MiwxOSBAQCB2b2lk
IFNlc3Npb246OmdldFRpdGxlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1
ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1
ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7
CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9
KTsKQEAgLTQ4NiwxNiArNDk0LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlKEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAo
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5n
Q29udGV4dCkpIHsKKworICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dz
aW5nQ29udGV4dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAg
IGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgewor
CisgICAgICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRs
ZSJfcyk7CisgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUo
aGFuZGxlKSkpOwogICAgIH0pOwogfQpAQCAtNTY0LDIyICs1NzUsMjMgQEAgdm9pZCBTZXNzaW9u
OjpnZXRXaW5kb3dIYW5kbGVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzaW5nQ29u
dGV4dEFycmF5OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJh
eSgiY29udGV4dHMiX3MsIGJyb3dzaW5nQ29udGV4dEFycmF5KSkgeworCisgICAgICAgIGF1dG8g
YnJvd3NpbmdDb250ZXh0QXJyYXkgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXko
ImNvbnRleHRzIl9zKTsKKyAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRBcnJheSkgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisKICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiB3aW5kb3dIYW5kbGVzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJv
d3NpbmdDb250ZXh0QXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gYnJvd3NpbmdDb250ZXh0VmFsdWUgPSBicm93c2luZ0NvbnRleHRBcnJheS0+
Z2V0KGkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0
OwotICAgICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRWYWx1ZS0+YXNPYmplY3QoYnJvd3Np
bmdDb250ZXh0KSkgeworICAgICAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQgPSBicm93c2lu
Z0NvbnRleHRBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFicm93
c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJp
bmcgaGFuZGxlOwotICAgICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygi
aGFuZGxlIl9zLCBoYW5kbGUpKSB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IGJyb3dzaW5n
Q29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICAgICAgaWYgKCFoYW5kbGUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNjEzLDE2ICs2MjUsMTkgQEAgdm9pZCBTZXNz
aW9uOjpuZXdXaW5kb3coT3B0aW9uYWw8U3RyaW5nPiB0eXBlSGludCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGhhbmRs
ZTsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
aGFuZGxlIl9zLCBoYW5kbGUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAgICAgICAgICAgIGlm
ICghaGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBw
cmVzZW50YXRpb247Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInByZXNlbnRhdGlvbiJfcywgcHJlc2VudGF0aW9uKSkgeworCisgICAgICAgICAg
ICBhdXRvIHByZXNlbnRhdGlvbiA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmco
InByZXNlbnRhdGlvbiJfcyk7CisgICAgICAgICAgICBpZiAoIXByZXNlbnRhdGlvbikgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0
cmluZygiaGFuZGxlIl9zLCBoYW5kbGUpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiX3MsIHByZXNlbnRhdGlvbiA9PSAiV2luZG93Il9zID8gIndpbmRvdyJfcyA6ICJ0YWIi
X3MpOwpAQCAtNjU0LDEwICs2NjksOSBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVm
UHRyPEpTT046OlZhbHVlPiYmIGZyYW1lSUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAg
ICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVl
KCkpOwogCi0gICAgICAgIGludCBmcmFtZUluZGV4OwotICAgICAgICBpZiAoZnJhbWVJRC0+YXNJ
bnRlZ2VyKGZyYW1lSW5kZXgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYW1lSW5kZXggPSBmcmFt
ZUlELT5hc0ludGVnZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKGZyYW1lSW5kZXggPj0gMCAm
JiBmcmFtZUluZGV4IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgp
KTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVnZXIoIm9yZGluYWwiX3MsIGZyYW1l
SW5kZXgpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5hbCJfcywg
KmZyYW1lSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIGZyYW1l
RWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCgqZnJhbWVJRCk7CiAgICAgICAgICAgICBBU1NF
UlQoIWZyYW1lRWxlbWVudElELmlzRW1wdHkoKSk7CkBAIC02NjksMTEgKzY4MywxMyBAQCB2b2lk
IFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZyYW1lSUQsIEZ1
bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcg
ZnJhbWVIYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcywgZnJhbWVIYW5kbGUpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
ZnJhbWVIYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQi
X3MpOworICAgICAgICAgICAgaWYgKCFmcmFtZUhhbmRsZSkgewogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGZyYW1lSGFuZGxlKTsK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoKSk7
CiAgICAgICAgIH0pOwpAQCAtNzA1LDExICs3MjEsMTMgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hU
b1BhcmVudEZyYW1lKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkgKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGZyYW1lSGFuZGxlOwotICAg
ICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQi
X3MsIGZyYW1lSGFuZGxlKSkgeworCisgICAgICAgICAgICBhdXRvIGZyYW1lSGFuZGxlID0gcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAg
IGlmICghZnJhbWVIYW5kbGUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChmcmFtZUhhbmRsZSk7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAgICAgICB9KTsKQEAg
LTcyNSwzMiArNzQzLDU0IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHRSZWN0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNw
b25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCJfcywgYnJvd3NpbmdDb250ZXh0
KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldE9iamVjdCgiY29udGV4dCJfcyk7CisgICAgICAgIGlmICghYnJvd3NpbmdDb250
ZXh0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gd2luZG93T3Jp
Z2luOwotICAgICAgICBkb3VibGUgeCA9IDAsIHkgPSAwOwotICAgICAgICBpZiAoIWJyb3dzaW5n
Q29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4iX3MsIHdpbmRvd09yaWdpbikKLSAgICAg
ICAgICAgIHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieCJfcywgeCkKLSAgICAgICAgICAg
IHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieSJfcywgeSkpIHsKKworICAgICAgICBhdXRv
IHdpbmRvd09yaWdpbiA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4i
X3MpOworICAgICAgICBpZiAoIXdpbmRvd09yaWdpbikgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd1NpemU7Ci0gICAgICAgIGRvdWJsZSB3aWR0aCA9IDAs
IGhlaWdodCA9IDA7Ci0gICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRPYmplY3QoIndp
bmRvd1NpemUiX3MsIHdpbmRvd1NpemUpCi0gICAgICAgICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0
RG91YmxlKCJ3aWR0aCJfcywgd2lkdGgpCi0gICAgICAgICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0
RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCkpIHsKKworICAgICAgICBhdXRvIHggPSB3aW5kb3dP
cmlnaW4tPmdldERvdWJsZSgieCJfcyk7CisgICAgICAgIGlmICgheCkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
KyAgICAgICAgYXV0byB5ID0gd2luZG93T3JpZ2luLT5nZXREb3VibGUoInkiX3MpOworICAgICAg
ICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IGJyb3dz
aW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXplIl9zKTsKKyAgICAgICAgaWYgKCF3aW5k
b3dTaXplKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHdpZHRoID0gd2luZG93U2l6ZS0+
Z2V0RG91YmxlKCJ3aWR0aCJfcyk7CisgICAgICAgIGlmICghd2lkdGgpIHsKKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gaGVpZ2h0ID0gd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3Mp
OworICAgICAgICBpZiAoIWhlaWdodCkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJv
cikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgYXV0byB3aW5k
b3dSZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0
RG91YmxlKCJ4Il9zLCB4KTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ5Il9zLCB5
KTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ3aWR0aCJfcywgd2lkdGgpOwotICAg
ICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoImhlaWdodCJfcywgaGVpZ2h0KTsKKyAgICAgICAg
d2luZG93UmVjdC0+c2V0RG91YmxlKCJ4Il9zLCB4LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAg
ICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3MsIHkucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
ICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgiX3MsIHdpZHRoLnJlbGVhc2VOb25OdWxs
KCkpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoImhlaWdodCJfcywgaGVpZ2h0LnJl
bGVhc2VOb25OdWxsKCkpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpzdWNjZXNzKFdURk1vdmUod2luZG93UmVjdCkpKTsKICAgICB9KTsKIH0KQEAgLTg4MiwxMyAr
OTIyLDE0IEBAIHZvaWQgU2Vzc2lvbjo6ZnVsbHNjcmVlbldpbmRvdyhGdW5jdGlvbjx2b2lkIChD
b21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJf
cywgdmFsdWVTdHJpbmcpKSB7CisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlm
ICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpA
QCAtOTAwLDEyICs5NDEsMTIgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKIAogUmVmUHRyPEpT
T046Ok9iamVjdD4gU2Vzc2lvbjo6Y3JlYXRlRWxlbWVudChSZWZQdHI8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVPYmplY3Q7Ci0gICAgaWYg
KCF2YWx1ZS0+YXNPYmplY3QodmFsdWVPYmplY3QpKQorICAgIGF1dG8gdmFsdWVPYmplY3QgPSB2
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXZhbHVlT2JqZWN0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIFN0cmluZyBlbGVtZW50SUQ7Ci0gICAgaWYgKCF2YWx1ZU9iamVjdC0+
Z2V0U3RyaW5nKCJzZXNzaW9uLW5vZGUtIiArIGlkKCksIGVsZW1lbnRJRCkpCisgICAgYXV0byBl
bGVtZW50SUQgPSB2YWx1ZU9iamVjdC0+Z2V0U3RyaW5nKCJzZXNzaW9uLW5vZGUtIiArIGlkKCkp
OworICAgIGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwpAQCAtOTMyLDggKzk3Myw4IEBAIFN0cmluZyBTZXNzaW9uOjpleHRyYWN0RWxlbWVudElEKEpT
T046OlZhbHVlJiB2YWx1ZSkKICAgICBpZiAoIXZhbHVlLmFzT2JqZWN0KHZhbHVlT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVudElEOwot
ICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBl
bGVtZW50SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZyh3
ZWJFbGVtZW50SWRlbnRpZmllcigpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTU0LDU3ICs5
OTUsNTggQEAgdm9pZCBTZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCwgT3B0aW9uU2V0PEVsZW1lbnRMYXkKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgV1RGTW92ZShyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY3RPYmplY3Q7Ci0gICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgicmVjdCJfcywgcmVjdE9iamVjdCkpIHsKKwor
ICAgICAgICBhdXRvIHJlY3RPYmplY3QgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJyZWN0Il9zKTsKKyAgICAgICAgaWYgKCFyZWN0T2JqZWN0KSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxw
dHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgT3B0aW9uYWw8
aW50PiBlbGVtZW50WDsKICAgICAgICAgT3B0aW9uYWw8aW50PiBlbGVtZW50WTsKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gZWxlbWVudFBvc2l0aW9uOwotICAgICAgICBpZiAocmVjdE9i
amVjdC0+Z2V0T2JqZWN0KCJvcmlnaW4iX3MsIGVsZW1lbnRQb3NpdGlvbikpIHsKLSAgICAgICAg
ICAgIGludCB4LCB5OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdl
cigieCJfcywgeCkgJiYgZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zLCB5KSkgewot
ICAgICAgICAgICAgICAgIGVsZW1lbnRYID0geDsKLSAgICAgICAgICAgICAgICBlbGVtZW50WSA9
IHk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8gZWxlbWVudFBvc2l0aW9uID0gcmVjdE9i
amVjdC0+Z2V0T2JqZWN0KCJvcmlnaW4iX3MpOworICAgICAgICBpZiAoZWxlbWVudFBvc2l0aW9u
KSB7CisgICAgICAgICAgICBlbGVtZW50WCA9IGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdlcigi
eCJfcyk7CisgICAgICAgICAgICBlbGVtZW50WSA9IGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdl
cigieSJfcyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFlbGVtZW50WCB8fCAhZWxlbWVudFkp
IHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0LCBmYWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwog
ICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRXaWR0aDsKICAgICAgICAgT3B0aW9uYWw8aW50
PiBlbGVtZW50SGVpZ2h0OwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50U2l6
ZTsKLSAgICAgICAgaWYgKHJlY3RPYmplY3QtPmdldE9iamVjdCgic2l6ZSJfcywgZWxlbWVudFNp
emUpKSB7Ci0gICAgICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKLSAgICAgICAgICAgIGlmIChl
bGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigid2lkdGgiX3MsIHdpZHRoKSAmJiBlbGVtZW50U2l6ZS0+
Z2V0SW50ZWdlcigiaGVpZ2h0Il9zLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVu
dFdpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgZWxlbWVudEhlaWdodCA9IGhlaWdodDsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgYXV0byBlbGVtZW50U2l6ZSA9IHJlY3RPYmplY3QtPmdl
dE9iamVjdCgic2l6ZSJfcyk7CisgICAgICAgIGlmIChlbGVtZW50U2l6ZSkgeworICAgICAgICAg
ICAgZWxlbWVudFdpZHRoID0gZWxlbWVudFNpemUtPmdldEludGVnZXIoIndpZHRoIl9zKTsKKyAg
ICAgICAgICAgIGVsZW1lbnRIZWlnaHQgPSBlbGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigiaGVpZ2h0
Il9zKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWVsZW1lbnRXaWR0aCB8fCAhZWxlbWVudEhl
aWdodCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQsIGZhbHNlLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorCiAgICAgICAgIFJlY3QgcmVjdCA9IHsgeyBlbGVtZW50WC52YWx1ZSgpLCBlbGVtZW50WS52
YWx1ZSgpIH0sIHsgZWxlbWVudFdpZHRoLnZhbHVlKCksIGVsZW1lbnRIZWlnaHQudmFsdWUoKSB9
IH07CiAKLSAgICAgICAgYm9vbCBpc09ic2N1cmVkOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVkIl9zLCBpc09ic2N1cmVkKSkgewor
ICAgICAgICBhdXRvIGlzT2JzY3VyZWQgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0Qm9v
bGVhbigiaXNPYnNjdXJlZCJfcyk7CisgICAgICAgIGlmICghaXNPYnNjdXJlZCkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNl
LCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBpblZpZXdDZW50ZXJQb2ludE9iamVjdDsKLSAgICAgICAgaWYgKCFy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJpblZpZXdDZW50ZXJQb2ludCJfcywg
aW5WaWV3Q2VudGVyUG9pbnRPYmplY3QpKSB7CisKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQ
b2ludE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImluVmlld0Nl
bnRlclBvaW50Il9zKTsKKyAgICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdCkgewog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgV1RGOjpudWxsb3B0LCBpc09ic2N1
cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
bnQgaW5WaWV3Q2VudGVyUG9pbnRYID0gMCwgaW5WaWV3Q2VudGVyUG9pbnRZID0gMDsKLSAgICAg
ICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigieCJfcywgaW5WaWV3
Q2VudGVyUG9pbnRYKQotICAgICAgICAgICAgfHwgIWluVmlld0NlbnRlclBvaW50T2JqZWN0LT5n
ZXRJbnRlZ2VyKCJ5Il9zLCBpblZpZXdDZW50ZXJQb2ludFkpKSB7CisKKyAgICAgICAgYXV0byBp
blZpZXdDZW50ZXJQb2ludFggPSBpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigi
eCJfcyk7CisgICAgICAgIGF1dG8gaW5WaWV3Q2VudGVyUG9pbnRZID0gaW5WaWV3Q2VudGVyUG9p
bnRPYmplY3QtPmdldEludGVnZXIoInkiX3MpOworICAgICAgICBpZiAoIWluVmlld0NlbnRlclBv
aW50WCB8fCAhaW5WaWV3Q2VudGVyUG9pbnRZKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBQb2ludCBpblZpZXdDZW50
ZXJQb2ludCA9IHsgaW5WaWV3Q2VudGVyUG9pbnRYLCBpblZpZXdDZW50ZXJQb2ludFkgfTsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgaW5WaWV3Q2VudGVyUG9pbnQsIGlzT2JzY3Vy
ZWQsIG51bGxwdHIpOwogICAgIH0pOwpAQCAtMTA0OCwxNyArMTA5MCwyMCBAQCB2b2lkIFNlc3Np
b246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBGaW5kRQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVT
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKKwogICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgICAgICAg
ICBjYXNlIEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZTogewogICAgICAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVz
dWx0VmFsdWUpKTsKQEAgLTEwNzAsMTEgKzExMTUsMTIgQEAgdm9pZCBTZXNzaW9uOjpmaW5kRWxl
bWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRmlu
ZEUKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgRmluZEVsZW1lbnRzTW9kZTo6TXVsdGlwbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGVsZW1lbnRzQXJyYXk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRW
YWx1ZS0+YXNBcnJheShlbGVtZW50c0FycmF5KSkgeworICAgICAgICAgICAgICAgIGF1dG8gZWxl
bWVudHNBcnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgaWYg
KCFlbGVtZW50c0FycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVt
ZW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGVsZW1lbnRPYmplY3RzQXJyYXkg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZWxlbWVu
dHNBcnJheUxlbmd0aCA9IGVsZW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c0FycmF5TGVuZ3RoOyArK2kpIHsKQEAg
LTExMTAsMTYgKzExNTYsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5n
KSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJp
bmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZN
b3ZlKHJlc3VsdFZhbHVlKSk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6Tm9TdWNoRWxlbWVudCkpOwpAQCAtMTE1NywyNSArMTIwNiwz
MCBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVkKGNvbnN0IFN0cmluZyYgZWxlbWVu
dElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVl
OwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCBy
ZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChyZXN1bHRWYWx1
ZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2UpKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGJvb2xlYW5S
ZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhib29sZWFuUmVz
dWx0KSB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgeworCisgICAgICAgICAgICBhdXRvIGJv
b2xlYW5SZXN1bHQgPSByZXN1bHRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICgh
Ym9vbGVhblJlc3VsdCB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKSkpOwogICAgICAgICB9KTsKICAgICB9
KTsKQEAgLTEyMDgsMTYgKzEyNjIsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50VGV4dChj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3UKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUo
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAg
aWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVl
U3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFs
dWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUo
cmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTI0OSwxNiArMTMwNiwx
OSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRUYWdOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVu
dElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVl
OwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCBy
ZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAg
ICAgfSk7CiAgICAgfSk7CkBAIC0xMzE3LDE2ICsxMzc3LDE5IEBAIHZvaWQgU2Vzc2lvbjo6aXNF
bGVtZW50RW5hYmxlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAg
ICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3Vj
Y2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEz
NTgsMTYgKzE0MjEsMTkgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnREaXNwbGF5ZWQoY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmQKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkg
eworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2
YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFs
dWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTQwMCwxNiArMTQ2NiwxOSBAQCB2b2lk
IFNlc3Npb246OmdldEVsZW1lbnRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNv
bnN0IFN0cmluZyYgYXR0cmlidQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcg
dmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
dmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQi
X3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAg
ICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1
ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CkBAIC0xNDQxLDE2ICsxNTEwLDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFBy
b3BlcnR5KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZN
b3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAg
ICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2
YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAo
IXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBh
dXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZN
b3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE0ODIsMTYgKzE1
NTQsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBl
bGVtZW50SUQsIGNvbnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VP
YmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAg
ICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRW
YWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmlu
ZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAg
ICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTU1NSwzMiArMTYzMCwzNSBAQCB2b2lkIFNlc3Npb246
OmVsZW1lbnRJc0ZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZv
aWQgKENvbW1hbgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYg
KCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3Ry
aW5nKSkgeworCisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAg
ICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1
ZSkpIHsKKworICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZyk7CisgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92
ZShyZXN1bHRWYWx1ZSkpKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8U2Vzc2lvbjo6RmlsZVVw
bG9hZFR5cGU+IFNlc3Npb246OnBhcnNlRWxlbWVudElzRmlsZVVwbG9hZFJlc3VsdChjb25zdCBS
ZWZQdHI8SlNPTjo6VmFsdWU+JiByZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQ7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNPYmplY3QocmVzdWx0KSkKKyAg
ICBhdXRvIHJlc3VsdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYm9vbCBpc0ZpbGVVcGxvYWQ7
Ci0gICAgaWYgKCFyZXN1bHQtPmdldEJvb2xlYW4oImZpbGVVcGxvYWQiX3MsIGlzRmlsZVVwbG9h
ZCkgfHwgIWlzRmlsZVVwbG9hZCkKKyAgICBhdXRvIGlzRmlsZVVwbG9hZCA9IHJlc3VsdC0+Z2V0
Qm9vbGVhbigiZmlsZVVwbG9hZCJfKTsKKyAgICBpZiAoIWlzRmlsZVVwbG9hZCB8fCAhKmlzRmls
ZVVwbG9hZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGJvb2wgbXVsdGlw
bGU7Ci0gICAgaWYgKCFyZXN1bHQtPmdldEJvb2xlYW4oIm11bHRpcGxlIl9zLCBtdWx0aXBsZSkg
fHwgIW11bHRpcGxlKQorICAgIGF1dG8gbXVsdGlwbGUgPSByZXN1bHQtPmdldEJvb2xlYW4oIm11
bHRpcGxlIl8pOworICAgIGlmICghbXVsdGlwbGUgfHwgISptdWx0aXBsZSkKICAgICAgICAgcmV0
dXJuIEZpbGVVcGxvYWRUeXBlOjpTaW5nbGU7CiAKICAgICByZXR1cm4gRmlsZVVwbG9hZFR5cGU6
Ok11bHRpcGxlOwpAQCAtMTY0MSw4ICsxNzE5LDggQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xp
Y2soY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQK
ICAgICAgICAgICAgICAgICBnZXRFbGVtZW50VGFnTmFtZShlbGVtZW50SUQsIFt0aGlzLCBlbGVt
ZW50SUQsIGluVmlld0NlbnRlciA9IFdURk1vdmUoaW5WaWV3Q2VudGVyKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3Vs
dCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzRXJyb3IoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZ05hbWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh0YWdOYW1lKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdGFnTmFtZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNTdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXRhZ05hbWUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNPcHRpb25FbGVtZW50ID0gdGFnTmFtZSA9PSAib3B0aW9uIjsKICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC0xNjk3LDE2ICsxNzc1LDE5IEBAIHZvaWQgU2Vzc2lvbjo6
ZWxlbWVudElzRWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAo
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJp
bmcpKSB7CisKKyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAg
ICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVl
KSkgeworCisgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KHZhbHVlU3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3Zl
KHJlc3VsdFZhbHVlKSkpOwogICAgIH0pOwogfQpAQCAtMTczMCw4ICsxODExLDggQEAgdm9pZCBT
ZXNzaW9uOjplbGVtZW50Q2xlYXIoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGJvb2wgaXNFZGl0YWJsZTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LnJlc3VsdCgpLT5hc0Jvb2xlYW4oaXNFZGl0YWJsZSkgfHwgIWlzRWRpdGFibGUpIHsKKyAgICAg
ICAgICAgIGF1dG8gaXNFZGl0YWJsZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNCb29sZWFuKCk7Cisg
ICAgICAgICAgICBpZiAoIWlzRWRpdGFibGUgfHwgISppc0VkaXRhYmxlKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRFbGVtZW50U3RhdGUpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CkBAIC0yMDY1LDE2ICsyMTQ2LDE5IEBAIHZvaWQgU2Vzc2lvbjo6
Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmlu
ZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmlu
ZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAg
ICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1
ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAg
LTIwODIsOCArMjE2Niw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAKIFJlZlB0cjxKU09O
OjpWYWx1ZT4gU2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4m
JiByZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHJlc3VsdEFycmF5Owot
ICAgIGlmIChyZXN1bHRWYWx1ZS0+YXNBcnJheShyZXN1bHRBcnJheSkpIHsKKyAgICBpZiAoYXV0
byByZXN1bHRBcnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCkpIHsKICAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiByZXR1cm5WYWx1ZUFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwog
ICAgICAgICB1bnNpZ25lZCByZXN1bHRBcnJheUxlbmd0aCA9IHJlc3VsdEFycmF5LT5sZW5ndGgo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdEFycmF5TGVuZ3RoOyAr
K2kpCkBAIC0yMDk0LDggKzIxNzcsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+IFNlc3Npb246Omhh
bmRsZVNjcmlwdFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgcmVzdWx0VmFsdQogICAgIGlm
IChhdXRvIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4ocmVzdWx0
VmFsdWUpKSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgaWYgKHJlc3VsdFZhbHVlLT5hc09iamVjdChyZXN1bHRP
YmplY3QpKSB7CisgICAgaWYgKGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2Jq
ZWN0KCkpIHsKICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmV0dXJuVmFsdWVPYmplY3Qg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBhdXRvIGVuZCA9IHJlc3VsdE9iamVj
dC0+ZW5kKCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IHJlc3VsdE9iamVjdC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQpAQCAtMjE0OCwxNiArMjIzMCwxOSBAQCB2b2lkIFNlc3Npb246OmV4
ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBh
cmd1bWVudAogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJl
c3VsdCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAg
ICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcs
IHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZh
bHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhoYW5kbGVTY3JpcHRSZXN1bHQoV1RGTW92ZShy
ZXN1bHRWYWx1ZSkpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMjMzMiwxNiArMjQxNywx
NyBAQCB2b2lkIFNlc3Npb246OmdldEFsbENvb2tpZXMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXNBcnJheTsKLSAgICAgICAgICAgIGlmICghcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5KCJjb29raWVzIl9zLCBjb29raWVzQXJyYXkp
KSB7CisKKyAgICAgICAgICAgIGF1dG8gY29va2llc0FycmF5ID0gcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldEFycmF5KCJjb29raWVzIl9zKTsKKyAgICAgICAgICAgIGlmICghY29va2llc0Fy
cmF5KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBjb29raWVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvb2tpZXNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY29va2llVmFsdWUgPSBjb29raWVzQXJy
YXktPmdldChpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjb29raWVP
YmplY3Q7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb29raWVWYWx1ZS0+YXNPYmplY3QoY29va2ll
T2JqZWN0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gY29va2llT2JqZWN0ID0gY29va2llc0Fy
cmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb29raWVPYmpl
Y3QpIHsKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjM2NSwxNCArMjQ1
MSwxMSBAQCB2b2lkIFNlc3Npb246OmdldE5hbWVkQ29va2llKGNvbnN0IFN0cmluZyYgbmFtZSwg
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKQogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXNBcnJheTsKLSAgICAgICAgcmVzdWx0
LnJlc3VsdCgpLT5hc0FycmF5KGNvb2tpZXNBcnJheSk7CisKKyAgICAgICAgYXV0byBjb29raWVz
QXJyYXkgPSByZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvb2tpZXNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAg
UmVmUHRyPEpTT046OlZhbHVlPiBjb29raWVWYWx1ZSA9IGNvb2tpZXNBcnJheS0+Z2V0KGkpOwot
ICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0OwotICAgICAgICAg
ICAgY29va2llVmFsdWUtPmFzT2JqZWN0KGNvb2tpZU9iamVjdCk7Ci0gICAgICAgICAgICBTdHJp
bmcgY29va2llTmFtZTsKLSAgICAgICAgICAgIGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1l
Il9zLCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGF1dG8gY29va2llT2JqZWN0ID0gY29va2ll
c0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBhdXRvIGNvb2tpZU5hbWUg
PSBjb29raWVPYmplY3QtPmdldFN0cmluZygibmFtZSJfcyk7CiAgICAgICAgICAgICBpZiAoY29v
a2llTmFtZSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKGNvb2tpZU9iamVjdCkpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yNzA0LDExICsyNzg3LDEzIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0QWxl
cnRUZXh0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdU
Rk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlU3RyaW5nKSkg
eworCisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2Vz
cyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHZhbHVlU3RyaW5nKSkpOwogICAgIH0pOwogfQpAQCAtMjc1
OCwxMSArMjg0MywxMyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9wdGlvbmFsPFN0
cmluZz4gZWxlbWVudElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YTsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygiZGF0YSJfcywgZGF0YSkpIHsKKworICAgICAgICAgICAg
YXV0byBkYXRhID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiZGF0YSJfcyk7
CisgICAgICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZh
bHVlOjpjcmVhdGUoZGF0YSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bkhvc3QuY3BwCmluZGV4IGQxNjliOTVjNGI2Y2VlNDI4OWQ4Yzg4OWU1NTNkZjc2Mzk1NWFhYmMu
LjQ3MmViZGZhZjRhNjJiNmIyMDBiNGQxZWM3YjIxYmU1OTExODVlMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vz
c2lvbkhvc3QuY3BwCkBAIC02MiwzMSArNjIsMjcgQEAgbG9uZyBTZXNzaW9uSG9zdDo6c2VuZENv
bW1hbmRUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBSZWZQdHI8SlNPTjo6T2JqZWMK
IAogdm9pZCBTZXNzaW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSwgbWVzc2FnZVZhbHVlKSkKKyAgICBhdXRvIG1l
c3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCFt
ZXNzYWdlVmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYgKCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VP
YmplY3QpKQorICAgIGF1dG8gbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxvbmcg
c2VxdWVuY2VJRDsKLSAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoImlkIl9zLCBz
ZXF1ZW5jZUlEKSkKKyAgICBhdXRvIHNlcXVlbmNlSUQgPSBtZXNzYWdlT2JqZWN0LT5nZXRJbnRl
Z2VyKCJpZCJfcyk7CisgICAgaWYgKCFzZXF1ZW5jZUlEKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIHJlc3BvbnNlSGFuZGxlciA9IG1fY29tbWFuZFJlcXVlc3RzLnRha2Uoc2VxdWVuY2VJ
RCk7CisgICAgYXV0byByZXNwb25zZUhhbmRsZXIgPSBtX2NvbW1hbmRSZXF1ZXN0cy50YWtlKCpz
ZXF1ZW5jZUlEKTsKICAgICBBU1NFUlQocmVzcG9uc2VIYW5kbGVyKTsKIAogICAgIENvbW1hbmRS
ZXNwb25zZSByZXNwb25zZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlcnJvck9iamVjdDsK
LSAgICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJlcnJvciJfcywgZXJyb3JPYmplY3Qp
KSB7CisgICAgaWYgKGF1dG8gZXJyb3JPYmplY3QgPSBtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
ImVycm9yIl9zKSkgewogICAgICAgICByZXNwb25zZS5yZXNwb25zZU9iamVjdCA9IFdURk1vdmUo
ZXJyb3JPYmplY3QpOwogICAgICAgICByZXNwb25zZS5pc0Vycm9yID0gdHJ1ZTsKLSAgICB9IGVs
c2UgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgICAg
IGlmIChtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInJlc3VsdCJfcywgcmVzdWx0T2JqZWN0KSAm
JiByZXN1bHRPYmplY3QtPnNpemUoKSkKLSAgICAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0ID0gV1RGTW92ZShyZXN1bHRPYmplY3QpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8g
cmVzdWx0T2JqZWN0ID0gbWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpKQorICAg
ICAgICByZXNwb25zZS5yZXNwb25zZU9iamVjdCA9IFdURk1vdmUocmVzdWx0T2JqZWN0KTsKIAog
ICAgIHJlc3BvbnNlSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNlKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwIGIvU291cmNlL1dlYkRyaXZlci9X
ZWJEcml2ZXJTZXJ2aWNlLmNwcAppbmRleCA5YmI5NzZkOWYwYzVlM2I0ODliMjA5ZjNkYjg1MGRj
MzIxYjYwZjRlLi43N2FhODlkYjM1YmMyNjIwMDFhNTdjODY2ZWI2NDdkOTRlZDMxYTA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKQEAgLTIzOSwxMyArMjM5LDE0IEBAIHZv
aWQgV2ViRHJpdmVyU2VydmljZTo6aGFuZGxlUmVxdWVzdChIVFRQUmVxdWVzdEhhbmRsZXI6OlJl
cXVlc3QmJiByZXF1ZXN0LCBGdW5jCiAKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzT2JqZWN0OwogICAgIGlmIChtZXRob2QudmFsdWUoKSA9PSBIVFRQTWV0aG9kOjpQb3N0KSB7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04oU3RyaW5nOjpmcm9tVVRGOChyZXF1ZXN0LmRhdGEsIHJl
cXVlc3QuZGF0YUxlbmd0aCksIG1lc3NhZ2VWYWx1ZSkpIHsKKyAgICAgICAgYXV0byBtZXNzYWdl
VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKFN0cmluZzo6ZnJvbVVURjgocmVxdWVzdC5k
YXRhLCByZXF1ZXN0LmRhdGFMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlVmFsdWUpIHsK
ICAgICAgICAgICAgIHNlbmRSZXNwb25zZShXVEZNb3ZlKHJlcGx5SGFuZGxlciksIENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbWVzc2FnZVZh
bHVlLT5hc09iamVjdChwYXJhbWV0ZXJzT2JqZWN0KSkgeworICAgICAgICBwYXJhbWV0ZXJzT2Jq
ZWN0ID0gbWVzc2FnZVZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnNP
YmplY3QpIHsKICAgICAgICAgICAgIHNlbmRSZXNwb25zZShXVEZNb3ZlKHJlcGx5SGFuZGxlciks
IENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJn
dW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01h
bmFnZXIuanMKaW5kZXggNjhhZWFhOTc4NzAyOGVlOGQxODU4YTFkMjcwNzUwMzM2MGJkNGU5Mi4u
MTViNjIzMWFmMzNiNGNmN2VlYjhkMjkwOTg3M2I0ZGE0YTViYTdhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9D
U1NNYW5hZ2VyLmpzCkBAIC0yMDMsMzIgKzIwMywzNCBAQCBXSS5DU1NNYW5hZ2VyID0gY2xhc3Mg
Q1NTTWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBpZiAoIXRoaXMuY2FuRm9yY2VB
cHBlYXJhbmNlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbGV0IHByb3RvY29s
TmFtZSA9ICIiOworICAgICAgICBsZXQgY29tbWFuZEFyZ3VtZW50cyA9IHt9OwogCiAgICAgICAg
IHN3aXRjaCAobmFtZSkgewogICAgICAgICBjYXNlIFdJLkNTU01hbmFnZXIuQXBwZWFyYW5jZS5M
aWdodDoKLSAgICAgICAgICAgIHByb3RvY29sTmFtZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5Q
YWdlLkFwcGVhcmFuY2UuTGlnaHQ7CisgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVh
cmFuY2UgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkxpZ2h0OwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBXSS5DU1NNYW5hZ2VyLkFwcGVhcmFuY2Uu
RGFyazoKLSAgICAgICAgICAgIHByb3RvY29sTmFtZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5Q
YWdlLkFwcGVhcmFuY2UuRGFyazsKKyAgICAgICAgICAgIGNvbW1hbmRBcmd1bWVudHMuYXBwZWFy
YW5jZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5QYWdlLkFwcGVhcmFuY2UuRGFyazsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgbnVsbDoKLSAgICAgICAgY2FzZSB1bmRlZmlu
ZWQ6Ci0gICAgICAgIGNhc2UgIiI6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSAiIjsKKyAg
ICAgICAgICAgIC8vIENPTVBBVElCSUxJVFkgKGlPUyAxNCk6IHRoZSBgYXBwZWFyYW5jZWBgIHBh
cmFtZXRlciBvZiBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNlYCB3YXMgbm90IG9wdGlvbmFsLgor
ICAgICAgICAgICAgLy8gU2luY2Ugc3VwcG9ydCBjYW4ndCBiZSB0ZXN0ZWQgZGlyZWN0bHksIGNo
ZWNrIGZvciB0aGUgYG9wdGlvbnNgYCBwYXJhbWV0ZXIgb2YgYERPTURlYnVnZ2VyLnNldERPTUJy
ZWFrcG9pbnRgIChpT1MgMTQuMCspLgorICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBleHBsaWNp
dCB2ZXJzaW9uIGNoZWNraW5nIG9uY2UgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ4NjgwIGlzIGZp
eGVkLgorICAgICAgICAgICAgaWYgKCFJbnNwZWN0b3JCYWNrZW5kLmhhc0NvbW1hbmQoIkRPTURl
YnVnZ2VyLnNldERPTUJyZWFrcG9pbnQiLCAib3B0aW9ucyIpKQorICAgICAgICAgICAgICAgIGNv
bW1hbmRBcmd1bWVudHMuYXBwZWFyYW5jZSA9ICIiOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEFib3J0IGZvciB1bmtub3duIHZhbHVlcy4K
KyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZhbHNlLCAiVW5rbm93biBhcHBlYXJhbmNlIiwg
bmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9m
b3JjZWRBcHBlYXJhbmNlID0gbmFtZSB8fCBudWxsOwogCiAgICAgICAgIGxldCB0YXJnZXQgPSBX
SS5hc3N1bWluZ01haW5UYXJnZXQoKTsKLSAgICAgICAgdGFyZ2V0LlBhZ2VBZ2VudC5zZXRGb3Jj
ZWRBcHBlYXJhbmNlKHByb3RvY29sTmFtZSkudGhlbigoKSA9PiB7CisgICAgICAgIHRhcmdldC5Q
YWdlQWdlbnQuc2V0Rm9yY2VkQXBwZWFyYW5jZS5pbnZva2UoY29tbWFuZEFyZ3VtZW50cykudGhl
bigoKSA9PiB7CiAgICAgICAgICAgICB0aGlzLm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCk7CiAg
ICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5DU1NNYW5hZ2VyLkV2
ZW50LkZvcmNlZEFwcGVhcmFuY2VEaWRDaGFuZ2UsIHthcHBlYXJhbmNlOiB0aGlzLl9mb3JjZWRB
cHBlYXJhbmNlfSk7CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZp
ZXcuanMKaW5kZXggNDgyZTE0MmFlMTFkNjNjMDAxNWY5NmM3NGJjYjJkZWEyZmU1MDY5ZC4uOTE4
MzZlY2M3Njk3NzU2YTk2NmVmZWE3MTAzYzkyZDM0MDhlNDQ2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmll
dy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0
aW5nc1RhYkNvbnRlbnRWaWV3LmpzCkBAIC0zNDYsMTQgKzM0NiwxOCBAQCBXSS5TZXR0aW5nc1Rh
YkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJDb250ZW50VmlldyBleHRlbmRzIFdJLlRh
YkNvbnRlbnRWaQogICAgICAgICAgICAgICAgIFtXSS5Mb2dnaW5nQ2hhbm5lbC5MZXZlbC5WZXJi
b3NlLCBXSS5VSVN0cmluZygiVmVyYm9zZSIpXSwKICAgICAgICAgICAgIF07CiAgICAgICAgICAg
ICBjb25zdCBlZGl0b3JMYWJlbHMgPSB7Ci0gICAgICAgICAgICAgICAgbWVkaWE6IFdJLlVJU3Ry
aW5nKCJNZWRpYSBMb2dnaW5nOiIpLAotICAgICAgICAgICAgICAgIG1lZGlhc291cmNlOiBXSS5V
SVN0cmluZygiTVNFIExvZ2dpbmc6IiksCi0gICAgICAgICAgICAgICAgd2VicnRjOiBXSS5VSVN0
cmluZygiV2ViUlRDIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VTb3VyY2UuTWVkaWFdOiBXSS5VSVN0cmluZygiTWVkaWEgTG9nZ2luZzoiKSwK
KyAgICAgICAgICAgICAgICBbV0kuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5NZWRpYVNv
dXJjZV06IFdJLlVJU3RyaW5nKCJNU0UgTG9nZ2luZzoiKSwKKyAgICAgICAgICAgICAgICBbV0ku
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5XZWJSVENdOiBXSS5VSVN0cmluZygiV2ViUlRD
IExvZ2dpbmc6IiksCiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBsZXQgY2hhbm5lbHMg
PSBXSS5jb25zb2xlTWFuYWdlci5jdXN0b21Mb2dnaW5nQ2hhbm5lbHM7CiAgICAgICAgICAgICBm
b3IgKGxldCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7Ci0gICAgICAgICAgICAgICAgbGV0IGxvZ0Vk
aXRvciA9IGNvbnNvbGVTZXR0aW5nc1ZpZXcuYWRkR3JvdXBXaXRoQ3VzdG9tU2V0dGluZyhlZGl0
b3JMYWJlbHNbY2hhbm5lbC5zb3VyY2VdLCBXSS5TZXR0aW5nRWRpdG9yLlR5cGUuU2VsZWN0LCB7
dmFsdWVzOiBsb2dMZXZlbHN9KTsKKyAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSBlZGl0b3JM
YWJlbHNbY2hhbm5lbC5zb3VyY2VdOworICAgICAgICAgICAgICAgIGlmICghbGFiZWwpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgbGV0IGxvZ0VkaXRv
ciA9IGNvbnNvbGVTZXR0aW5nc1ZpZXcuYWRkR3JvdXBXaXRoQ3VzdG9tU2V0dGluZyhsYWJlbCwg
V0kuU2V0dGluZ0VkaXRvci5UeXBlLlNlbGVjdCwge3ZhbHVlczogbG9nTGV2ZWxzfSk7CiAgICAg
ICAgICAgICAgICAgbG9nRWRpdG9yLnZhbHVlID0gY2hhbm5lbC5sZXZlbDsKICAgICAgICAgICAg
ICAgICBsb2dFZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcihXSS5TZXR0aW5nRWRpdG9yLkV2ZW50LlZh
bHVlRGlkQ2hhbmdlLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHRhcmdl
dCBvZiBXSS50YXJnZXRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9BdXRvbWF0aW9uLmpzb24gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL0F1dG9tYXRpb24uanNvbgppbmRleCAzZGNiMjE0MWViMGQyNzk0NzA3ZGUyODRjODcwNzEw
ZTg3NzIxYzM5Li5lYjNjZGI1Zjg2NmM1ZjkzYTg4MjI5ODNhNDlkOTE2ZjNlNmVhZmU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNv
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNv
bgpAQCAtMzIsNyArMzIsOCBAQAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBjb29y
ZGluYXRlIHN5c3RlbSBpbiB3aGljaCByZWN0cywgcG9pbnRzLCBhbmQgc2l6ZXMgYXJlIHRvIGJl
IGludGVycHJldGVkLiIsCiAgICAgICAgICAgICAiZW51bSI6IFsKICAgICAgICAgICAgICAgICAi
UGFnZSIsCi0gICAgICAgICAgICAgICAgIlZpZXdwb3J0IgorICAgICAgICAgICAgICAgICJWaWV3
cG9ydCIsCisgICAgICAgICAgICAgICAgIkxheW91dFZpZXdwb3J0IgogICAgICAgICAgICAgXQog
ICAgICAgICB9LAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IGQ4N2E0ZGZl
Yzc5NGYzMWRjYjY0ZTVlOWVmNGJjZTRiMThjMTkyYTIuLjNmN2U0MGU1OGQ0YWQ4MWFmNzQyMDhi
Y2E2MTBiYTlmOGY1MTc3ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0zMDUsNyArMzA1
LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0cyhSZWY8
R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYKICAgICBnZXROZXh0Q29udGV4dChtYWtlUmVm
KCp0aGlzKSwgV1RGTW92ZShwYWdlcyksIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pjo6Y3JlYXRlKCksIFdURk1vdmUoY2FsbGJh
Y2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYg
Y2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiBoYW5kbGUsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykK
IHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxl
KTsKICAgICBpZiAoIXBhZ2UpCkBAIC0zMjgsNyArMzI4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbiB0b1Byb3Rv
Y29sKEEKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nKiBvcHRp
b25hbFByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29u
dGV4dChPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRQcmVzZW50YXRpb24+JiYgcHJlc2VudGF0aW9uSGludCwgUmVmPENyZWF0ZUJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAg
ICAgaWYgKCFtX2NsaWVudCkKQEAgLTMzNiwxMSArMzM2LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVz
ZW50YXQKIAogICAgIHVpbnQxNl90IG9wdGlvbnMgPSAwOwogCi0gICAgaWYgKG9wdGlvbmFsUHJl
c2VudGF0aW9uSGludCkgewotICAgICAgICBhdXRvIHBhcnNlZFByZXNlbnRhdGlvbkhpbnQgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFBy
ZXNlbnRhdGlvbj4oKm9wdGlvbmFsUHJlc2VudGF0aW9uSGludCk7Ci0gICAgICAgIGlmIChwYXJz
ZWRQcmVzZW50YXRpb25IaW50Lmhhc1ZhbHVlKCkgJiYgcGFyc2VkUHJlc2VudGF0aW9uSGludC52
YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dFByZXNlbnRhdGlvbjo6VGFiKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBBUEk6OkF1dG9tYXRp
b25TZXNzaW9uQnJvd3NpbmdDb250ZXh0T3B0aW9uc1ByZWZlck5ld1RhYjsKLSAgICB9CisgICAg
aWYgKHByZXNlbnRhdGlvbkhpbnQgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uOjpUYWIpCisgICAgICAgIG9wdGlvbnMgfD0gQVBJ
OjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnNQcmVmZXJOZXdUYWI7CiAK
ICAgICBtX2NsaWVudC0+cmVxdWVzdE5ld1BhZ2VXaXRoT3B0aW9ucygqdGhpcywgc3RhdGljX2Nh
c3Q8QVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnM+KG9wdGlvbnMp
LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShXZWJQYWdlUHJveHkqIHBhZ2UpIHsKICAgICAgICAgaWYgKCFwYWdlKQpAQCAtMzUy
LDIzICszNDksMjUgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdD
b250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXQKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2xvc2VCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlKQorSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2xv
c2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAg
IHBhZ2UtPmNsb3NlUGFnZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgUmVm
PFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVI
YW5kbGUmIGZyYW1lSGFuZGxlLCBSZWY8U3dpdGNoVG9Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JI
YW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJv
b2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURG
b3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1w
dHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJ
REZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90
Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90
Rm91bmQpOwogCkBAIC0zODEsMjUgKzM4MCwyNSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
Ojpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAog
ICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9m
QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbmFsT3JpZ2luT2JqZWN0LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbmFsU2l6ZU9i
amVjdCwgUmVmPFNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxs
YmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFdpbmRvd0ZyYW1lT2ZCcm93c2lu
Z0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3JpZ2luLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHNpemUsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHg7Ci0gICAg
T3B0aW9uYWw8ZmxvYXQ+IHk7Ci0gICAgaWYgKG9wdGlvbmFsT3JpZ2luT2JqZWN0KSB7Ci0gICAg
ICAgIGlmICghKHggPSBvcHRpb25hbE9yaWdpbk9iamVjdC0+Z2V0TnVtYmVyPGZsb2F0PigieCJf
cykpKQorICAgIE9wdGlvbmFsPGRvdWJsZT4geDsKKyAgICBPcHRpb25hbDxkb3VibGU+IHk7Cisg
ICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAoISh4ID0gb3JpZ2luLT5nZXREb3VibGUoIngi
X3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ3gnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5k
IG9yIGludmFsaWQuIik7CiAKLSAgICAgICAgaWYgKCEoeSA9IG9wdGlvbmFsT3JpZ2luT2JqZWN0
LT5nZXROdW1iZXI8ZmxvYXQ+KCJ5Il9zKSkpCisgICAgICAgIGlmICghKHkgPSBvcmlnaW4tPmdl
dERvdWJsZSgieSJfcykpKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAneScgcGFyYW1ldGVyIHdh
cyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxmbG9hdD4g
d2lkdGg7Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGhlaWdodDsKLSAgICBpZiAob3B0aW9uYWxTaXpl
T2JqZWN0KSB7Ci0gICAgICAgIGlmICghKHdpZHRoID0gb3B0aW9uYWxTaXplT2JqZWN0LT5nZXRO
dW1iZXI8ZmxvYXQ+KCJ3aWR0aCJfcykpKQorICAgIE9wdGlvbmFsPGRvdWJsZT4gd2lkdGg7Cisg
ICAgT3B0aW9uYWw8ZG91YmxlPiBoZWlnaHQ7CisgICAgaWYgKHNpemUpIHsKKyAgICAgICAgaWYg
KCEod2lkdGggPSBzaXplLT5nZXREb3VibGUoIndpZHRoIl9zKSkpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVy
LCAiVGhlICd3aWR0aCcgcGFyYW1ldGVyIHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAot
ICAgICAgICBpZiAoIShoZWlnaHQgPSBvcHRpb25hbFNpemVPYmplY3QtPmdldE51bWJlcjxmbG9h
dD4oImhlaWdodCJfcykpKQorICAgICAgICBpZiAoIShoZWlnaHQgPSBzaXplLT5nZXREb3VibGUo
ImhlaWdodCJfcykpKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAnaGVpZ2h0JyBwYXJhbWV0ZXIg
d2FzIG5vdCBmb3VuZCBvciBpbnZhbGlkLiIpOwogCiAgICAgICAgIGlmICh3aWR0aC52YWx1ZSgp
IDwgMCkKQEAgLTQyOCwyNiArNDI3LDE4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNl
dFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsCiAgICAg
fSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpQYWdlTG9hZFN0cmF0ZWd5PiBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZykKK3N0YXRpYyBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5IHBhZ2VMb2FkU3Ry
YXRlZ3lGcm9tUGFyYW1ldGVyKE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5KQogewotICAg
IGlmICghb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKQotICAgICAgICByZXR1cm4gZGVm
YXVsdFBhZ2VMb2FkU3RyYXRlZ3k7Ci0KLSAgICBhdXRvIHBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3kg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRl
Z3k+KCpvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFyc2VkUGFn
ZUxvYWRTdHJhdGVneSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4g
cGFyc2VkUGFnZUxvYWRTdHJhdGVneTsKKyAgICByZXR1cm4gb3B0aW9uYWxQYWdlTG9hZFN0cmF0
ZWd5LnZhbHVlT3IoZGVmYXVsdFBhZ2VMb2FkU3RyYXRlZ3kpOwogfQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJs
ZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxl
dGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRG
b3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIG9wdGlvbmFsRnJh
bWVIYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VM
b2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+
JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxl
dGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQ
YWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5k
KTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3Ry
aW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFw
YWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRT
dHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdl
TG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQg
PyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBk
ZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAgLy8gSWYgcGFnZSBpcyBsb2FkaW5nIGFuZCB0
aGVyZSdzIGFuIGFjdGl2ZSBKYXZhU2NyaXB0IGRpYWxvZyBpcyBwcm9iYWJseSBiZWNhdXNlIHRo
ZQpAQCAtNDU1LDIyICs0NDYsMjIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb24KICAgICAvLyBs
b2FkIHdpbGwgbm90IGZpbmlzaCB1bnRpbCB0aGUgZGlhbG9nIGlzIGRpc21pc3NlZC4gSW5zdGVh
ZCBvZiB3YWl0aW5nIGZvciB0aGUgdGltZW91dCwKICAgICAvLyB3ZSByZXR1cm4gd2l0aG91dCB3
YWl0aW5nIHNpbmNlIHdlIGtub3cgaXQgd2lsbCB0aW1lb3V0IGZvciBzdXJlLiBXZSB3YW50IHRv
IGNoZWNrCiAgICAgLy8gYXJndW1lbnRzIGZpcnN0LCB0aG91Z2guCi0gICAgYm9vbCBzaG91bGRU
aW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCkgPT0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneTo6Tm9ybWFs
CisgICAgYm9vbCBzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBwYWdlTG9hZFN0
cmF0ZWd5ID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRl
Z3k6Ok5vcm1hbAogICAgICAgICAmJiBwYWdlLT5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkg
JiYgbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdl
KTsKIAotICAgIGlmIChvcHRpb25hbEZyYW1lSGFuZGxlICYmICFvcHRpb25hbEZyYW1lSGFuZGxl
LT5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW9wdGlvbmFsRnJhbWVIYW5kbGUuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgICAgICBhdXRvIGZyYW1l
SUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKCpvcHRpb25hbEZyYW1lSGFuZGxlLCBmcmFtZU5vdEZv
dW5kKTsKKyAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25h
bEZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICAgICAgaWYgKGZyYW1lTm90Rm91bmQp
CiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZv
dW5kKTsKICAgICAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwYWdlLT5wcm9jZXNzKCkud2Vi
RnJhbWUoZnJhbWVJRC52YWx1ZSgpKTsKICAgICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogICAgICAg
ICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkKLSAgICAgICAgICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5
LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICAg
ICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25GcmFtZSgqZnJhbWUsIHBhZ2VMb2FkU3Ry
YXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmICghc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0KQotICAgICAg
ICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0
cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAg
ICAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9h
ZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9CiAK
ICAgICBpZiAoc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0KSB7CkBAIC01MjcsNyAr
NTE4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25GcmFtZShXZWJGcmFtZVByb3h5JiBmcmEKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6cmVzcG9uZFRvUGVuZGluZ1BhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQo
SGFzaE1hcDxXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPj4mIG1hcCkKIHsKLSAgICBJbnNwZWN0b3I6OkVycm9y
U3RyaW5nIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRp
bWVvdXQpOworICAgIGF1dG8gdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VS
Uk9SX05BTUUoVGltZW91dCk7CiAgICAgZm9yIChhdXRvIGlkIDogY29weVRvVmVjdG9yKG1hcC5r
ZXlzKCkpKSB7CiAgICAgICAgIGF1dG8gcGFnZSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShp
ZCk7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFrZShpZCk7CkBAIC01NDksNyArNTQw
LDcgQEAgc3RhdGljIFdlYlBhZ2VQcm94eSogZmluZFBhZ2VGb3JGcmFtZUlEKGNvbnN0IFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgRnJhbWUKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6cmVzcG9uZFRvUGVuZGluZ0ZyYW1lTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KEhh
c2hNYXA8RnJhbWVJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlPj4mIG1hcCkKIHsKLSAgICBJbnNwZWN0b3I6OkVycm9yU3RyaW5nIHRp
bWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOwor
ICAgIGF1dG8gdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUo
VGltZW91dCk7CiAgICAgZm9yIChhdXRvIGlkIDogY29weVRvVmVjdG9yKG1hcC5rZXlzKCkpKSB7
CiAgICAgICAgIGF1dG8qIHBhZ2UgPSBmaW5kUGFnZUZvckZyYW1lSUQoKm1fcHJvY2Vzc1Bvb2ws
IGlkKTsKICAgICAgICAgYXV0byBjYWxsYmFjayA9IG1hcC50YWtlKGlkKTsKQEAgLTU2OCw3ICs1
NTksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpsb2FkVGltZXJGaXJlZCgpCiAgICAg
cmVzcG9uZFRvUGVuZGluZ1BhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQobV9wZW5k
aW5nRWFnZXJOYXZpZ2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJQYWdlKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPE1heGltaXplV2lu
ZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246Om1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCiB7CiAgICAgYXV0byogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRs
ZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTU4NCw3ICs1NzUs
NyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdD
b250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbgogICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmhpZGVXaW5kb3dP
ZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEhpZGVXaW5k
b3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUp
OwogICAgIGlmICghcGFnZSkKQEAgLTY5Myw2NCArNjg0LDU2IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmRpZEV4aXRGdWxsU2NyZWVuRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKQog
ICAgICAgICBtX3dpbmRvd1N0YXRlVHJhbnNpdGlvbkNhbGxiYWNrKFdpbmRvd1RyYW5zaXRpb25l
ZFRvU3RhdGU6OlVuZnVsbHNjcmVlbik7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
Om5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNv
bnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
bmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgdXJsLCBP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5
PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFs
UGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5k
bGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVn
eSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRT
dHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBh
dXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZN
b3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0
ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpv
cHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAg
cGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCB1cmwpKTsKLSAgICB3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxv
YWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29CYWNr
SW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0
aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxv
YWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFj
aykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvQmFja0luQnJvd3NpbmdDb250ZXh0KGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgaGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdl
TG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91Ymxl
PiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdl
UHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFn
ZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlv
bmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQot
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxp
ZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBh
cmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFn
ZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1l
b3V0OwogCiAgICAgcGFnZS0+Z29CYWNrKCk7Ci0gICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91
dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvRm9yd2FyZEluQnJv
d3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
UGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFn
ZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJs
ZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRv
IHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVn
eSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGlu
dmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZy
b21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRv
IHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJv
bU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2Fk
VGltZW91dDsKIAogICAgIHBhZ2UtPmdvRm9yd2FyZCgpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9u
VG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9h
ZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZWxvYWRC
cm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRU
aW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZWxvYWRCcm93c2luZ0NvbnRleHQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5k
bGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3Ry
YXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0
aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JI
YW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJh
dGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1l
dGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAg
ICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihX
VEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1l
b3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRz
KCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAg
ICAgcGFnZS0+cmVsb2FkKHsgfSk7Ci0gICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25Q
YWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RG
TW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgq
cGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNr
KSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om5hdmlnYXRpb25PY2N1cnJlZEZv
ckZyYW1lKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lKQpAQCAtOTIyLDM1ICs5MDUsMjcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aGFuZGxlUnVuT3BlblBhbmVsKGNvbnN0IFdlYlBh
Z2VQcm94eSYgcGFnZSwgY29uc3QgV2UKICAgICBtX2RvbWFpbk5vdGlmaWVyLT5maWxlQ2hvb3Nl
ckRpc21pc3NlZChicm93c2luZ0NvbnRleHRIYW5kbGUsIGZhbHNlKTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29uc3QgSlNPTjo6QXJyYXkmIGFyZ3VtZW50cywg
Y29uc3QgYm9vbCogb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBjb25z
dCBkb3VibGUqIG9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0LCBSZWY8RXZhbHVhdGVKYXZhU2NyaXB0
RnVuY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVI
YW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIFJlZjxKU09OOjpBcnJheT4mJiBhcmd1bWVu
dHMsIE9wdGlvbmFsPGJvb2w+JiYgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgT3B0
aW9uYWw8ZG91YmxlPiYmIGNhbGxiYWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RG
b3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1l
SUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxG
cmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJh
bWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwog
ICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50c1Zl
Y3RvcjsKLSAgICBhcmd1bWVudHNWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50cy5sZW5n
dGgoKSk7CisgICAgYXJndW1lbnRzVmVjdG9yLnJlc2VydmVDYXBhY2l0eShhcmd1bWVudHMtPmxl
bmd0aCgpKTsKIAotICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBhcmd1bWVudHMpIHsKLSAgICAg
ICAgU3RyaW5nIGFyZ3VtZW50U3RyaW5nOwotICAgICAgICBhcmd1bWVudC0+YXNTdHJpbmcoYXJn
dW1lbnRTdHJpbmcpOwotICAgICAgICBhcmd1bWVudHNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGFy
Z3VtZW50U3RyaW5nKTsKLSAgICB9Ci0KLSAgICBib29sIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNr
QXJndW1lbnQgPSBvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQgPyAqb3B0
aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50IDogZmFsc2U7Ci0gICAgT3B0aW9u
YWw8ZG91YmxlPiBjYWxsYmFja1RpbWVvdXQ7Ci0gICAgaWYgKG9wdGlvbmFsQ2FsbGJhY2tUaW1l
b3V0KQotICAgICAgICBjYWxsYmFja1RpbWVvdXQgPSAqb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQ7
CisgICAgZm9yIChjb25zdCBhdXRvJiBhcmd1bWVudCA6IGFyZ3VtZW50cy5nZXQoKSkKKyAgICAg
ICAgYXJndW1lbnRzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChhcmd1bWVudC0+YXNTdHJpbmcoKSk7
CiAKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gbV9uZXh0RXZhbHVhdGVKYXZhU2NyaXB0Q2Fs
bGJhY2tJRCsrOwogICAgIG1fZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFja3Muc2V0
KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3VtZW50
c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY2FsbGJhY2tUaW1lb3V0
LCBjYWxsYmFja0lEKSwgMCk7CisgICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHBhZ2Ut
PndlYlBhZ2VJRCgpLCBmcmFtZUlELCBmdW5jdGlvbiwgYXJndW1lbnRzVmVjdG9yLCBleHBlY3Rz
SW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LnZhbHVlT3IoZmFsc2UpLCBXVEZNb3ZlKGNhbGxiYWNr
VGltZW91dCksIGNhbGxiYWNrSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24odWludDY0X3QgY2FsbGJhY2tJRCwgY29u
c3QgU3RyaW5nJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKQpAQCAtOTY1LDcgKzk0
MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvCiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3Vj
Y2VzcyhyZXN1bHQpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hp
bGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBpbnQqIG9wdGlvbmFsT3JkaW5hbCwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbE5hbWUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFu
ZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3Zv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIE9wdGlvbmFsPGludD4mJiBvcHRpb25hbE9yZGlu
YWwsIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxOYW1lLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZl
Q2hpbGRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIGlmICghb3B0aW9u
YWxPcmRpbmFsICYmICFvcHRpb25hbE5hbWUgJiYgIW9wdGlvbmFsTm9kZUhhbmRsZSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1Bh
cmFtZXRlciwgIkNvbW1hbmQgbXVzdCBzcGVjaWZ5IGEgY2hpbGQgZnJhbWUgYnkgb3JkaW5hbCwg
bmFtZSwgb3IgZWxlbWVudCBoYW5kbGUuIik7CkBAIC05NzUsNyArOTUwLDcgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHQKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Io
V2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAg
YXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8g
Km9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAg
ICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5v
dEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKQEAgLTk4OCwxMyArOTYzLDEzIEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2Vzcyho
YW5kbGVGb3JXZWJGcmFtZUlEKGZyYW1lSUQpKTsKICAgICB9OwogCi0gICAgaWYgKG9wdGlvbmFs
Tm9kZUhhbmRsZSkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdp
dGhOb2RlSGFuZGxlKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxOb2RlSGFu
ZGxlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghIW9wdGlvbmFsTm9k
ZUhhbmRsZSkgeworICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhO
b2RlSGFuZGxlKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBvcHRpb25hbE5vZGVIYW5kbGUp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAob3B0aW9uYWxOYW1lKSB7Ci0gICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVD
aGlsZEZyYW1lV2l0aE5hbWUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE5h
bWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCEhb3B0aW9uYWxOYW1l
KSB7CisgICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5hbWUocGFn
ZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG9wdGlvbmFsTmFtZSksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAwNiw3ICs5ODEsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5k
bGUsIFJlZjxSZXNvbHZlUGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3Zv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxl
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFn
ZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpA
QCAtMTAyOSwxNiArMTAwNCwyMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZl
UGFyZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleAogICAgIHBhZ2Ut
PnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNz
aW9uUHJveHk6OlJlc29sdmVQYXJlbnRGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPENvb3Jk
aW5hdGVTeXN0ZW0+IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKGNvbnN0IFN0cmlu
ZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxDb29yZGluYXRlU3lz
dGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCiB7Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcgPT0gIlBhZ2UiKQorICAgIHN3aXRjaCAoY29vcmRp
bmF0ZVN5c3RlbSkgeworICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
Q29vcmRpbmF0ZVN5c3RlbTo6UGFnZToKICAgICAgICAgcmV0dXJuIENvb3JkaW5hdGVTeXN0ZW06
OlBhZ2U7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcgPT0gIkxheW91dFZpZXdwb3J0
IikKKworICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0
ZVN5c3RlbTo6Vmlld3BvcnQ6CisgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpDb29yZGluYXRlU3lzdGVtOjpMYXlvdXRWaWV3cG9ydDoKICAgICAgICAgcmV0dXJuIENv
b3JkaW5hdGVTeXN0ZW06OkxheW91dFZpZXdwb3J0OworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5v
ZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29u
c3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3RyaW5nLCBSZWY8Q29tcHV0ZUVsZW1lbnRMYXlv
dXRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1
dGVFbGVtZW50TGF5b3V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUs
IE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW1WYWx1ZSwgUmVmPENvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5n
Q29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTA0OSw3ICsxMDMwLDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW4KICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKLSAgICBPcHRp
b25hbDxDb29yZGluYXRlU3lzdGVtPiBjb29yZGluYXRlU3lzdGVtID0gcHJvdG9jb2xTdHJpbmdU
b0Nvb3JkaW5hdGVTeXN0ZW0oY29vcmRpbmF0ZVN5c3RlbVN0cmluZyk7CisgICAgT3B0aW9uYWw8
Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3RlbSA9IHByb3RvY29sU3RyaW5nVG9Db29y
ZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1WYWx1ZSk7CiAgICAgaWYgKCFjb29yZGluYXRl
U3lzdGVtKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnY29vcmRpbmF0ZVN5c3RlbScg
aXMgaW52YWxpZC4iKTsKIApAQCAtMTA5MSw3ICsxMDcyLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW4KICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVudExheW91dChwYWdlLT53ZWJQ
YWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29v
cmRpbmF0ZVN5c3RlbS52YWx1ZSgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBj
b25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVt
ZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RP
cHRpb25FbGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAg
aWYgKCFwYWdlKQpAQCAtMTExNCw3ICsxMDk1LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmQK
ICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5OjpTZWxlY3RPcHRpb25FbGVtZW50KHBhZ2UtPndlYlBhZ2VJRCgp
LCBmcmFtZUlELCBub2RlSGFuZGxlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgYm9vbCogcmVzdWx0KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxib29sPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5nSmF2YVNjcmlwdERp
YWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQp
OwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTI0LDEwICsxMTA1LDEwIEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJv
clN0cmluZyYgZXJyCiAgICAgaWYgKCFwYWdlKQogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgICpyZXN1bHQgPSBtX2NsaWVudC0+
aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworICAgIHJldHVy
biBtX2NsaWVudC0+aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2Up
OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaXNtaXNzQ3VycmVudEphdmFTY3Jp
cHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0
RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIEFTU0VSVChtX2NsaWVu
dCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNDEsOSArMTEyMiwxMSBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpkaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9y
OjpFcnJvclN0cmluZwogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5v
SmF2YVNjcmlwdERpYWxvZyk7CiAKICAgICBtX2NsaWVudC0+ZGlzbWlzc0N1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlm
ICghbV9jbGllbnQpCkBAIC0xMTU3LDkgKzExNDAsMTEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb0phdmFTY3JpcHRE
aWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25Q
YWdlKCp0aGlzLCAqcGFnZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjptZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIFN0cmluZyogdGV4dCkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
U3RyaW5nPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHRE
aWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50
KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTE3MiwxMCArMTE1NywxMCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjptZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0
b3I6OkVycm9yU3RyaQogICAgIGlmICghbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFs
b2dPblBhZ2UoKnRoaXMsICpwYWdlKSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihOb0phdmFTY3JpcHREaWFsb2cpOwogCi0gICAgKnRleHQgPSBtX2NsaWVudC0+bWVz
c2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKyAgICBy
ZXR1cm4gbV9jbGllbnQtPm1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0
aGlzLCAqcGFnZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1
dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5n
JiBwcm9tcHRWYWx1ZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
V2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJv
bXB0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIHByb21wdFZhbHVl
KQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTEyMDcs
MTkgKzExOTIsMjEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0VXNlcklucHV0Rm9y
Q3VycmVudEphdmFTY3JpcHRQcm9tcHQoSW5zcGVjdG9yOjpFcnIKICAgICB9CiAKICAgICBtX2Ns
aWVudC0+c2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHRPblBhZ2UoKnRoaXMs
ICpwYWdlLCBwcm9tcHRWYWx1ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25z
dCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBjb25zdCBKU09OOjpBcnJheSogZmlsZUNvbnRlbnRz
KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZlB0cjxKU09OOjpBcnJh
eT4mJiBmaWxlQ29udGVudHMpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gbmV3RmlsZUxpc3Q7Ci0g
ICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmaWxlbmFtZXMubGVuZ3RoKCkp
OworICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLT5sZW5n
dGgoKSk7CiAKLSAgICBpZiAoZmlsZUNvbnRlbnRzICYmIGZpbGVDb250ZW50cy0+bGVuZ3RoKCkg
IT0gZmlsZW5hbWVzLmxlbmd0aCgpKQorICAgIGlmIChmaWxlQ29udGVudHMgJiYgZmlsZUNvbnRl
bnRzLT5sZW5ndGgoKSAhPSBmaWxlbmFtZXMtPmxlbmd0aCgpKQogICAgICAgICBTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFy
YW1ldGVycyAnZmlsZW5hbWVzJyBhbmQgJ2ZpbGVDb250ZW50cycgbXVzdCBoYXZlIGVxdWFsIGxl
bmd0aC4iKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLmxlbmd0aCgp
OyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lOwotICAgICAgICBpZiAoIWZpbGVuYW1l
cy5nZXQoaSktPmFzU3RyaW5nKGZpbGVuYW1lKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpbGVuYW1lcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBhdXRvIGZpbGVuYW1lID0gZmls
ZW5hbWVzLT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZmlsZW5hbWUpCiAgICAg
ICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVy
bmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlbmFtZXMnIGNvbnRhaW5zIGEgbm9uLXN0cmlu
ZyB2YWx1ZS4iKTsKIAogICAgICAgICBpZiAoIWZpbGVDb250ZW50cykgewpAQCAtMTIyNyw4ICsx
MjE0LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZp
bGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIGZpbGVEYXRhOwotICAgICAgICBpZiAoIWZpbGVD
b250ZW50cy0+Z2V0KGkpLT5hc1N0cmluZyhmaWxlRGF0YSkpCisgICAgICAgIGF1dG8gZmlsZURh
dGEgPSBmaWxlQ29udGVudHMtPmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFmaWxl
RGF0YSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXIgJ2ZpbGVDb250ZW50cycgY29udGFp
bnMgYSBub24tc3RyaW5nIHZhbHVlLiIpOwogCiAgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gbG9j
YWxGaWxlUGF0aCA9IHBsYXRmb3JtR2VuZXJhdGVMb2NhbEZpbGVQYXRoRm9yUmVtb3RlRmlsZShm
aWxlbmFtZSwgZmlsZURhdGEpOwpAQCAtMTIzOSw5ICsxMjI2LDExIEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluCiAgICAgfQogCiAgICAgbV9maWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZC5zd2Fw
KG5ld0ZpbGVMaXN0KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcm
IG5vZGVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0Zv
cklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxl
JiBmcmFtZUhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9k
ZUhhbmRsZSYgbm9kZUhhbmRsZSwgUmVmPEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywgUmVmPFNl
dEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2Vi
UGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhh
bmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTI1MywxMCArMTI0MiwxMCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihG
cmFtZU5vdEZvdW5kKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG5ld0ZpbGVMaXN0OwotICAgIG5l
d0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLmxlbmd0aCgpKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZXMuZ2V0KGkpLT5hc1N0
cmluZyhmaWxlbmFtZSkpCisgICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShm
aWxlbmFtZXMtPmxlbmd0aCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1l
cy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZW5hbWVzLT5n
ZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZmlsZW5hbWUpCiAgICAgICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9y
LCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBjb250YWlucyBhIG5vbi1zdHJpbmcgdmFsdWUu
Iik7CiAKICAgICAgICAgbmV3RmlsZUxpc3QuYXBwZW5kKGZpbGVuYW1lKTsKQEAgLTEyOTksNyAr
MTI4OCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpDb29raWU+PiBidWlsZEFycmF5Rm9yCiAgICAgcmV0dXJuIGNvb2tpZXM7CiB9
CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxHZXRBbGxDb29raWVzQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmIGNhbGxiYWNr
KQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93
c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEzMTcsNyArMTMwNiw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIFJlCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6R2V0Q29va2llc0Zv
ckZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBXVEY6Om51bGxvcHQpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZVNpbmds
ZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNp
bmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFn
ZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlm
ICghcGFnZSkKQEAgLTEzNDcsNyArMTMzNiw3IEBAIHN0YXRpYyBTdHJpbmcgZG9tYWluQnlBZGRp
bmdEb3RQcmVmaXhJZk5lZWRlZChTdHJpbmcgZG9tYWluKQogICAgIHJldHVybiBkb21haW47CiB9
CiAgICAgCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3Qg
U3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2ll
T2JqZWN0LCBSZWY8QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llT2JqZWN0LCBSZWY8QWRkU2luZ2xlQ29v
a2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQpAQCAtMTM1OCwxNCArMTM0NywxNiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRT
aW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsCiAKICAgICBX
ZWJDb3JlOjpDb29raWUgY29va2llOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5n
KCJuYW1lIl9zLCBjb29raWUubmFtZSkpCisgICAgY29va2llLm5hbWUgPSBjb29raWVPYmplY3Qt
PmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFjb29raWUubmFtZSkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRl
ciwgIlRoZSBwYXJhbWV0ZXIgJ25hbWUnIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBpZiAoIWNv
b2tpZU9iamVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpKQorICAgIGNvb2tp
ZS52YWx1ZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYgKCFj
b29raWUudmFsdWUpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICd2YWx1ZScgd2FzIG5v
dCBmb3VuZC4iKTsKIAotICAgIFN0cmluZyBkb21haW47Ci0gICAgaWYgKCFjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJkb21haW4iX3MsIGRvbWFpbikpCisgICAgYXV0byBkb21haW4gPSBjb29raWVP
YmplY3QtPmdldFN0cmluZygiZG9tYWluIl9zKTsKKyAgICBpZiAoIWRvbWFpbikKICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFt
ZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2RvbWFpbicgd2FzIG5vdCBmb3VuZC4iKTsKIAogICAgIC8v
IEluaGVyaXQgdGhlIGRvbWFpbi9ob3N0IGZyb20gdGhlIG1haW4gZnJhbWUncyBVUkwgaWYgaXQg
aXMgbm90IGV4cGxpY2l0bHkgc2V0LgpAQCAtMTM3NCwzMSArMTM2NSw0MSBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsCiAgICAgZWxzZQogICAgICAgICBjb29raWUuZG9tYWluID0gZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChkb21haW4pOwogCi0gICAgaWYgKCFjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJwYXRoIl9zLCBjb29raWUucGF0aCkpCisgICAgY29va2llLnBhdGggPSBjb29r
aWVPYmplY3QtPmdldFN0cmluZygicGF0aCJfcyk7CisgICAgaWYgKCFjb29raWUucGF0aCkKICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2lu
Z1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhdGgnIHdhcyBub3QgZm91bmQuIik7CiAKLSAg
ICBkb3VibGUgZXhwaXJlczsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXREb3VibGUoImV4cGly
ZXMiX3MsIGV4cGlyZXMpKQorICAgIGF1dG8gZXhwaXJlcyA9IGNvb2tpZU9iamVjdC0+Z2V0RG91
YmxlKCJleHBpcmVzIl9zKTsKKyAgICBpZiAoIWV4cGlyZXMpCiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUg
cGFyYW1ldGVyICdleHBpcmVzJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgY29va2llLmV4cGly
ZXMgPSBleHBpcmVzICogMTAwMC4wOworICAgIGNvb2tpZS5leHBpcmVzID0gKmV4cGlyZXMgKiAx
MDAwLjA7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZWN1cmUiX3MsIGNv
b2tpZS5zZWN1cmUpKQorICAgIGF1dG8gc2VjdXJlID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFu
KCJzZWN1cmUiX3MpOworICAgIGlmICghc2VjdXJlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAnc2VjdXJlJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgaWYgKCFjb29raWVPYmplY3Qu
Z2V0Qm9vbGVhbigic2Vzc2lvbiJfcywgY29va2llLnNlc3Npb24pKQorICAgIGNvb2tpZS5zZWN1
cmUgPSAqc2VjdXJlOworCisgICAgYXV0byBzZXNzaW9uID0gY29va2llT2JqZWN0LT5nZXRCb29s
ZWFuKCJzZXNzaW9uIl9zKTsKKyAgICBpZiAoIXNlc3Npb24pCiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUg
cGFyYW1ldGVyICdzZXNzaW9uJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgaWYgKCFjb29raWVP
YmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpCisgICAgY29v
a2llLnNlc3Npb24gPSAqc2Vzc2lvbjsKKworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmpl
Y3QtPmdldEJvb2xlYW4oImh0dHBPbmx5Il9zKTsKKyAgICBpZiAoIWh0dHBPbmx5KQogICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFy
YW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKKyAg
ICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CisKICAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAg
ICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENv
b2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAg
aWYgKCFwYWdlKQpAQCAtMTQxMSw5ICsxNDEyLDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmRlbGV0ZUFsbENvb2tpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
CiAKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3Qp
IH0pOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4m
IG91dF9wZXJtaXNzaW9ucykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBl
cm1pc3Npb25EYXRhPj4+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lv
bnMoKQogewogICAgIGF1dG8gcGVybWlzc2lvbnNPYmplY3RBcnJheSA9IEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPjo6
Y3JlYXRlKCk7CiAgICAgYXV0byBnZXRVc2VyTWVkaWFQZXJtaXNzaW9uT2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhOjpjcmVhdGUo
KQpAQCAtMTQyMiwzNCArMTQyNSwzNiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRT
ZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYQogICAgICAg
ICAucmVsZWFzZSgpOwogCiAgICAgcGVybWlzc2lvbnNPYmplY3RBcnJheS0+YWRkSXRlbShXVEZN
b3ZlKGdldFVzZXJNZWRpYVBlcm1pc3Npb25PYmplY3QpKTsKLSAgICBvdXRfcGVybWlzc2lvbnMg
PSBXVEZNb3ZlKHBlcm1pc3Npb25zT2JqZWN0QXJyYXkpOworICAgIHJldHVybiBXVEZNb3ZlKHBl
cm1pc3Npb25zT2JqZWN0QXJyYXkpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
ZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpBcnJheSYgcGVybWlzc2lvbnMpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRTZXNzaW9uUGVybWlzc2lvbnMoUmVmPEpT
T046OkFycmF5PiYmIHBlcm1pc3Npb25zKQogewotICAgIGZvciAoYXV0byBpdCA9IHBlcm1pc3Np
b25zLmJlZ2luKCk7IGl0ICE9IHBlcm1pc3Npb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBlcm1pc3Npb247Ci0gICAgICAgIGlmICghaXQtPmdldCgpLT5h
c09iamVjdChwZXJtaXNzaW9uKSkKKyAgICBmb3IgKGF1dG8gaXQgPSBwZXJtaXNzaW9ucy0+YmVn
aW4oKTsgaXQgIT0gcGVybWlzc2lvbnMtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIGF1dG8gcGVy
bWlzc2lvbiA9IGl0LT5nZXQoKS5hc09iamVjdCgpOworICAgICAgICBpZiAoIXBlcm1pc3Npb24p
CiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwZXJtaXNzaW9ucycgaXMgaW52YWxp
ZC4iKTsKIAotICAgICAgICBTdHJpbmcgcGVybWlzc2lvbk5hbWU7Ci0gICAgICAgIGlmICghcGVy
bWlzc2lvbi0+Z2V0U3RyaW5nKCJwZXJtaXNzaW9uIl9zLCBwZXJtaXNzaW9uTmFtZSkpCisgICAg
ICAgIGF1dG8gcGVybWlzc2lvbk5hbWUgPSBwZXJtaXNzaW9uLT5nZXRTdHJpbmcoInBlcm1pc3Np
b24iX3MpOworICAgICAgICBpZiAoIXBlcm1pc3Npb25OYW1lKQogICAgICAgICAgICAgU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAi
VGhlIHBhcmFtZXRlciAncGVybWlzc2lvbicgaXMgbWlzc2luZyBvciBpbnZhbGlkLiIpOwogCiAg
ICAgICAgIGF1dG8gcGFyc2VkUGVybWlzc2lvbk5hbWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uPihwZXJtaXNzaW9uTmFtZSk7CiAg
ICAgICAgIGlmICghcGFyc2VkUGVybWlzc2lvbk5hbWUpCiAgICAgICAgICAgICBTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUg
cGFyYW1ldGVyICdwZXJtaXNzaW9uJyBoYXMgYW4gdW5rbm93biB2YWx1ZS4iKTsKIAotICAgICAg
ICBib29sIHBlcm1pc3Npb25WYWx1ZTsKLSAgICAgICAgaWYgKCFwZXJtaXNzaW9uLT5nZXRCb29s
ZWFuKCJ2YWx1ZSJfcywgcGVybWlzc2lvblZhbHVlKSkKKyAgICAgICAgYXV0byBwZXJtaXNzaW9u
VmFsdWUgPSBwZXJtaXNzaW9uLT5nZXRCb29sZWFuKCJ2YWx1ZSJfcyk7CisgICAgICAgIGlmICgh
cGVybWlzc2lvblZhbHVlKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAndmFsdWUn
IGlzIG1pc3Npbmcgb3IgaW52YWxpZC4iKTsKIAogICAgICAgICBzd2l0Y2ggKHBhcnNlZFBlcm1p
c3Npb25OYW1lLnZhbHVlKCkpIHsKICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbjo6R2V0VXNlck1lZGlhOgotICAgICAgICAgICAg
bV9wZXJtaXNzaW9uRm9yR2V0VXNlck1lZGlhID0gcGVybWlzc2lvblZhbHVlOworICAgICAgICAg
ICAgbV9wZXJtaXNzaW9uRm9yR2V0VXNlck1lZGlhID0gKnBlcm1pc3Npb25WYWx1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAog
Ym9vbCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2hvdWxkQWxsb3dHZXRVc2VyTWVkaWFGb3JQYWdl
KGNvbnN0IFdlYlBhZ2VQcm94eSYpIGNvbnN0CkBAIC0xNDk0LDcgKzE0OTksNyBAQCBTaW11bGF0
ZWRJbnB1dFNvdXJjZSogV2ViQXV0b21hdGlvblNlc3Npb246OmlucHV0U291cmNlRm9yVHlwZShT
aW11bGF0ZWRJbnB1dFNvdQogfQogCiAvLyBNQVJLOiBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6
OkNsaWVudCBBUEkKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnZpZXdwb3J0SW5WaWV3Q2Vu
dGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVByb3h5JiBwYWdlLCBPcHRpb25hbDxGcmFtZUlkZW50
aWZpZXI+IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZCAo
T3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVy
cm9yPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp2
aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0
aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBGdW5jdGlvbjx2b2lkKE9wdGlv
bmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4p
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9p
ZChPcHRpb25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJ
bnRQb2ludD4sIGJvb2wpPiBkaWRDb21wdXRlRWxlbWVudExheW91dEhhbmRsZXIgPSBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oT3B0aW9uYWw8U3RyaW5n
PiBlcnJvclR5cGUsIFdlYkNvcmU6OkludFJlY3QsIE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50
PiBpblZpZXdDZW50ZXJQb2ludCwgYm9vbCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvclR5
cGUpIHsKQEAgLTE2MzUsNyArMTY0MCw3IEBAIHN0YXRpYyBXZWJFdmVudDo6TW9kaWZpZXIgcHJv
dG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2RpZmllcihJbnNwZWN0b3I6OlByb3RvY29sCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LCBjb25z
dCBTdHJpbmcmIG1vdXNlQnV0dG9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rp
b25TdHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQZXJm
b3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZjxKU09O
OjpPYmplY3Q+JiYgcmVxdWVzdGVkUG9zaXRpb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246Ok1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpNb3VzZUludGVyYWN0aW9uIG1vdXNlSW50ZXJhY3Rpb24sIFJlZjxKU09OOjpBcnJh
eT4mJiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogI2lmICFFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNU
SU9OUykKICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRl
ZCk7CkBAIC0xNjQ0LDQ4ICsxNjQ5LDQ0IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBl
cmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKCiAgICAg
aWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKLSAgICBmbG9hdCB4OwotICAgIGlmICghcmVxdWVzdGVkUG9zaXRpb25P
YmplY3QuZ2V0RG91YmxlKCJ4Il9zLCB4KSkKKyAgICBhdXRvIHggPSByZXF1ZXN0ZWRQb3NpdGlv
bi0+Z2V0RG91YmxlKCJ4Il9zKTsKKyAgICBpZiAoIXgpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFy
YW1ldGVyICd4JyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgZmxvYXQgeTsKLSAgICBpZiAoIXJl
cXVlc3RlZFBvc2l0aW9uT2JqZWN0LmdldERvdWJsZSgieSJfcywgeSkpCisgICAgYXV0byBmbG9h
dFggPSBzdGF0aWNfY2FzdDxmbG9hdD4oKngpOworCisgICAgYXV0byB5ID0gcmVxdWVzdGVkUG9z
aXRpb24tPmdldERvdWJsZSgieSJfcyk7CisgICAgaWYgKCF5KQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAneScgd2FzIG5vdCBmb3VuZC4iKTsKIAorICAgIGF1dG8gZmxvYXRZID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KCp5KTsKKwogICAgIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+
IGtleU1vZGlmaWVyczsKLSAgICBmb3IgKGF1dG8gaXQgPSBrZXlNb2RpZmllclN0cmluZ3MuYmVn
aW4oKTsgaXQgIT0ga2V5TW9kaWZpZXJTdHJpbmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFN0
cmluZyBtb2RpZmllclN0cmluZzsKLSAgICAgICAgaWYgKCFpdC0+Z2V0KCktPmFzU3RyaW5nKG1v
ZGlmaWVyU3RyaW5nKSkKKyAgICBmb3IgKGF1dG8gaXQgPSBrZXlNb2RpZmllclN0cmluZ3MtPmJl
Z2luKCk7IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
YXV0byBtb2RpZmllclN0cmluZyA9IGl0LT5nZXQoKS5hc1N0cmluZygpOworICAgICAgICBpZiAo
IW1vZGlmaWVyU3RyaW5nKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ21vZGlm
aWVycycgaXMgaW52YWxpZC4iKTsKIAogICAgICAgICBhdXRvIHBhcnNlZE1vZGlmaWVyID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlNb2RpZmllcj4obW9kaWZp
ZXJTdHJpbmcpOwogICAgICAgICBpZiAoIXBhcnNlZE1vZGlmaWVyKQogICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRl
ciwgIkEgbW9kaWZpZXIgaW4gdGhlICdtb2RpZmllcnMnIGFycmF5IGlzIGludmFsaWQuIik7CisK
ICAgICAgICAga2V5TW9kaWZpZXJzLmFkZChwcm90b2NvbE1vZGlmaWVyVG9XZWJFdmVudE1vZGlm
aWVyKHBhcnNlZE1vZGlmaWVyLnZhbHVlKCkpKTsKICAgICB9CiAKLSAgICBwYWdlLT5nZXRXaW5k
b3dGcmFtZVdpdGhDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigqcGFnZSksIHgs
IHksIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcsIG1vdXNlQnV0dG9uU3RyaW5nLCBrZXlNb2RpZmll
cnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgbXV0YWJsZSB7CisgICAgcGFnZS0+
Z2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBh
Z2UpLCBmbG9hdFgsIGZsb2F0WSwgbW91c2VJbnRlcmFjdGlvbiwgbW91c2VCdXR0b24sIGtleU1v
ZGlmaWVyc10oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRhYmxlIHsKKyAgICAg
ICAgZmxvYXRYID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgZmxvYXRYKSwgd2luZG93RnJhbWUu
c2l6ZSgpLndpZHRoKCkpOworICAgICAgICBmbG9hdFkgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBm
LCBmbG9hdFkpLCB3aW5kb3dGcmFtZS5zaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgICAgIHggPSBz
dGQ6Om1pbihzdGQ6Om1heCgwLjBmLCB4KSwgd2luZG93RnJhbWUuc2l6ZSgpLndpZHRoKCkpOwot
ICAgICAgICB5ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeSksIHdpbmRvd0ZyYW1lLnNpemUo
KS5oZWlnaHQoKSk7CisgICAgICAgIFdlYkNvcmU6OkludFBvaW50IGxvY2F0aW9uSW5WaWV3cG9y
dCA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRpY19jYXN0PGludD4oZmxvYXRYKSwgc3RhdGljX2Nh
c3Q8aW50PihmbG9hdFkpKTsKIAotICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBsb2NhdGlvbklu
Vmlld3BvcnQgPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHkpKTsKLQotICAgICAgICBhdXRvIHBhcnNlZEludGVyYWN0aW9uID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uPihtb3Vz
ZUludGVyYWN0aW9uU3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZWRJbnRlcmFjdGlvbikKLSAg
ICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKElu
dmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnRlcmFjdGlvbicgaXMgaW52YWxpZC4i
KTsKLQotICAgICAgICBhdXRvIHBhcnNlZEJ1dHRvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KG1vdXNlQnV0dG9uU3RyaW5nKTsKLSAgICAg
ICAgaWYgKCFwYXJzZWRCdXR0b24pCi0gICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAn
YnV0dG9uJyBpcyBpbnZhbGlkLiIpOwotCi0gICAgICAgIGF1dG8gbW91c2VFdmVudHNGbHVzaGVk
Q2FsbGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UsIHgsIHldKE9wdGlvbmFsPEF1dG9tYXRpb25D
b21tYW5kRXJyb3I+IGVycm9yKSB7CisgICAgICAgIGF1dG8gbW91c2VFdmVudHNGbHVzaGVkQ2Fs
bGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UsIGZsb2F0WCwgZmxvYXRZXShPcHRpb25hbDxBdXRv
bWF0aW9uQ29tbWFuZEVycm9yPiBlcnJvcikgewogICAgICAgICAgICAgaWYgKGVycm9yKQogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvci52YWx1ZSgpLnRvUHJvdG9j
b2xTdHJpbmcoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNy
ZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRYKHgpCi0gICAgICAgICAgICAgICAgICAg
IC5zZXRZKHkgLSBwYWdlLT50b3BDb250ZW50SW5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
LnNldFgoZmxvYXRYKQorICAgICAgICAgICAgICAgICAgICAuc2V0WShmbG9hdFkgLSBwYWdlLT50
b3BDb250ZW50SW5zZXQoKSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xNjk1LDcgKzE2OTYsNyBAQCB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgY29uc3QgSgogICAgICAgICAgICAgY2FsbGJhY2tJbk1hcChBVVRPTUFUSU9OX0NPTU1BTkRf
RVJST1JfV0lUSF9OQU1FKFRpbWVvdXQpKTsKICAgICAgICAgY2FsbGJhY2tJbk1hcCA9IFdURk1v
dmUobW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2spOwogCi0gICAgICAgIHBsYXRmb3JtU2ltdWxh
dGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIHBhcnNlZEludGVyYWN0aW9uLnZhbHVlKCksIHBhcnNl
ZEJ1dHRvbi52YWx1ZSgpLCBsb2NhdGlvbkluVmlld3BvcnQsIGtleU1vZGlmaWVycyk7CisgICAg
ICAgIHBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIG1vdXNlSW50ZXJhY3Rp
b24sIG1vdXNlQnV0dG9uLCBsb2NhdGlvbkluVmlld3BvcnQsIGtleU1vZGlmaWVycyk7CiAKICAg
ICAgICAgLy8gSWYgdGhlIGV2ZW50IGxvY2F0aW9uIHdhcyBwcmV2aW91c2x5IGNsaXBwZWQgYW5k
IGRvZXMgbm90IGhpdCB0ZXN0IGFueXRoaW5nIGluIHRoZSB3aW5kb3csIHRoZW4gaXQgd2lsbCBu
b3QgYmUgcHJvY2Vzc2VkLgogICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZS1X
M0MgZHJpdmVyIGltcGxlbWVudGF0aW9ucywgZG9uJ3QgbWFrZSB0aGlzIGEgaGFyZCBlcnJvcjsg
anVzdCBkbyBub3RoaW5nIHNpbGVudGx5LgpAQCAtMTcwOCw3ICsxNzA5LDcgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnN0IEoKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNU
SU9OUykKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50
ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW50ZXJh
Y3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlv
bnMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
SGFuZGxlJiBoYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJm
b3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICNpZiAhRU5B
QkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCiAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMTcxNywyOCArMTcxOCwyNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgaWYgKCFp
bnRlcmFjdGlvbnMubGVuZ3RoKCkpCisgICAgaWYgKCFpbnRlcmFjdGlvbnMtPmxlbmd0aCgpKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJhY3Rpb25zJyB3YXMgbm90IGZvdW5k
IG9yIGVtcHR5LiIpOwogCiAgICAgLy8gVmFsaWRhdGUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGJl
Zm9yZSBwZXJmb3JtaW5nIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYnJvd3NpbmcgY29udGV4
dCB1bmRlciB0ZXN0LgogICAgIFZlY3RvcjxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+IGFjdGlvbnNU
b1BlcmZvcm07Ci0gICAgYWN0aW9uc1RvUGVyZm9ybS5yZXNlcnZlQ2FwYWNpdHkoaW50ZXJhY3Rp
b25zLmxlbmd0aCgpKTsKKyAgICBhY3Rpb25zVG9QZXJmb3JtLnJlc2VydmVDYXBhY2l0eShpbnRl
cmFjdGlvbnMtPmxlbmd0aCgpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJhY3Rpb24g
OiBpbnRlcmFjdGlvbnMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW50ZXJhY3Rp
b25PYmplY3Q7Ci0gICAgICAgIGlmICghaW50ZXJhY3Rpb24tPmFzT2JqZWN0KGludGVyYWN0aW9u
T2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyYWN0aW9uVmFsdWUgOiBpbnRlcmFj
dGlvbnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnRlcmFjdGlvbk9iamVjdCA9IGludGVyYWN0
aW9uVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghaW50ZXJhY3Rpb25PYmplY3QpCiAg
ICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJ
bnZhbGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBh
cmFtZXRlciB3YXMgaW52YWxpZC4iKTsKIAotICAgICAgICBTdHJpbmcgaW50ZXJhY3Rpb25UeXBl
U3RyaW5nOwotICAgICAgICBpZiAoIWludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUi
X3MsIGludGVyYWN0aW9uVHlwZVN0cmluZykpCisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25UeXBl
U3RyaW5nID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygidHlwZSJfcyk7CisgICAgICAg
IGlmICghaW50ZXJhY3Rpb25UeXBlU3RyaW5nKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVy
YWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyB0aGUgJ3R5
cGUnIGtleS4iKTsKICAgICAgICAgYXV0byBpbnRlcmFjdGlvblR5cGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlPihpbnRl
cmFjdGlvblR5cGVTdHJpbmcpOwogICAgICAgICBpZiAoIWludGVyYWN0aW9uVHlwZSkKICAgICAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1l
dGVyIGhhcyBhbiBpbnZhbGlkICd0eXBlJyBrZXkuIik7CiAKLSAgICAgICAgU3RyaW5nIHZpcnR1
YWxLZXlTdHJpbmc7Ci0gICAgICAgIGJvb2wgZm91bmRWaXJ0dWFsS2V5ID0gaW50ZXJhY3Rpb25P
YmplY3QtPmdldFN0cmluZygia2V5Il9zLCB2aXJ0dWFsS2V5U3RyaW5nKTsKLSAgICAgICAgaWYg
KGZvdW5kVmlydHVhbEtleSkgeworICAgICAgICBhdXRvIHZpcnR1YWxLZXlTdHJpbmcgPSBpbnRl
cmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJrZXkiX3MpOworICAgICAgICBpZiAoISF2aXJ0dWFs
S2V5U3RyaW5nKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxWaXJ0dWFsS2V5PiB2aXJ0dWFsS2V5
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpWaXJ0dWFsS2V5Pih2
aXJ0dWFsS2V5U3RyaW5nKTsKICAgICAgICAgICAgIGlmICghdmlydHVhbEtleSkKICAgICAgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFt
ZXRlciBoYXMgYW4gaW52YWxpZCAna2V5JyB2YWx1ZS4iKTsKQEAgLTE3NDgsOSArMTc0OCw4IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhj
b25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCi0g
ICAgICAgIFN0cmluZyBrZXlTZXF1ZW5jZTsKLSAgICAgICAgYm9vbCBmb3VuZEtleVNlcXVlbmNl
ID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygidGV4dCJfcywga2V5U2VxdWVuY2UpOwot
ICAgICAgICBpZiAoZm91bmRLZXlTZXF1ZW5jZSkgeworICAgICAgICBhdXRvIGtleVNlcXVlbmNl
ID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygidGV4dCJfcyk7CisgICAgICAgIGlmICgh
IWtleVNlcXVlbmNlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGludGVyYWN0aW9uVHlwZS52YWx1
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlQcmVzczoKICAgICAgICAgICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6Oktl
eVJlbGVhc2U6CkBAIC0xNzY1LDcgKzE3NjQsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmb3VuZFZpcnR1YWxLZXkg
JiYgIWZvdW5kS2V5U2VxdWVuY2UpCisgICAgICAgIGlmICghdmlydHVhbEtleVN0cmluZyAmJiAh
a2V5U2VxdWVuY2UpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdp
bnRlcmFjdGlvbnMnIHBhcmFtZXRlciBpcyBtaXNzaW5nIGJvdGggJ2tleScgYW5kICd0ZXh0Jy4g
T25lIG11c3QgYmUgcHJvdmlkZWQuIik7CiAgICAgfQogCkBAIC0xODA4LDcgKzE4MDcsNyBAQCBz
dGF0aWMgU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlIHNpbXVsYXRlZElucHV0U291cmNlVHlwZUZy
b21Qcm90b2NvbFNvdXJjZVR5cGUoSQogfQogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNU
SU9OU19BUEkpCiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlv
blNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJh
bWVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBpbnB1dFNvdXJjZXMsIGNvbnN0IEpTT046OkFy
cmF5JiBzdGVwcywgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25T
ZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPEpTT046
OkFycmF5PiYmIGlucHV0U291cmNlcywgUmVmPEpTT046OkFycmF5PiYmIHN0ZXBzLCBSZWY8V2Vi
QXV0b21hdGlvblNlc3Npb246OlBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYg
Y2FsbGJhY2spCiB7CiAgICAgLy8gVGhpcyBjb21tYW5kIGltcGxlbWVudHMgV2ViS2l0IHN1cHBv
cnQgZm9yIMKnMTcuNSBQZXJmb3JtIEFjdGlvbnMuCiAKQEAgLTE4MjAsNyArMTgxOSw3IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNl
OwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhh
bmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3Vu
ZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwg
ZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC0xODI5LDIwICsx
ODI4LDIwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNl
cXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAKICAgICAvLyBQYXJzZSBhbmQgdmFs
aWRhdGUgQXV0b21hdGlvbiBwcm90b2NvbCBhcmd1bWVudHMuIEJ5IHRoaXMgcG9pbnQsIHRoZSBk
cml2ZXIgaGFzCiAgICAgLy8gYWxyZWFkeSBwZXJmb3JtZWQgdGhlIHN0ZXBzIGluIMKnMTcuMyBQ
cm9jZXNzaW5nIEFjdGlvbnMgUmVxdWVzdHMuCi0gICAgaWYgKCFpbnB1dFNvdXJjZXMubGVuZ3Ro
KCkpCisgICAgaWYgKCFpbnB1dFNvdXJjZXMtPmxlbmd0aCgpKQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAnaW5wdXRTb3VyY2VzJyB3YXMgbm90IGZvdW5kIG9yIGVtcHR5LiIpOwogCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dFNvdXJjZSA6IGlucHV0U291cmNlcykgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbnB1dFNvdXJjZU9iamVjdDsKLSAgICAgICAgaWYgKCFp
bnB1dFNvdXJjZS0+YXNPYmplY3QoaW5wdXRTb3VyY2VPYmplY3QpKQorICAgIGZvciAoY29uc3Qg
YXV0byYgaW5wdXRTb3VyY2VWYWx1ZSA6IGlucHV0U291cmNlcy5nZXQoKSkgeworICAgICAgICBh
dXRvIGlucHV0U291cmNlT2JqZWN0ID0gaW5wdXRTb3VyY2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICAgICAgaWYgKCFpbnB1dFNvdXJjZU9iamVjdCkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnB1
dCBzb3VyY2UgaW4gdGhlICdpbnB1dFNvdXJjZXMnIHBhcmFtZXRlciB3YXMgaW52YWxpZC4iKTsK
LSAgICAgICAgCi0gICAgICAgIFN0cmluZyBzb3VyY2VJZDsKLSAgICAgICAgaWYgKCFpbnB1dFNv
dXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJZCJfcywgc291cmNlSWQpKQorCisgICAgICAg
IGF1dG8gc291cmNlSWQgPSBpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJZCJf
cyk7CisgICAgICAgIGlmICghc291cmNlSWQpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW5wdXQg
c291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBhICdzb3Vy
Y2VJZCcuIik7CiAKLSAgICAgICAgU3RyaW5nIHNvdXJjZVR5cGU7Ci0gICAgICAgIGlmICghaW5w
dXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlVHlwZSJfcywgc291cmNlVHlwZSkpCisg
ICAgICAgIGF1dG8gc291cmNlVHlwZSA9IGlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNv
dXJjZVR5cGUiX3MpOworICAgICAgICBpZiAoIXNvdXJjZVR5cGUpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiQW4gaW5wdXQgc291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgaXMgbWlz
c2luZyBhICdzb3VyY2VUeXBlJy4iKTsKIAogICAgICAgICBhdXRvIHBhcnNlZElucHV0U291cmNl
VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6SW5wdXRTb3Vy
Y2VUeXBlPihzb3VyY2VUeXBlKTsKQEAgLTE4ODEsMjggKzE4ODAsMjggQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnMKIAogICAgIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1lPiBrZXlGcmFt
ZXM7CiAKLSAgICBpZiAoIXN0ZXBzLmxlbmd0aCgpKQorICAgIGlmICghc3RlcHMtPmxlbmd0aCgp
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJ
bnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnc3RlcHMnIHdhcyBub3QgZm91bmQgb3Ig
ZW1wdHkuIik7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0ZXAgOiBzdGVwcykgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGVwT2JqZWN0OwotICAgICAgICBpZiAoIXN0ZXAtPmFz
T2JqZWN0KHN0ZXBPYmplY3QpKQorICAgIGZvciAoY29uc3QgYXV0byYgc3RlcFZhbHVlIDogc3Rl
cHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBzdGVwT2JqZWN0ID0gc3RlcFZhbHVlLT5hc09iamVj
dCgpOworICAgICAgICBpZiAoIXN0ZXBPYmplY3QpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBzdGVw
IGluIHRoZSAnc3RlcHMnIHBhcmFtZXRlciB3YXMgbm90IGFuIG9iamVjdC4iKTsKIAotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IHN0ZXBTdGF0ZXM7Ci0gICAgICAgIGlmICghc3RlcE9iamVj
dC0+Z2V0QXJyYXkoInN0YXRlcyJfcywgc3RlcFN0YXRlcykpCisgICAgICAgIGF1dG8gc3RlcFN0
YXRlcyA9IHN0ZXBPYmplY3QtPmdldEFycmF5KCJzdGF0ZXMiX3MpOworICAgICAgICBpZiAoIXN0
ZXBTdGF0ZXMpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBzdGVwIGlzIG1pc3NpbmcgdGhlICdzdGF0
ZXMnIHByb3BlcnR5LiIpOwogCiAgICAgICAgIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1l
OjpTdGF0ZUVudHJ5PiBlbnRyaWVzOwogICAgICAgICBlbnRyaWVzLnJlc2VydmVDYXBhY2l0eShz
dGVwU3RhdGVzLT5sZW5ndGgoKSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6
ICpzdGVwU3RhdGVzKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGF0ZU9i
amVjdDsKLSAgICAgICAgICAgIGlmICghc3RhdGUtPmFzT2JqZWN0KHN0YXRlT2JqZWN0KSkKKyAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZVZhbHVlIDogKnN0ZXBTdGF0ZXMpIHsKKyAgICAg
ICAgICAgIGF1dG8gc3RhdGVPYmplY3QgPSBzdGF0ZVZhbHVlLT5hc09iamVjdCgpOworICAgICAg
ICAgICAgaWYgKCFzdGF0ZU9iamVjdCkKICAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiRW5jb3VudGVy
ZWQgYSBub24tb2JqZWN0IHN0ZXAgc3RhdGUuIik7CiAKLSAgICAgICAgICAgIFN0cmluZyBzb3Vy
Y2VJZDsKLSAgICAgICAgICAgIGlmICghc3RhdGVPYmplY3QtPmdldFN0cmluZygic291cmNlSWQi
X3MsIHNvdXJjZUlkKSkKKyAgICAgICAgICAgIGF1dG8gc291cmNlSWQgPSBzdGF0ZU9iamVjdC0+
Z2V0U3RyaW5nKCJzb3VyY2VJZCJfcyk7CisgICAgICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAg
ICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJTdGVwIHN0YXRlIGxhY2tzIHJlcXVpcmVkICdzb3VyY2VJZCcg
cHJvcGVydHkuIik7CiAKICAgICAgICAgICAgIGlmICghc291cmNlSWRUb0lucHV0U291cmNlTWFw
LmNvbnRhaW5zKHNvdXJjZUlkKSkKQEAgLTE5MTEsMTcgKzE5MTAsMTYgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnMKICAgICAgICAgICAgIFNpbXVsYXRlZElucHV0U291cmNlJiBpbnB1dFNvdXJj
ZSA9ICpzb3VyY2VJZFRvSW5wdXRTb3VyY2VNYXAuZ2V0KHNvdXJjZUlkKTsKICAgICAgICAgICAg
IFNpbXVsYXRlZElucHV0U291cmNlU3RhdGUgc291cmNlU3RhdGUgeyB9OwogCi0gICAgICAgICAg
ICBTdHJpbmcgcHJlc3NlZENoYXJLZXlTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmpl
Y3QtPmdldFN0cmluZygicHJlc3NlZENoYXJLZXkiX3MsIHByZXNzZWRDaGFyS2V5U3RyaW5nKSkK
KyAgICAgICAgICAgIGF1dG8gcHJlc3NlZENoYXJLZXlTdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0
U3RyaW5nKCJwcmVzc2VkQ2hhcktleSJfcyk7CisgICAgICAgICAgICBpZiAoISFwcmVzc2VkQ2hh
cktleVN0cmluZykKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkQ2hhcktleSA9
IHByZXNzZWRDaGFyS2V5U3RyaW5nLmNoYXJhY3RlckF0KDApOwogCi0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5OwotICAgICAgICAgICAgaWYg
KHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3NlZFZpcnR1YWxLZXlzIl9zLCBwcmVzc2VkVmly
dHVhbEtleXNBcnJheSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHByZXNzZWRWaXJ0dWFsS2V5
c0FycmF5ID0gc3RhdGVPYmplY3QtPmdldEFycmF5KCJwcmVzc2VkVmlydHVhbEtleXMiX3MpKSB7
CiAgICAgICAgICAgICAgICAgVmlydHVhbEtleVNldCBwcmVzc2VkVmlydHVhbEtleXMgeyB9Owog
CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXkt
PmJlZ2luKCk7IGl0ICE9IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5LT5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmc7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghKCppdCktPmFzU3RyaW5nKHByZXNzZWRWaXJ0dWFsS2V5U3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBwcmVzc2VkVmlydHVhbEtleVN0cmluZyA9
ICgqaXQpLT5hc1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXNzZWRWaXJ0
dWFsS2V5U3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkVuY291bnRlcmVk
IGEgbm9uLXN0cmluZyB2aXJ0dWFsIGtleSB2YWx1ZS4iKTsKIAogICAgICAgICAgICAgICAgICAg
ICBPcHRpb25hbDxWaXJ0dWFsS2V5PiBwYXJzZWRWaXJ0dWFsS2V5ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpWaXJ0dWFsS2V5PihwcmVzc2VkVmlydHVhbEtleVN0
cmluZyk7CkBAIC0xOTM0LDMzICsxOTMyLDMyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAg
ICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJlc3NlZFZpcnR1YWxLZXlzID0gcHJlc3NlZFZp
cnR1YWxLZXlzOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJpbmcgcHJlc3NlZEJ1
dHRvblN0cmluZzsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVz
c2VkQnV0dG9uIl9zLCBwcmVzc2VkQnV0dG9uU3RyaW5nKSkgeworICAgICAgICAgICAgYXV0byBw
cmVzc2VkQnV0dG9uU3RyaW5nID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZEJ1dHRv
biJfcyk7CisgICAgICAgICAgICBpZiAoISFwcmVzc2VkQnV0dG9uU3RyaW5nKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBwcm90b2NvbEJ1dHRvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KHByZXNzZWRCdXR0b25TdHJpbmcpOwogICAgICAg
ICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRNb3VzZUJ1dHRvbiA9IHByb3RvY29sQnV0dG9u
LnZhbHVlT3IoTW91c2VCdXR0b246Ok5vbmUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBTdHJpbmcgb3JpZ2luU3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRT
dHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luU3RyaW5nKSkKKyAgICAgICAgICAgIGF1dG8gb3JpZ2lu
U3RyaW5nID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygib3JpZ2luIl9zKTsKKyAgICAgICAgICAg
IGlmICghIW9yaWdpblN0cmluZykKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5vcmlnaW4g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlTW92ZU9yaWdp
bj4ob3JpZ2luU3RyaW5nKTsKIAogICAgICAgICAgICAgaWYgKHNvdXJjZVN0YXRlLm9yaWdpbiAm
JiBzb3VyY2VTdGF0ZS5vcmlnaW4udmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpNb3VzZU1vdmVPcmlnaW46OkVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgbm9kZUhhbmRsZVN0cmluZzsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5n
ZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIG5vZGVIYW5kbGVTdHJpbmcpKQorICAgICAgICAgICAg
ICAgIGF1dG8gbm9kZUhhbmRsZVN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm5vZGVI
YW5kbGUiX3MpOworICAgICAgICAgICAgICAgIGlmICghbm9kZUhhbmRsZVN0cmluZykKICAgICAg
ICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoSW52YWxpZFBhcmFtZXRlciwgIk5vZGUgaGFuZGxlIG5vdCBwcm92aWRlZCBmb3IgJ0VsZW1l
bnQnIG9yaWdpbiIpOwogICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLm5vZGVIYW5kbGUgPSBu
b2RlSGFuZGxlU3RyaW5nOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBsb2NhdGlvbk9iamVjdDsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+
Z2V0T2JqZWN0KCJsb2NhdGlvbiJfcywgbG9jYXRpb25PYmplY3QpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHggPSAwLCB5ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25PYmplY3Qt
PmdldEludGVnZXIoIngiX3MsIHgpICYmIGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9z
LCB5KSkKLSAgICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUubG9jYXRpb24gPSBXZWJDb3Jl
OjpJbnRQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIGlmIChhdXRvIGxvY2F0aW9uT2JqZWN0ID0g
c3RhdGVPYmplY3QtPmdldE9iamVjdCgibG9jYXRpb24iX3MpKSB7CisgICAgICAgICAgICAgICAg
YXV0byB4ID0gbG9jYXRpb25PYmplY3QtPmdldEludGVnZXIoIngiX3MpOworICAgICAgICAgICAg
ICAgIGF1dG8geSA9IGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9zKTsKKyAgICAgICAg
ICAgICAgICBpZiAoeCAmJiB5KQorICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5sb2Nh
dGlvbiA9IFdlYkNvcmU6OkludFBvaW50KCp4LCAqeSk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGludCBwYXJzZWREdXJhdGlvbjsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+
Z2V0SW50ZWdlcigiZHVyYXRpb24iX3MsIHBhcnNlZER1cmF0aW9uKSkKLSAgICAgICAgICAgICAg
ICBzb3VyY2VTdGF0ZS5kdXJhdGlvbiA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMocGFyc2Vk
RHVyYXRpb24pOworICAgICAgICAgICAgaWYgKGF1dG8gZHVyYXRpb24gPSBzdGF0ZU9iamVjdC0+
Z2V0SW50ZWdlcigiZHVyYXRpb24iX3MpKQorICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmR1
cmF0aW9uID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqZHVyYXRpb24pOwogCiAgICAgICAg
ICAgICBlbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8U2ltdWxhdGVkSW5wdXRTb3Vy
Y2UmLCBTaW11bGF0ZWRJbnB1dFNvdXJjZVN0YXRlPiB7IGlucHV0U291cmNlLCBzb3VyY2VTdGF0
ZSB9KTsKICAgICAgICAgfQpAQCAtMTk4NCw3ICsxOTgxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUs
IGNvbnMKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogfQogCi12b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxDYW5j
ZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5k
bGUsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgLy8gVGhpcyBjb21tYW5kIGltcGxlbWVudHMgV2ViS2l0IHN1cHBvcnQgZm9yIMKnMTcu
NiBSZWxlYXNlIEFjdGlvbnMuCiAKQEAgLTE5OTYsNyArMTk5Myw3IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRv
d05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8g
ZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRp
b25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0
byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3Vu
ZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC0yMDEzLDE5ICsyMDEwLDE4IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3Qg
U3RyaW5nJiBoYW5kbGUsIGNvbnN0CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05T
X0FQSSkKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9vbCogb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVm
PFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjp0YWtlU2NyZWVuc2hvdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBPcHRpb25h
bDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgT3B0aW9uYWw8Ym9vbD4m
JiBvcHRpb25hbENsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5k
bGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9
IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxG
cmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVO
b3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhh
bmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCiAgICAgYm9v
bCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkID0gb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVk
ID8gKm9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA6IGZhbHNlOwotICAgIFN0cmluZyBu
b2RlSGFuZGxlID0gb3B0aW9uYWxOb2RlSGFuZGxlID8gKm9wdGlvbmFsTm9kZUhhbmRsZSA6IGVt
cHR5U3RyaW5nKCk7CiAgICAgYm9vbCBjbGlwVG9WaWV3cG9ydCA9IG9wdGlvbmFsQ2xpcFRvVmll
d3BvcnQgPyAqb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCA6IGZhbHNlOwogCiAjaWYgUExBVEZPUk0o
R1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCmluZGV4IDM2Mjc2NjAzOTVjYjVmNDRlNzdhOWY4NjFkNDJl
OTcxZGJhMWJiZmMuLjhkOTA4OTJhNGIxMzQyNjRhNGU4NWJlNGY2NWRmYTIwZmMwMTNhMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmgKQEAgLTEzNSwxMCArMTM1LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQogICAgIC8vIEluc3BlY3Rvcjo6UmVtb3RlQXV0b21hdGlv
blRhcmdldCBBUEkKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
c2Vzc2lvbklkZW50aWZpZXI7IH0KLSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNl
LCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNj
b25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikgb3ZlcnJpZGU7CisgICAgU3RyaW5n
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JZGVudGlmaWVyOyB9CisgICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9p
ZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nv
bm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpOworICAgIHZv
aWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOwogI2VuZGlmCiAgICAg
dm9pZCB0ZXJtaW5hdGUoKTsKIApAQCAtMTQ2LDE1ICsxNDYsMTUgQEAgcHVibGljOgogCiAgICAg
Ly8gU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpDbGllbnQgQVBJCiAjaWYgRU5BQkxFKFdFQkRS
SVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCi0gICAgdm9pZCBzaW11bGF0ZU1vdXNlSW50ZXJhY3Rp
b24oV2ViUGFnZVByb3h5JiwgTW91c2VJbnRlcmFjdGlvbiwgTW91c2VCdXR0b24sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlldywgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5k
bGVyJiYpIGZpbmFsOworICAgIHZvaWQgc2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKFdlYlBhZ2VQ
cm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1vdXNlQnV0dG9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKTsKICNl
bmRpZgogI2lmIEVOQUJMRShXRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKQotICAgIHZvaWQg
c2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIFRvdWNoSW50ZXJhY3Rpb24s
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlldywgT3B0aW9uYWw8U2Vjb25k
cz4gZHVyYXRpb24sIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2
b2lkIHNpbXVsYXRlVG91Y2hJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBUb3VjaEludGVyYWN0
aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIE9wdGlvbmFsPFNl
Y29uZHM+IGR1cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKLSAgICB2b2lkIHNp
bXVsYXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0
aW9uLCBXVEY6OlZhcmlhbnQ8VmlydHVhbEtleSwgQ2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBs
ZXRpb25IYW5kbGVyJiYpIGZpbmFsOworICAgIHZvaWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0
aW9uKFdlYlBhZ2VQcm94eSYsIEtleWJvYXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0
dWFsS2V5LCBDaGFyS2V5PiYmLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAjZW5k
aWYKLSAgICB2b2lkIHZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVBy
b3h5JiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgY29uc3QgU3RyaW5nJiBu
b2RlSGFuZGxlLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9w
dGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJikgZmluYWw7CisgICAgdm9pZCB2aWV3
cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYsIE9wdGlvbmFsPFdl
YkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246Ok5vZGVIYW5kbGUmLCBGdW5jdGlvbjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkludFBv
aW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmKTsKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiAKQEAgLTE2Myw0NSArMTYzLDQ1IEBAIHB1
YmxpYzoKICAgICAvLyBhbmQgdGhlIC0tcGxhdGZvcm0gYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBw
cm90b2NvbCBiaW5kaW5ncyBnZW5lcmF0b3IuCiAKICAgICAvLyBQbGF0Zm9ybTogR2VuZXJpYwot
ICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0cyhSZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxi
YWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
LCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY3Jl
YXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXRpb25IaW50
LCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQg
Y2xvc2VCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpIGZpbmFsOwotICAgIHZvaWQgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZv
aWQgc2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcmlnaW4sIGNvbnN0IEpTT046Ok9iamVjdCogc2l6ZSwgUmVm
PFNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAg
dm9pZCBtYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBSZWY8TWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsK
LSAgICB2b2lkIGhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgUmVmPEhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAg
ICB2b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJp
bmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdvQmFja0luQnJv
d3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9h
ZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBS
ZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBh
Z2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3Vi
bGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3Ry
aW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5h
dmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZXZhbHVh
dGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
biwgY29uc3QgSlNPTjo6QXJyYXkmIGFyZ3VtZW50cywgY29uc3QgYm9vbCogb3B0aW9uYWxFeHBl
Y3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBjb25zdCBkb3VibGUqIG9wdGlvbmFsQ2FsbGJh
Y2tUaW1lb3V0LCBSZWY8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBKU09OOjpPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0
dG9uLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBr
ZXlNb2RpZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmKSBmaW5h
bDsKLSAgICB2b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhh
bmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2Fy
ZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1JbnRl
cmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBzb3VyY2VzLCBjb25zdCBKU09OOjpB
cnJheSYgc3RlcHMsIFJlZjxQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgUmVmPENhbmNlbElu
dGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0YWtlU2Ny
ZWVuc2hvdChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1l
SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0
aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBib29sKiBvcHRpb25hbENsaXBUb1Zp
ZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhh
bmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBpbnQqIG9wdGlv
bmFsT3JkaW5hbCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5hbWUsIGNvbnN0IFN0cmluZyogb3B0
aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIFJlZjxS
ZXNvbHZlUGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
b21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25z
dCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IFN0cmluZyYgY29v
cmRpbmF0ZVN5c3RlbSwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6Q29tcHV0ZUVsZW1lbnRMYXlvdXRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUs
IFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlNlbGVj
dE9wdGlvbkVsZW1lbnRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpc1Nob3dpbmdK
YXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgYm9vbCogcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
c21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWNj
ZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIG1lc3Nh
Z2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgU3RyaW5nKiB0ZXh0KSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29u
c3QgU3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZpbGVzVG9TZWxlY3RGb3JG
aWxlVXBsb2FkKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6
QXJyYXkqIG9wdGlvbmFsRmlsZUNvbnRlbnRzKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZpbGVz
Rm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBj
b25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIGNvbnN0
IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENh
bGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxHZXRBbGxDb29raWVzQ2FsbGJhY2s+JiYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5n
bGVDb29raWVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRTaW5nbGVDb29raWUo
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYg
Y29va2llLCBSZWY8QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGVsZXRlQWxsQ29va2llcyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U2Vzc2lvblBl
cm1pc3Npb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYg
b3V0X3Blcm1pc3Npb25zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNlc3Npb25QZXJtaXNzaW9u
cyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX3Blcm1pc3Np
b25zKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dz
aW5nQ29udGV4dHNDYWxsYmFjaz4mJik7CisgICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHQoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNyZWF0ZUJy
b3dzaW5nQ29udGV4dChPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24+JiYsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBjbG9zZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdD
b250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1l
SGFuZGxlJiwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZv
aWQgc2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93
RnJhbWVPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIG1heGltaXplV2lu
ZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPE1heGltaXplV2luZG93T2ZCcm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgUmVmPEhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2
b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IFN0cmluZyYgdXJsLCBPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYm
LCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQ
YWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBS
ZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBnb0Zvcndh
cmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+
JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFj
az4mJik7CisgICAgdm9pZCByZWxvYWRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4m
JiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRs
ZSYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3Ry
YXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJik7CisgICAgdm9pZCBldmFsdWF0ZUphdmFT
Y3JpcHRGdW5jdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpGcmFtZUhhbmRsZSYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIFJlZjxKU09OOjpBcnJheT4m
JiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1
bWVudCwgT3B0aW9uYWw8ZG91YmxlPiYmIGNhbGxiYWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2
YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJh
Y3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgUmVmPEpTT046Ok9iamVjdD4mJiByZXF1ZXN0ZWRQb3NpdGlvbiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24sIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24sIFJlZjxKU09OOjpBcnJheT4mJiBrZXlN
b2RpZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2
b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+JiYg
aW50ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYp
OworICAgIHZvaWQgcGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+
JiYgc291cmNlcywgUmVmPEpTT046OkFycmF5PiYmIHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0
aW9uU2VxdWVuY2VDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjYW5jZWxJbnRlcmFjdGlvblNlcXVl
bmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFu
ZGxlJiwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJik7CisgICAgdm9p
ZCB0YWtlU2NyZWVuc2hvdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpGcmFtZUhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
Ok5vZGVIYW5kbGUmLCBPcHRpb25hbDxib29sPiYmIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIE9w
dGlvbmFsPGJvb2w+JiYgY2xpcFRvVmlld3BvcnQsIFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIHJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgT3B0aW9uYWw8aW50PiYm
IG9yZGluYWwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxSZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZUNhbGxi
YWNrPiYmKTsKKyAgICB2b2lkIHJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIFJlZjxSZXNvbHZl
UGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjb21wdXRlRWxlbWVudExh
eW91dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhh
bmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUm
LCBPcHRpb25hbDxib29sPiYmIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW0sIFJlZjxDb21wdXRlRWxlbWVudExh
eW91dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgUmVmPFNlbGVjdE9w
dGlvbkVsZW1lbnRDYWxsYmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxib29sPiBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzbWlzc0N1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gYWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IG1lc3NhZ2VPZkN1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxKU09OOjpBcnJheT4m
JiBmaWxlbmFtZXMsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBmaWxlQ29udGVudHMpOworICAgIHZv
aWQgc2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgUmVmPEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywg
UmVmPFNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0
QWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IGRlbGV0ZVNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxE
ZWxldGVTaW5nbGVDb29raWVDYWxsYmFjaz4mJik7CisgICAgdm9pZCBhZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWUsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxs
YmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBk
ZWxldGVBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4+IGdldFNlc3Npb25QZXJtaXNzaW9ucygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2Vzc2lvblBlcm1pc3Np
b25zKFJlZjxKU09OOjpBcnJheT4mJik7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBp
bnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
RW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIE9wdGlv
bmFsPGJvb2w+JiYgZW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJik7CiAjZW5kaWYKIAogICAgIC8vIEV2ZW50IFNpbXVsYXRpb24gU3VwcG9y
dC4KQEAgLTIzOCw3ICsyMzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGlkZVdpbmRvd0ZvclBh
Z2UoV2ViUGFnZVByb3h5JiwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAg
ICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKEltcGxlbWVudGVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGluIFdlYkF1dG9tYXRpb25TZXNzaW9uTWVzc2FnZVJlY2VpdmVyLmNwcCkuCi0gICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IFdlYkF1dG9tYXRpb25TZXNzaW9uIG1lc3NhZ2Vz
LgogICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24odWludDY0X3QgY2FsbGJh
Y2tJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb25NYWNyb3MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb25NYWNyb3MuaAppbmRleCA5M2FmNWFiYzcwOGJkNTk4ZjBmNDBiY2My
OTQ4NTJhMzcwNTI5N2FlLi40ZDM2ZDY0ZmQ0MGY0M2YzZTc4MWQ1ZTU5NWEzYmU4NGNjZWVkNjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uTWFjcm9zLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCkBAIC00NCwxNCArNDQsMTIgQEAKIC8v
IENvbnZlbmllbmNlIG1hY3JvcyBmb3IgZmlsbGluZyBpbiB0aGUgZXJyb3Igc3RyaW5nIG9mIHN5
bmNocm9ub3VzIGNvbW1hbmRzIGluIGJhaWxvdXQgYnJhbmNoZXMuCiAjZGVmaW5lIFNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1IoZXJyb3JOYW1lKSBcCiBkbyB7IFwKLSAgICBlcnJvclN0
cmluZyA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKGVycm9yTmFtZSk7IFwKLSAg
ICByZXR1cm47IFwKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU1RSSU5HX0ZPUl9QUkVERUZJ
TkVEX0VSUk9SX05BTUUoZXJyb3JOYW1lKSk7IFwKIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5l
IFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoZXJyb3JOYW1lLCBk
ZXRhaWxzU3RyaW5nKSBcCiBkbyB7IFwKLSAgICBlcnJvclN0cmluZyA9IFNUUklOR19GT1JfUFJF
REVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKGVycm9yTmFtZSwgZGV0YWlsc1N0cmluZyk7
IFwKLSAgICByZXR1cm47IFwKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU1RSSU5HX0ZPUl9Q
UkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoZXJyb3JOYW1lLCBkZXRhaWxzU3RyaW5n
KSk7IFwKIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SKGVycm9yTmFtZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQpp
bmRleCAzY2FlY2MzMzdkMDk5Nzk1MzRlN2ZjYmY1ZTFlMTBiZDgzNWY3NmNkLi45ZGJmMmUwNzg3
YWE5OTcwNmM2ZjI5MDc1NGE5MTM5MGFiZjFmNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vz
c2lvbk1hYy5tbQpAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
I3ByYWdtYSBtYXJrIENvbW1hbmRzIGZvciAnUExBVEZPUk0oTUFDKScKIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgT3B0aW9uYWw8Ym9vbD4m
JiBlbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZv
ckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgYm8KICAgICAgICAgcGFnZS0+aW5zcGVjdG9yKCktPnNob3coKTsKIAog
ICAgICAgICAvLyBTdGFydCBjb2xsZWN0aW5nIHByb2ZpbGUgaW5mb3JtYXRpb24gaW1tZWRpYXRl
bHkgc28gdGhlIGVudGlyZSBzZXNzaW9uIGlzIGNhcHR1cmVkLgotICAgICAgICBpZiAob3B0aW9u
YWxFbmFibGVBdXRvQ2FwdHVyaW5nICYmICpvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJpbmcpCisg
ICAgICAgIGlmIChlbmFibGVBdXRvQ2FwdHVyaW5nICYmICplbmFibGVBdXRvQ2FwdHVyaW5nKQog
ICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yKCktPnRvZ2dsZVBhZ2VQcm9maWxpbmcoKTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdl
bnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAKaW5kZXggYzFmZmE2Y2Y2
MTQ2NjZlNGM4YjVlYzViNDNjYzY0ZjgwNzBlNjU5OS4uZGY0YTEwYTQwZjhiMDJmYzVkNzUwOWU5
NmM1OTRlYmJjNWFjOWYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcApA
QCAtNjAsMzUgKzYwLDM0IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50OjpkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlCiAKIHZvaWQgSW5zcGVj
dG9yQnJvd3NlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNh
YmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2Vy
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZW5hYmxlKCkK
IHsKLSAgICBpZiAoZW5hYmxlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIg
ZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyb3dzZXIgZG9t
YWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9y
Q29udHJvbGxlcigpLnNldEVuYWJsZWRCcm93c2VyQWdlbnQodGhpcyk7CiAKICAgICBhdXRvKiBp
bnNwZWN0b3IgPSBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yKCk7CiAgICAgQVNTRVJUKGluc3Bl
Y3Rvcik7CiAgICAgbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNsaWVudCgpLmJyb3dzZXJEb21h
aW5FbmFibGVkKG1faW5zcGVjdGVkUGFnZSwgKmluc3BlY3Rvcik7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJvd3NlciBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcm93c2VyIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9z
KTsKIAogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0RW5hYmxl
ZEJyb3dzZXJBZ2VudChudWxscHRyKTsKIAogICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBtX2lu
c3BlY3RlZFBhZ2UuaW5zcGVjdG9yKCkpCiAgICAgICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0
b3JDbGllbnQoKS5icm93c2VyRG9tYWluRGlzYWJsZWQobV9pbnNwZWN0ZWRQYWdlLCAqaW5zcGVj
dG9yKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50
OjpleHRlbnNpb25zRW5hYmxlZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGV4dGVuc2lvbklE
VG9OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0Fn
ZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmgKaW5kZXggYTEzOTU4M2NkOGQ4
NDIzMjlmNGIzZjM1MjFiMzYyNDBlYWI1MzkxMS4uMzMxYmZhYmI1NTc0NGVlOThhN2ZmMGY3ZGE3
Njk1MzFhYzRjNzI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oCkBAIC0zMywy
MyArMzMsMjIgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlUHJveHk7Ci10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSW5zcGVjdG9yQnJvd3NlckFnZW50
IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6QnJv
d3NlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yQnJvd3NlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBJbnNwZWN0b3JCcm93c2VyQWdlbnQoV2ViUGFnZUFnZW50Q29udGV4dCYpOwot
ICAgIH5JbnNwZWN0b3JCcm93c2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQnJv
d3NlckFnZW50KCk7CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKICAgICAvLyBJbnNwZWN0
b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJy
aWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpE
aXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIEJyb3dzZXJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CiAKICAgICB2b2lkIGV4dGVuc2lvbnNF
bmFibGVkKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYpOwogICAgIHZvaWQgZXh0ZW5zaW9uc0Rp
c2FibGVkKEhhc2hTZXQ8U3RyaW5nPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50
LmNwcAppbmRleCBmYmVlNWNkZmYzOGIzYzc3OWEyNjI3MzhjNDE5NTE1YjQ0NThiOWRkLi41ZjUx
N2YxMGE0ODc3MGQ5Y2I4OWNmODhmOWQ2MDM3OGJiZDUyYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCkBAIC0yMDYsMjUgKzIwNiwzOCBAQCB2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdChjb25zdCBFdmVudCYgZXZlbnQpCiAgICAgaWYgKCFl
dmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50Lm1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgIGlmICghSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTihldmVudC5tZXNzYWdlLnZhbHVlKCksIG1lc3NhZ2VWYWx1ZSkpCisgICAg
YXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2Uu
dmFsdWUoKSk7CisgICAgaWYgKCFtZXNzYWdlVmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gbWVzc2FnZUFycmF5OwotICAgIGlmICghbWVzc2FnZVZhbHVl
LT5hc0FycmF5KG1lc3NhZ2VBcnJheSkpCisgICAgYXV0byBtZXNzYWdlQXJyYXkgPSBtZXNzYWdl
VmFsdWUtPmFzQXJyYXkoKTsKKyAgICBpZiAoIW1lc3NhZ2VBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgVmVjdG9yPFRhcmdldD4gdGFyZ2V0TGlzdDsKICAgICBmb3IgKGF1dG8mIGl0ZW1W
YWx1ZSA6ICptZXNzYWdlQXJyYXkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaXRl
bU9iamVjdDsKLSAgICAgICAgaWYgKCFpdGVtVmFsdWUtPmFzT2JqZWN0KGl0ZW1PYmplY3QpKQor
ICAgICAgICBhdXRvIGl0ZW1PYmplY3QgPSBpdGVtVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAg
IGlmICghaXRlbU9iamVjdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFRhcmdl
dCB0YXJnZXQ7Ci0gICAgICAgIGlmICghaXRlbU9iamVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQi
X3MsIHRhcmdldC5pZCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoIm5h
bWUiX3MsIHRhcmdldC5uYW1lKQotICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmlu
ZygidXJsIl9zLCB0YXJnZXQudXJsKQotICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0
cmluZygidHlwZSJfcywgdGFyZ2V0LnR5cGUpKQorCisgICAgICAgIGF1dG8gdGFyZ2V0SUQgPSBp
dGVtT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0
SUQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXQudGFyZ2V0SUQgPSAq
dGFyZ2V0SUQ7CisKKyAgICAgICAgdGFyZ2V0Lm5hbWUgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmco
Im5hbWUiX3MpOworICAgICAgICBpZiAoIXRhcmdldC5uYW1lKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgdGFyZ2V0LnVybCA9IGl0ZW1PYmplY3QtPmdldFN0cmluZygidXJsIl9z
KTsKKyAgICAgICAgaWYgKCF0YXJnZXQudXJsKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgdGFyZ2V0LnR5cGUgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MpOworICAg
ICAgICBpZiAoIXRhcmdldC50eXBlKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
dGFyZ2V0TGlzdC5hcHBlbmQoV1RGTW92ZSh0YXJnZXQpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlODhiOTgxYzg3YzliYTJhMWI4ODQyZDg2
OTMyYTdiNmUzZWE1MmUyLi5hY2NjY2RlYzZjOTMzM2VkY2ExYmQyMDM4NGEzYzNhZTJhZGZmNGZj
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMjAtMDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBw
cm90b2NvbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTYzMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDkt
MDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09OVmFsdWUuY3BwCmluZGV4IDkxZWM0MWMzYjdk
NDE2MmQyM2VjNDVlNGRiMzYzN2E5M2NkY2JiNDUuLmMzODA2Mjc2NDRkZjY5MTY2NDAxNmZkYzZj
MTE0OTA4ZmE4ZjgyMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0pTT05WYWx1ZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZh
bHVlLmNwcApAQCAtNDIsODIgKzQyLDY4IEBAIFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAg
ICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0
ZSh0cnVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2
YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2UpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJv
b2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29s
ZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgqYm9vbGVhblZhbHVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8
SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgxKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0g
ICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0lu
dGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEp
OworICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2Vy
VmFsdWUsIDEpOwogCi0gICAgICAgIC8vIERvdWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2Vycywg
YnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAg
ICAgIC8vIEludGVnZXJzIGNhbiBiZSBnZXQgYXMgZG91Ymxlcy4KKyAgICAgICAgYXV0byBkb3Vi
bGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVW
YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEpOwogCiAgICAgICAgIHZh
bHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRWYWx1ZSkpOwotICAgICAgICBsb25nIGxv
bmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUp
KTsKLSAgICAgICAgbG9uZyBsb25nIGxvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc0ludGVnZXIobG9uZ0xvbmdWYWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25n
IHVuc2lnbmVkTG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2Vy
KHVuc2lnbmVkTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25l
ZExvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5z
aWduZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAgICAgIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0lu
dGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwog
ICAgIH0KIAogICAgIHsKICAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZh
bHVlOjpjcmVhdGUoMS41KTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwot
ICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOwogCi0gICAgICAgIGZsb2F0IGZsb2F0VmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7Cisg
ICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAx
LjUpOwogCi0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2Vy
VmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7Ci0KLSAgICAgICAgdW5zaWduZWQgdW5zaWdu
ZWRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZh
bHVlKSk7Ci0gICAgICAgIGxvbmcgbG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNJbnRlZ2VyKGxvbmdWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1
ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7
Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdW5zaWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5z
aWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgLy8g
RG91YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVnZXJzLgorICAgICAgICBhdXRvIGludGVnZXJWYWx1
ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVl
KTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41
KSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNP
Tjo6VmFsdWU6OmNyZWF0ZSgid2Via2l0Iik7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBzdHJp
bmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVl
KSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdW
YWx1ZSwgIndlYmtpdCIpOwogCiAgICAgICAgIFN0cmluZyBudWxsU3RyaW5nOwogICAgICAgICB2
YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUobnVsbFN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJp
bmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfRkFMU0UoISFzdHJp
bmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKIAogICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJp
bmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmlu
Z1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xMzEs
NyArMTE3LDcgQEAgVEVTVChKU09OVmFsdWUsIENvbnN0cnVjdCkKICAgICB7CiAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
IEVYUEVDVF9UUlVFKG9iamVjdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3Qp
OwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDApOworICAgICAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDBVKTsKICAgICB9CiAKICAgICB7CkBAIC0xNTQsNDggKzE0MCw0
OCBAQCBURVNUKEpTT05BcnJheSwgQmFzaWMpCiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgo
KSwgMlUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICBib29sIGJvb2xl
YW5WYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkp
OwotICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIHRydWUpOworICAgIGF1dG8gYm9vbGVhblZh
bHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7
CisgICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAgICAgYXJyYXktPnB1c2hJ
bnRlZ2VyKDEpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1
ZSA9IGFycmF5LT5nZXQoMik7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShp
bnRlZ2VyVmFsdWUsIDEpOworICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdl
cigpOworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRl
Z2VyVmFsdWUsIDEpOwogCiAgICAgYXJyYXktPnB1c2hEb3VibGUoMS41KTsKICAgICBFWFBFQ1Rf
RVEoYXJyYXktPmxlbmd0aCgpLCA0VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7
Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJs
ZShkb3VibGVWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBh
dXRvIGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91
YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJh
eS0+cHVzaFN0cmluZygid2Via2l0Iik7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwg
NVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAg
ICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUo
ISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAK
ICAgICBhcnJheS0+cHVzaE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBF
Q1RfRVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUpOwog
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVj
dCk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZh
bHVlLT5zaXplKCksIDApOworICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZh
bHVlLT5zaXplKCksIDBVKTsKIAogICAgIGFycmF5LT5wdXNoQXJyYXkoSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA3VSk7CiAgICAgdmFsdWUg
PSBhcnJheS0+Z2V0KDYpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7
Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8g
YXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1
ZSk7CiAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRv
IGl0ID0gYXJyYXktPmJlZ2luKCk7CkBAIC0yNTEsNDAgKzIzNyw0MCBAQCBURVNUKEpTT05BcnJh
eU9mLCBCYXNpYykKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAgdmFs
dWUgPSBhcnJheS0+Z2V0KDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OkludGVnZXIpOwotICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEo
aW50ZWdlclZhbHVlLCAxKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVn
ZXIoKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50
ZWdlclZhbHVlLCAxKTsKIAogICAgIGFycmF5LT5hZGRJdGVtKDEuNSk7CiAgICAgRVhQRUNUX0VR
KGFycmF5LT5sZW5ndGgoKSwgM1UpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwot
ICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUo
ZG91YmxlVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0
byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJs
ZVZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXkt
PmFkZEl0ZW0oIndlYmtpdCIpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsK
ICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7
Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3Ry
aW5nVmFsdWUpOwogICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAg
YXJyYXktPmFkZEl0ZW0oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VRKGFy
cmF5LT5sZW5ndGgoKSwgNVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6
ZSgpLCAwKTsKKyAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAg
RVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6
ZSgpLCAwVSk7CiAKICAgICBhcnJheS0+YWRkSXRlbShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwog
ICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5n
ZXQoNSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6QXJyYXkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAgYXV0byBhcnJheVZhbHVl
ID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICBF
WFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAogICAgIGF1dG8gaXQgPSBhcnJh
eS0+YmVnaW4oKTsKQEAgLTMyNCw0NSArMzEwLDQ1IEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMp
CiAgICAgUmVmPEpTT046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
IAogICAgIG9iamVjdC0+c2V0VmFsdWUoIm51bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKLSAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IG9i
amVjdC0+Z2V0VmFsdWUoIm51bGwiKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKIAogICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9v
bGVhbiIsIHRydWUpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMik7Ci0gICAgYm9v
bCBib29sZWFuVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29s
ZWFuIiwgYm9vbGVhblZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyVSk7CisgICAgYXV0byBib29sZWFuVmFs
dWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJvb2xlYW4iKTsKKyAgICBFWFBFQ1RfVFJVRShib29s
ZWFuVmFsdWUpOworICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIG9i
amVjdC0+c2V0SW50ZWdlcigiaW50ZWdlciIsIDEpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNp
emUoKSwgMyk7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3Qt
PmdldEludGVnZXIoImludGVnZXIiLCBpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCAxKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDNVKTsKKyAgICBh
dXRvIGludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0SW50ZWdlcigiaW50ZWdlciIpOworICAgIEVY
UEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEp
OwogCiAgICAgb2JqZWN0LT5zZXREb3VibGUoImRvdWJsZSIsIDEuNSk7Ci0gICAgRVhQRUNUX0VR
KG9iamVjdC0+c2l6ZSgpLCA0KTsKLSAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNU
X1RSVUUob2JqZWN0LT5nZXREb3VibGUoImRvdWJsZSIsIGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQ
RUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
NFUpOworICAgIGF1dG8gZG91YmxlVmFsdWUgPSBvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIik7
CisgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFs
dWUsIDEuNSk7CiAKICAgICBvYmplY3QtPnNldFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOwot
ICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNSk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVl
OwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1
ZSkpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNVUpOworICAgIGF1dG8gc3RyaW5n
VmFsdWUgPSBvYmplY3QtPmdldFN0cmluZygic3RyaW5nIik7CisgICAgRVhQRUNUX1RSVUUoISFz
dHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAg
ICBvYmplY3QtPnNldE9iamVjdCgib2JqZWN0IiwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvYmplY3RWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0
Iiwgb2JqZWN0VmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2VSk7CisgICAgYXV0byBvYmplY3RWYWx1
ZSA9IG9iamVjdC0+Z2V0T2JqZWN0KCJvYmplY3QiKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RW
YWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIG9i
amVjdC0+c2V0QXJyYXkoImFycmF5IiwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKLSAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDcpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFs
dWUpKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDdVKTsKKyAgICBhdXRvIGFycmF5
VmFsdWUgPSBvYmplY3QtPmdldEFycmF5KCJhcnJheSIpOworICAgIEVYUEVDVF9UUlVFKGFycmF5
VmFsdWUpOwogICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAg
VmVjdG9yPGNvbnN0IGNoYXIqPiBrZXlzID0geyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIi
LCAiZG91YmxlIiwgInN0cmluZyIsICJvYmplY3QiLCAiYXJyYXkiIH07CkBAIC0zNzYsMzEgKzM2
MiwzMSBAQCBURVNUKEpTT05PYmplY3QsIEJhc2ljKQogICAgIEVYUEVDVF9UUlVFKGtleXMuaXNF
bXB0eSgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJudWxsIik7Ci0gICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCA2KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKICAg
ICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoIm51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAog
ICAgIG9iamVjdC0+cmVtb3ZlKCJib29sZWFuIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCA1KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDVVKTsKICAgICBFWFBFQ1Rf
VFJVRShvYmplY3QtPmZpbmQoImJvb2xlYW4iKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9i
amVjdC0+cmVtb3ZlKCJpbnRlZ2VyIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0
KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDRVKTsKICAgICBFWFBFQ1RfVFJVRShv
YmplY3QtPmZpbmQoImludGVnZXIiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+
cmVtb3ZlKCJkb3VibGUiKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgM1UpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+
ZmluZCgiZG91YmxlIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgi
c3RyaW5nIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDJVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0
cmluZyIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIp
OwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCAxVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9
PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJhcnJheSIpOwotICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgp
LCAwVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJhcnJheSIpID09IG9iamVjdC0+
ZW5kKCkpOwogfQogCkBAIC00NzksMjAxICs0NjUsMjA0IEBAIFRFU1QoSlNPTlZhbHVlLCBUb0pT
T05TdHJpbmcpCiBURVNUKEpTT05WYWx1ZSwgUGFyc2VKU09OKQogewogICAgIHsKLSAgICAgICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigibnVsbCIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJudWxsIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKICAgICB9CiAKICAgICB7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oInRydWUiLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigidHJ1ZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6OkJvb2xlYW4pOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFs
dWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oImZhbHNlIik7CisgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4o
Ym9vbGVhblZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsK
KyAgICAgICAgYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBF
Q1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwg
ZmFsc2UpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVl
KSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIik7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgLy8gTnVtYmVycyBhcmUgYWx3YXlz
IHBhcnNlZCBhcyBkb3VibGUuCiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0g
SlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS4wKTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1
ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7
CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuMCk7CiAKLSAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgdmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLjUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpEb3VibGUpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91
YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgICAg
ICBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShk
b3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAgICAg
fQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcInN0cmluZ1wiIiwgdmFsdWUpKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIi
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3Ry
aW5nVmFsdWUsICJzdHJpbmciKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIltdIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIltdIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgYXV0byBhcnJheVZhbHVlID0gdmFs
dWUtPmFzQXJyYXkoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAg
IEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9U
UlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFy
XCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFy
XCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5
VmFsdWUpKTsKKyAgICAgICAgYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+
bGVuZ3RoKCksIDVVKTsKICAgICAgICAgYXV0byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6TnVs
bCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6Ok51bGwpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJy
YXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRv
dWJsZSk7Ci0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0
ZW1WYWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSAoKml0
KS0+YXNJbnRlZ2VyKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAg
ICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKICAgICAgICAgKytpdDsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFs
dWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAyLjUpOworICAgICAgICBFWFBFQ1RfVFJV
RSgoKml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBh
dXRvIGRvdWJsZVZhbHVlID0gKCppdCktPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGRvdWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMi41KTsKICAg
ICAgICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgp
KTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gc3ViQXJyYXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
aXRlbVZhbHVlLT5hc0FycmF5KHN1YkFycmF5VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
KCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBhdXRv
IHN1YkFycmF5VmFsdWUgPSAoKml0KS0+YXNBcnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShz
dWJBcnJheVZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgp
LCAyVSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJh
eVZhbHVlLT5nZXQoMCk7CisgICAgICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVl
LT5nZXQoMCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkp
OwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJmb28i
LCBzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIG9iamVjdCA9IG9iamVjdFZhbHVlLT5hc09i
amVjdCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdC0+
Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAg
ICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogICAgICAgICBvYmplY3RWYWx1
ZSA9IHN1YkFycmF5VmFsdWUtPmdldCgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNU
X1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDEpOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAg
RVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJiYXoiLCBib29sZWFuVmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBvYmplY3QgPW9i
amVjdFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAg
ICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBib29sZWFu
VmFsdWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShi
b29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwog
ICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5k
KCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5n
KTsKKyAgICAgICAgc3RyaW5nVmFsdWUgPSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwg
IndlYmtpdCIpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBhcnJh
eVZhbHVlLT5lbmQoKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7
fSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJ7fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDApOworICAgICAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0
KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VR
KG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjogXCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251
bGwsZmFsc2VdfX0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIntcImZvb1wiOiBcImJhclwiLCBcImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19
fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0VmFsdWUtPnNpemUoKSwgMik7CisgICAgICAgIG9iamVjdFZhbHVlID0gdmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDJVKTsKIAotICAgICAgICBTdHJpbmcgc3RyaW5n
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5nZXRTdHJpbmcoImZvbyIs
IHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3RWYWx1ZS0+
Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAg
ICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdl
dE9iamVjdCgiYmF6Iiwgb2JqZWN0KSk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgMSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKG9iamVjdC0+Z2V0QXJyYXkoInN1YiIsIGFycmF5KSk7CisgICAgICAgIGF1dG8gb2Jq
ZWN0ID0gb2JqZWN0VmFsdWUtPmdldE9iamVjdCgiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVF
KG9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAg
ICBhdXRvIGFycmF5ID0gb2JqZWN0LT5nZXRBcnJheSgic3ViIik7CisgICAgICAgIEVYUEVDVF9U
UlVFKGFycmF5KTsKICAgICAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAg
IH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiwiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJmb28iLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1
ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIs
IHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJG
YWxzZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCIxLmQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiWzEsXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCIxLDJdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEgMl0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl1dIiwgdmFsdWUpKTsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdLCIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9
IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IntcImZvb1wiOmJhcn0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb29cIjpcImJhclwifSIsIHZhbHVlKSk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6
XCJiYXJcIn19IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9LCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6
ZmFsc2V9LF0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiW3tcImZvb1wiOntcImJhelwiOmZhbHNlfV0iLCB2YWx1ZSkpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiLCIpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiZm9vIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiKSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJUclVlIikpOworICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiRmFsc2UiKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSxdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiMSwyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJbMSAyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDJdXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDJdLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIntmb286XCJiYXJcIn0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjpiYXJ9IikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IikpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9Iikp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wi
OlwiYmFyXCJ9fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIntcImZvb1wiOlwiYmFyXCJ9LCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjpcImJhclwifSx7XCJiYXpcIjpmYWxzZX0sXSIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjp7
XCJiYXpcIjpmYWxzZX1dIikpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiIFwiZm9vXCIgXG4iLCB2YWx1ZSkpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAg
ICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFs
dWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAg
ICAgICBFWFBFQ1RfRVEoImZvbyIsIHN0cmluZ1ZhbHVlKTsKICAgICB9CiAKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIiAxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiXHQxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4xIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXHQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgMSAiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIge30gIiwgdmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIsIHZhbHVlKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIs
IHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MTIzNFwiIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiIDEiKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlx0MSIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XG4xIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IikpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxICIpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIHt9ICIpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGRlwiIikpOworICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMzRcIiIpKTsKIAotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAxIiwgdmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt9IHt9IiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHhGIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwiXFx4RlwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RiBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxICAgXCIi
LCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxMiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxcdTEyXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMiAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIsIHZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEy
MyBcIiIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCIxIDEiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJ7fSB7fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltdIFtdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx4RiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx4RlwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHhGIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEgICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwiXFx1MTIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJcIlxcdTEyXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJcIlxcdTEyICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIFwiIikpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408310</attachid>
            <date>2020-09-08 21:31:37 -0700</date>
            <delta_ts>2020-09-08 23:36:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908213136.patch</filename>
            <type>text/plain</type>
            <size>1491227</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjM1Y2IwMThmMTA5ZDk4MTRiODk3MmE2MDcwM2M4ZTliYTY3YmU4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQw
YjUxZWRiODA2MDg2MGI3YmIxM2MwNjJhNTAzMTFmYTQyNGYxZGEuLjIwMzZiZDMyOWQzMTAxMzk3
Yjg5YmFkNjQyYjhiOTYwNTkwNDZlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuaDoKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6Ok9iamVjdEJhc2U6OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OnNldE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hPYmplY3QpOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoQXJyYXkpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6QXJyYXlPZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjYXN0ZWRBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6
OkFycmF5T2Y6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuY3Bw
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZh
bHVlOjphc0FycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjpwYXJzZUpTT04p
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQm9vbGVhbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzSW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpWYWx1ZTo6YXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Omdl
dERvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFN0
cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRPYmpl
Y3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0QXJyYXkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6T2JqZWN0QmFzZSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6QXJyYXlCYXNlOjp3cml0ZUpTT04gY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlCYXNlOjpBcnJheUJhc2UpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
QXJyYXlCYXNlOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNl
OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6
Om9wZW5BY2Nlc3NvcnMpOiBEZWxldGVkLgorICAgICAgICBVc2UgYFJlZiYmYCB3aGVyZXZlciBw
b3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIgZm9yIGBn
ZXQqYC9gYXMqYAorICAgICAgICBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFu
aXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBhc3N1bWVkIHRvIGV4aXN0LgorICAgICAg
ICBSZW1vdmUgdW51c2VkIG92ZXJsb2FkcyBhbmQgYWxsb3cgc3ViY2xhc3NlcyB0byBjYWxsIGBh
cypgIGluc3RlYWQgb2YgYG9wZW5BY2Nlc3NvcnNgIGFzCisgICAgICAgIHRoZXkncmUgZWZmZWN0
aXZlbHkgdGhlIHNhbWUgdGhpbmcuCisKIDIwMjAtMDktMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIENURm9udElzU3lzdGVtVUlG
b250KCkgaXMgZmFzdGVyIHRoYW4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KCkvQ1RG
b250Q29weUZvbnREZXNjcmlwdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwN2E1MzVkNGQ4NGMzZTlhYmY4
YjI1ZjBlYWE2ZDI4YmVlMzIzYjlkLi40NGUwOWNiMmU5Y2MxMjE0NGEzZWEyYzdjNzFjYzU1NTBh
YTc0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA4ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rl
cm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Qu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGlj
RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6CisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VN
YW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RL
ZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUg
Y29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0YzdmOGNiMGY3
ODQ4OTlmNTc4ODk0Li4yNjc1YTk3NzMyYzc1ZTUxOWUzNWE4MTEwOTg5ZmZjOWNjZDI3ODAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJp
dmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6Q29tbWFuZFJlc3Vs
dDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJE
cml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRV
bmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRDdXJyZW50VVJMKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZv
cndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dI
YW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9GcmFtZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6
ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3cp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudFNl
bGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdl
dEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVt
ZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NT
VmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBs
b2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGljayk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQ
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVz
dWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9uQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldE5hbWVkQ29va2ll
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBl
cmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlv
bnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpkaXNtaXNzQWxlcnQpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVydCk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNl
bmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmNw
cDoKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6aGFuZGxlUmVxdWVzdCk6
CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnNlbmRSZXNwb25zZSBjb25z
dCk6CisgICAgICAgIChXZWJEcml2ZXI6OnZhbHVlQXNOdW1iZXJJblJhbmdlKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6ZGVzZXJpYWxpemVUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OmRl
c2VyaWFsaXplUHJveHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpw
YXJzZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNl
cnZpY2U6OmZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcik6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OnZhbGlkYXRlZENhcGFiaWxpdGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6Om1lcmdlQ2FwYWJpbGl0aWVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6bWF0Y2hDYXBhYmlsaXRp
ZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNz
Q2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6
OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6bmV3
V2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6c3dpdGNoVG9G
cmFtZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmZpbmRFbGVtZW50T3JDb21wbGV0ZVdpdGhFcnJv
cik6CisgICAgICAgIChXZWJEcml2ZXI6OmZpbmRTdHJhdGVneUFuZFNlbGVjdG9yT3JDb21wbGV0
ZVdpdGhFcnJvcik6CisgICAgICAgIChXZWJEcml2ZXI6OmZpbmRTY3JpcHRBbmRBcmd1bWVudHNP
ckNvbXBsZXRlV2l0aEVycm9yKToKKyAgICAgICAgKFdlYkRyaXZlcjo6ZGVzZXJpYWxpemVDb29r
aWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUGF1c2VBY3Rpb24pOgorICAgICAgICAo
V2ViRHJpdmVyOjpwcm9jZXNzTnVsbEFjdGlvbik6CisgICAgICAgIChXZWJEcml2ZXI6OnByb2Nl
c3NLZXlBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUG9pbnRlckFjdGlvbik6
CisgICAgICAgIChXZWJEcml2ZXI6OnByb2Nlc3NQb2ludGVyUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJEcml2ZXI6OnByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNlKToKKyAgICAgICAgYEpTT05g
IGNsYXNzZXMgbm93IHVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxg
IGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNv
IHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNv
bmZpZGVudGx5IGtub3duCisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA3LTE1ICBGdWppaSBI
aXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV1bV2Vi
RHJpdmVyXSBHZW5lcmF0aW5nIFdlYkRyaXZlckF0b21zLmNwcCBpcyByYXJlbHkgZmFpbGluZyBh
cyAiSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCBqc21pbiIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCmluZGV4IDk5Y2MxYzcwMWIxM2ViOGViZmY0YjgyNDY5OWU1NDgwODBlMDk2Y2QuLjRjZTg5
NDkyODU4NmMzMTgyOGVjMmE2NTAxNTIxOWZhN2VlYmNmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3Nv
QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVk
IGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5qczoKKyAgICAgICAgKFdJLkNTU01hbmFn
ZXIucHJvdG90eXBlLnNldCBmb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgTm93IHRoYXQgZW51
bXMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGJhY2tlbmQgZGlzcGFjaGVy
IGhhbmRsZXJzLCB0aGUKKyAgICAgICAgYGFwcGVhcmFuY2VgIHBhcmFtZXRlciBvZiBgUGFnZS5z
ZXRGb3JjZWRBcHBlYXJhbmNlYCBtdXN0IGJlIG1hcmtlZCBgb3B0aW9uYWxgIGFzCisgICAgICAg
IHRoZXJlJ3Mgbm8gd2F5IGZvciBpdCB0byBhY2NlcHQgYW4gZW1wdHkgc3RyaW5nLCBhcyB0aGF0
J3Mgbm90IHBvc3NpYmxlIGZvciBhbiBlbnVtLgorICAgICAgICBBcyBzdWNoLCByZXdvcmsgdGhl
IGZyb250ZW5kIGxvZ2ljIGZvciBpbnZva2luZyBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNlYCB0
byBpbnN0ZWFkCisgICAgICAgIG5vdCBwcm92aWRlIGFuIGBhcHBlYXJhbmNlYCBwYXJhbWV0ZXIg
YXQgYWxsIHdoZW4gd2FudGluZyB0byAidW5zZXQiIGl0LgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuU2V0dGlu
Z3NUYWJDb250ZW50Vmlldy5wcm90b3R5cGUuX2NyZWF0ZUNvbnNvbGVTZXR0aW5nc1ZpZXcpOgor
ICAgICAgICBOb3cgdGhhdCBhbGwgbG9nZ2luZyBjaGFubmVscyBtYXRjaGluZyBhIGBDb25zb2xl
LkNoYW5uZWxTb3VyY2VgIGFyZSByZXR1cm5lZCBpbnN0ZWFkIG9mCisgICAgICAgIGp1c3QgdGhl
IGhhcmRjb2RlZCBsaXN0LCBjaGVjayBmb3IgYSBtYXRjaGluZyBgV0kuVUlTdHJpbmdgIGJlZm9y
ZSBzaG93aW5nIGEgYDxzZWxlY3Q+YC4KKwogMjAyMC0wOS0wNSAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIGJyZWFr
cG9pbnRzIHRvIGJlIGNvbmZpZ3VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWM4NzgwNzgzNDNhMzIzN2NkYzdi
ODE0MmQ5NGMyNTk3MmRiOWQ3Ny4uMmQzOTVlOWQ5ZGIyZDQ5M2Q3ODI5MTNmMzUxNzg4NjI4MTM4
MDhiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVzc2VkIGluIGNv
ZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUgZXJyb3Igc3Ry
aW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFyYW1ldGVy
cyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBhcmFtZXRlcnMg
d2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJlIHRoZSB1bmRl
cmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciB0bwor
ICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJvY2Vzc2VkCisg
ICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAtIG9wdGlvbmFs
IHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkgbWFrZSBmb3Ig
ZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2YgYXJndW1lbnRz
IGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3QpLCBhbmQgdGhh
dCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAgICAgICAgdHlw
ZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRlZCBpbnNwZWN0
b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFyYW1ldGVycyBh
cmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUg
YE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0
ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBkaXNwYXRjaGVy
IGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFuZHMgcmV0dXJu
IGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVzL3J1bGVzIGFi
b3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0dXJuIG9yIGEg
YHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUgb25lIGV4Y2Vw
dGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkgYSB0cmktc3Rh
dGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwgYW5kIHNvbWV0
aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0cmluZz5gLgor
CisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNgIHdoZXJldmVy
IHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAgICBKU09OIGFu
ZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVudGF0aW9uLgor
CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uOgorICAgICAg
ICBgQ29vcmRpbmF0ZVN5c3RlbWAgaGFzIGBQYWdlYCBhbmQgYFZpZXdwb3J0YCBlbnVtIHZhbHVl
cywgYnV0IGBXZWJBdXRvbWF0aW9uU2Vzc2lvbmAgY2hlY2tzCisgICAgICAgIGZvciBgIlBhZ2Ui
YCBhbmQgYCJMYXlvdXRWaWV3cG9ydCJgLiBBZGQgYSBgTGF5b3V0Vmlld3BvcnRgIGVudW0gdmFs
dWUgbm93IHRoYXQgZW51bXMgYXJlCisgICAgICAgIHByb2Nlc3NlZCBiZWZvcmUgYmVpbmcgcGFz
c2VkIHRvIGJhY2tlbmQgZGlzcGFjaGVyIGhhbmRsZXJzIHRvIHByZXNlcnZlIGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93
c2VyQWdlbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0
b3JCcm93c2VyQWdlbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uTWFjcm9zLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
bWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tOgorICAgICAgICBFbGlkZWQgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgY2hhbmdlcyBkZXNjcmliZSBhYm92ZS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdCk6CisgICAg
ICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3NzaWJsZSBhbmQg
YE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIGBnZXQq
YC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1bGF0ZWQgYW5k
IGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwogMjAyMC0wOS0w
NSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYklETF0gUmVh
bGlnbiBvdXIgSURMIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcyB3aXRoIHRob3NlIHNwZWNpZmll
ZCBpbiBXZWJJREwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFs
dWUuY3BwCmluZGV4IDZiODUzYzkzMWYxZGNlOTI1M2JiYWMwNmE5NWU2YWFjNTI3Y2YyNWEuLjc5
NjhiOTBhNzNiMjgyZGY1OTgyMjU2YTZlZGNiMmQ2ZTU3NDM5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcApAQCAtNjksNyArNjksNyBAQCBz
dGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudFZhbHVl
ID0ganNUb0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0SW5kZXgoZ2xvYmFs
T2JqZWN0LCBpKSwgbWF4RGVwdGgpOwogICAgICAgICAgICAgICAgIGlmICghZWxlbWVudFZhbHVl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBp
bnNwZWN0b3JBcnJheS0+cHVzaFZhbHVlKFdURk1vdmUoZWxlbWVudFZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgaW5zcGVjdG9yQXJyYXktPnB1c2hWYWx1ZShlbGVtZW50VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gaW5zcGVjdG9yQXJy
YXk7CiAgICAgICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1
ZT4ganNUb0luc3BlY3RvclZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEK
ICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0LCBvYmplY3QuZ2V0KGdsb2JhbE9iamVjdCwgbmFtZSksIG1heERlcHRoKTsKICAg
ICAgICAgICAgIGlmICghaW5zcGVjdG9yVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5n
KCksIFdURk1vdmUoaW5zcGVjdG9yVmFsdWUpKTsKKyAgICAgICAgICAgIGluc3BlY3Rvck9iamVj
dC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwgaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGluc3BlY3Rvck9iamVjdDsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFj
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5j
cHAKaW5kZXggNTQ1MGUyZjNjMDA5YzYwMThjZjljNTMwYTAzNmMzZGI3YTYzNDUwZS4uYTU5NjM5
NWNiZWE3OTFlNzBiZTNlMjM2MmZlNTdmNDM4MzRhNTk0YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcApAQCAtOTcsNyArOTcs
NyBAQCB2b2lkIEFzeW5jU3RhY2tUcmFjZTo6ZGlkQ2FuY2VsQXN5bmNDYWxsKCkKICAgICBtX3N0
YXRlID0gU3RhdGU6OkNhbmNlbGVkOwogfQogCi1SZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0
YWNrVHJhY2U+IEFzeW5jU3RhY2tUcmFjZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAor
UmVmPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxk
SW5zcGVjdG9yT2JqZWN0KCkgY29uc3QKIHsKICAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6
OlN0YWNrVHJhY2U+IHRvcFN0YWNrVHJhY2U7CiAgICAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xl
OjpTdGFja1RyYWNlPiBwcmV2aW91c1N0YWNrVHJhY2U7CkBAIC0xMjAsMTMgKzEyMCwxMyBAQCBS
ZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IEFzeW5jU3RhY2tUcmFjZTo6YnVp
bGRJbnNwZWN0b3JPYmplY3QoKSBjbwogICAgICAgICAgICAgdG9wU3RhY2tUcmFjZSA9IHByb3Rv
Y29sT2JqZWN0LnB0cigpOwogCiAgICAgICAgIGlmIChwcmV2aW91c1N0YWNrVHJhY2UpCi0gICAg
ICAgICAgICBwcmV2aW91c1N0YWNrVHJhY2UtPnNldFBhcmVudFN0YWNrVHJhY2UocHJvdG9jb2xP
YmplY3QucHRyKCkpOworICAgICAgICAgICAgcHJldmlvdXNTdGFja1RyYWNlLT5zZXRQYXJlbnRT
dGFja1RyYWNlKHByb3RvY29sT2JqZWN0LmNvcHlSZWYoKSk7CiAKICAgICAgICAgcHJldmlvdXNT
dGFja1RyYWNlID0gV1RGTW92ZShwcm90b2NvbE9iamVjdCk7CiAgICAgICAgIHN0YWNrVHJhY2Ug
PSBzdGFja1RyYWNlLT5tX3BhcmVudC5nZXQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gdG9wU3Rh
Y2tUcmFjZTsKKyAgICByZXR1cm4gdG9wU3RhY2tUcmFjZS5yZWxlYXNlTm9uTnVsbCgpOwogfQog
CiB2b2lkIEFzeW5jU3RhY2tUcmFjZTo6dHJ1bmNhdGUoc2l6ZV90IG1heERlcHRoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKaW5kZXgg
NmVkZTZjNDI1YWJjYWEyZDYxZTViYjdiMWJhMTllMzJlNTcyM2I2Yy4uNDk5YTFlMDVmZDU5NDNm
OWZhZWRjMzBlMGJkM2QyMGUwYzVkZGJlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpZERpc3BhdGNoQXN5bmNDYWxsKCk7CiAgICAgdm9pZCBkaWRDYW5jZWxBc3lu
Y0NhbGwoKTsKIAotICAgIFJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gYnVp
bGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKKyAgICBSZWY8UHJvdG9jb2w6OkNvbnNvbGU6OlN0
YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CiAKICAgICB+QXN5bmNTdGFj
a1RyYWNlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
Q29uc29sZU1lc3NhZ2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5jcHAKaW5kZXggNTQyYzdjN2IzN2VmYjJlNGE3NmEzMmEwMDhkMDYzZGJjODA1
Y2RkMC4uOTBhMWRkOTYwNDcwYTU0ZWQzYjE0NjZjZWNmZGVmYTgzNDk0NTgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAg
LTI2MSw5ICsyNjEsMTEgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChDb25z
b2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50c09iamVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGNvbHVtbnMsICJjb25zb2xlIl9zLCB0cnVlKSk7CisgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50
KCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbnNwZWN0b3JPYmpl
Y3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGNvbHVtbnMsICJjb25zb2xlIl9zLCB0cnVl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0o
aW5zcGVjdG9yT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGluamVjdGVkU2NyaXB0
LndyYXBPYmplY3QobV9hcmd1bWVudHMtPmFyZ3VtZW50QXQoaSksICJjb25zb2xlIl9zLCBnZW5l
cmF0ZVByZXZpZXcpOwpAQCAtMjcxLDcgKzI3Myw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFk
ZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5kRGlz
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKFdURk1v
dmUoaW5zcGVjdG9yVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI4NCw3
ICsyODYsNyBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9u
dGVuZERpc3BhdGNoZXImIGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKFdURk1vdmUoaW5z
cGVjdG9yVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJ
dGVtKGluc3BlY3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmNwcAppbmRleCBjYzg0OWYwNTFmYTQwNTE4YTlkMWEwMzQyOWJjMmI0
ZGJjZmIzMTAyLi42OTA5YTMzOWVhMmUzZGU2MDBmNTVmZDZmZTQ2ODM2NDYxNzFlMGE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cApAQCAtNTYsNyArNTYsNyBAQCBJbmplY3RlZFNjcmlwdDo6fkluamVjdGVkU2NyaXB0KCkKIHsK
IH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4ZWN1dGVPcHRpb25zJiYgb3B0aW9u
cywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2
b2lkIEluamVjdGVkU2NyaXB0OjpleGVjdXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4ZWN1dGVPcHRpb25zJiYgb3B0
aW9ucywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9w
dGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgp
CiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVk
U2NyaXB0T2JqZWN0KCksICJleGVjdXRlIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5j
dGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZ1bmN0aW9u
U3RyaW5nKTsKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHIKICAgICBt
YWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93biwgc2F2
ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdh
c1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmV2YWx1YXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZp
ZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNh
dmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1
bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJldmFsdWF0ZSJfcywgaW5zcGVjdG9yRW52
aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChleHByZXNzaW9uKTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBib29sIHJldHVy
bkJ5VmEKICAgICBtYWtlQXN5bmNDYWxsKGZ1bmN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjpjYWxs
RnVuY3Rpb25PbihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJn
dW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93bikKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImNhbGxGdW5jdGlvbk9uIl9zLCBpbnNwZWN0b3JF
bnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIEluamVjdGVkU2Ny
aXB0OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZQogICAgIEFTU0VSVCghc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBK
U0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1
ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmll
dywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNhbGxGcmFt
ZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFs
PGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCiB7CiAg
ICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0
T2JqZWN0KCksICJldmFsdWF0ZU9uQ2FsbEZyYW1lIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgp
LT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNh
bGxGcmFtZXMpOwpAQCAtMTE5LDUyICsxMTksNTUgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZh
bHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZQog
ICAgIG1ha2VFdmFsQ2FsbChlcnJvclN0cmluZywgZnVuY3Rpb24sIHJlc3VsdCwgd2FzVGhyb3du
LCBzYXZlZFJlc3VsdEluZGV4KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rp
b25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCiB7CiAgICAgRGVwcmVj
YXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCks
ICJnZXRGdW5jdGlvbkRldGFpbHMiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9u
Q2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnVuY3Rpb25JZCk7
CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVuY3Rp
b24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBKU09O
OjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3Ry
aW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
cmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46
OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIElu
amVjdGVkU2NyaXB0OjpmdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0
YWlscz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmZ1bmN0aW9uRGV0YWlscyhQcm90
b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFJlZlB0
cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCkKIHsKICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmpl
Y3QoKSwgImZ1bmN0aW9uRGV0YWlscyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rp
b25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCh2YWx1ZSk7CiAK
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVuY3Rpb24p
OwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBKU09OOjpW
YWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5n
KGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+YXNTdHJp
bmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmVz
dWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46
OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90b2Nv
bDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46OnJ1
bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYg
cmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyhQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJnZXRQ
cmV2aWV3Il9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkp
OwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKIAogICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gcmVzdWx0VmFsdWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFy
ZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpUeXBlOjpP
YmplY3QpIHsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcp
KQorICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICBpZiAoIWVycm9yU3RyaW5nKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwg
ZXJyb3IiX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBCaW5kaW5n
VHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pjo6cnVudGltZUNhc3QoV1RG
TW92ZShyZXN1bHRWYWx1ZSkpOworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pjo6cnVudGltZUNhc3QocmVzdWx0VmFs
dWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBi
b29sIG93blByb3BlcnRpZXMsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBn
ZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6Omdl
dFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZl
dGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCiB7CiAgICAg
QVNTRVJUKGZldGNoU3RhcnQgPj0gMCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBA
IC0xODIsMTAgKzE4NSwxMCBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplYwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KFdU
Rk1vdmUocmVzdWx0KSk7CisgICAgcHJvcGVydGllcyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRz
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+Ojpy
dW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKK3ZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNo
Q291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCiB7CiAgICAgQVNT
RVJUKGZldGNoU3RhcnQgPj0gMCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBAIC0y
MDIsMTAgKzIwNSwxMCBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KFdURk1v
dmUocmVzdWx0KSk7CisgICAgcHJvcGVydGllcyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50
aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJv
cGVydGllcykKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhQcm90
b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBi
b29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCiB7CiAgICAgRGVw
cmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0
KCksICJnZXRJbnRlcm5hbFByb3BlcnRpZXMiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1
bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0
SWQpOwpAQCAtMjE3LDExICsyMjAsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj46
OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7Ci0gICAgcHJvcGVydGllcyA9IGFycmF5LT5s
ZW5ndGgoKSA+IDAgPyBhcnJheSA6IG51bGxwdHI7CisgICAgYXV0byBhcnJheSA9IFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFs
UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoYXJyYXktPmxlbmd0aCgpKQorICAgICAgICBwcm9wZXJ0aWVzID0gV1RGTW92
ZShhcnJheSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxlY3Rpb25FbnRyaWVz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVu
dHJpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYg
ZW50cmllcykKIHsKICAgICBBU1NFUlQoZmV0Y2hTdGFydCA+PSAwKTsKICAgICBBU1NFUlQoZmV0
Y2hDb3VudCA+PSAwKTsKQEAgLTIzOCwxMCArMjQyLDEwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbnRyaWVzID0gQmluZGluZ1RyYWl0
czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+Pjo6cnVu
dGltZUNhc3QoV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbnRyaWVzID0gUHJvdG9jb2w6OkJpbmRp
bmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5
Pj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmpl
Y3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgY2FsbEFyZ3VtZW50SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkK
K3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAic2F2ZVJlc3VsdCJfcywgaW5zcGVj
dG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChjYWxsQXJndW1lbnRKU09OKTsKQEAgLTI1Miw5ICsyNTYsNyBAQCB2b2lk
IEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBjYWxsQXJndQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IHJl
c3VsdEluZGV4ID0gMDsKLSAgICBpZiAocmVzdWx0LT5hc0ludGVnZXIocmVzdWx0SW5kZXgpICYm
IHJlc3VsdEluZGV4ID4gMCkKLSAgICAgICAgc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdEluZGV4
OworICAgIHNhdmVkUmVzdWx0SW5kZXggPSByZXN1bHQtPmFzSW50ZWdlcigpOwogfQogCiBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluamVjdGVkU2Ny
aXB0Ojp3cmFwQ2FsbEZyYW1lcyhKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcykgY29uc3QKQEAgLTI2
OSw4ICsyNzEsOCBAQCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+IEluamVjdGVkU2NyaXB0Ojp3cmFwQ2FsbEZyYW1lcwogICAgICAgICByZXR1cm4gSlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogCiAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9i
amVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpOwotICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpCi0gICAgICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGltZUNhc3Qo
V1RGTW92ZShyZXN1bHQpKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChyZXN1bHQgJiYgcmVz
dWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KQorICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6
OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiAKICAg
ICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT46OmNy
ZWF0ZSgpOwogfQpAQCAtMjg4LDExICsyOTAsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KEpTQzo6SlNWYWx1ZQog
ICAgIGlmICghY2FsbFJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNP
YmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGds
b2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46
OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwSlNP
TlN0cmluZyhjb25zdCBTdHJpbmcmIGpzb24sIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29s
IGdlbmVyYXRlUHJldmlldykgY29uc3QKQEAgLTMxMCwxMSArMzE2LDE1IEBAIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcEpTT05TdHJp
bmcoY29uc3QgU3RyCiAgICAgaWYgKGNhbGxSZXN1bHQudmFsdWUoKS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmpl
Y3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVz
dWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZh
bHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3QgPSBy
ZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5y
ZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUoSlNDOjpKU1ZhbHVlIHRhYmxlLCBKU0M6
OkpTVmFsdWUgY29sdW1ucykgY29uc3QKQEAgLTMzMiwxMSArMzQyLDE1IEBAIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKEpT
Qzo6SlNWYWx1ZSB0CiAgICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5z
cGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYg
KCFyZXN1bHRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmlu
ZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qo
cmVzdWx0T2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09i
amVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkp
OwogfQogCiBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+IEluamVjdGVk
U2NyaXB0OjpwcmV2aWV3VmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKSBjb25zdApAQCAtMzQ5LDEx
ICszNjMsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiBJbmpl
Y3RlZFNjcmlwdDo6cHJldmlld1ZhbHVlKEpTQzo6SlNWYWwKICAgICBpZiAoIWNhbGxSZXN1bHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7
Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBh
dXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJl
c3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpPYmpl
Y3RQcmV2aWV3Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdE9i
amVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1Ry
YWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3Vs
dE9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdDo6c2V0
RXZlbnRWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKaW5kZXggY2RlZTQ1ZjJkNmIzMzc3ZjFlMDUy
M2NmZTQwMWFlMjhiY2YyZGY2Zi4uZDYzYWVmMDI1OTk2NDg4NDZjNjgzNjE1Y2I1NmM2NDNjMzg5
YjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuaApAQCAtNTksMjAgKzU5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBzYXZlUmVz
dWx0IHsgZmFsc2UgfTsKICAgICAgICAgVmVjdG9yPEpTQzo6SlNWYWx1ZT4gYXJnczsKICAgICB9
OwotICAgIHZvaWQgZXhlY3V0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25T
dHJpbmcsIEV4ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGV4ZWN1dGUoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhlY3V0ZU9wdGlvbnMmJiwgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJv
b2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOwogCi0gICAg
dm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wg
cmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJv
b2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZv
aWQgZXZhbHVhdGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQ
SSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVz
dWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7
CiAgICAgdm9pZCBhd2FpdFByb21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwg
QXN5bmNDYWxsQ2FsbGJhY2smJik7Ci0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9y
U3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1l
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
Ym9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5l
cmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOwotICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJh
dGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bik7Ci0gICAgdm9pZCBnZXRGdW5jdGlvbkRldGFp
bHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7Ci0gICAgdm9pZCBmdW5jdGlv
bkRldGFpbHMoRXJyb3JTdHJpbmcmLCBKU0M6OkpTVmFsdWUsIFJlZlB0cjxQcm90b2NvbDo6RGVi
dWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIG93blByb3BlcnRpZXMsIGlu
dCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cmVzdWx0KTsKLSAgICB2b2lkIGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldEludGVybmFs
UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50
ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldENvbGxlY3Rp
b25FbnRyaWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3Ry
aW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJp
ZXMpOwotICAgIHZvaWQgc2F2ZVJlc3VsdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2Fs
bEFyZ3VtZW50SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9p
ZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1
ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNh
dmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdElu
ZGV4KTsKKyAgICB2b2lkIGNhbGxGdW5jdGlvbk9uKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25h
bDxib29sPiYgd2FzVGhyb3duKTsKKyAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7CisgICAgdm9pZCBmdW5jdGlv
bkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0
UHJldmlldyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpOworICAgIHZv
aWQgZ2V0UHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBib29sIG93blByb3BlcnRpZXMsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3Vu
dCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldERpc3Bs
YXlhYmxlUHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2
aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNj
cmlwdG9yPj4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVu
dHJpZXMpOworICAgIHZvaWQgc2F2ZVJlc3VsdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpOwogCiAgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+PiB3cmFwQ2FsbEZyYW1lcyhKU0M6OkpTVmFsdWUpIGNvbnN0OwogICAgIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB3cmFwT2JqZWN0KEpTQzo6SlNWYWx1ZSwgY29u
c3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3ID0gZmFsc2UpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuY3BwCmluZGV4IDc1NjlmNWI1ZDk3NTgwODgyNGY2NGViMmVmMGE0MDZiNjRhNGQ5
MzkuLjA5MDE2NmE5MWZjNjZhZDFjZGU3MTgxOTUzY2Y0NzczZmY2NmYwOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5j
cHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBSZWY8SlNPTjo6VmFsdWU+IEluamVjdGVkU2NyaXB0QmFz
ZTo6bWFrZUNhbGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdQogICAgIHJldHVy
biByZXN1bHRKU09OVmFsdWUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbmplY3RlZFNj
cmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERlcHJlY2F0
ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93
YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmpl
Y3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9wdGlv
bmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1bHRJ
bmRleCkKIHsKICAgICBjaGVja0NhbGxSZXN1bHQoZXJyb3JTdHJpbmcsIG1ha2VDYWxsKGZ1bmN0
aW9uKSwgb3V0X3Jlc3VsdE9iamVjdCwgb3V0X3dhc1Rocm93biwgb3V0X3NhdmVkUmVzdWx0SW5k
ZXgpOwogfQpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtl
QXN5bmNDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sCiAgICAg
fQogfQogCi12b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8
Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4
KQordm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNrQ2FsbFJlc3VsdChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBPcHRp
b25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgb3V0X3NhdmVkUmVzdWx0
SW5kZXgpCiB7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50
ZXJuYWwgZXJyb3I6IHJlc3VsdCB2YWx1ZSBpcyBlbXB0eSJfczsKQEAgLTE1MSw0OSArMTUxLDQy
IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdC0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpIHsKLSAgICAgICAgcmVzdWx0LT5hc1N0
cmluZyhlcnJvclN0cmluZyk7Ci0gICAgICAgIEFTU0VSVChlcnJvclN0cmluZy5sZW5ndGgoKSk7
CisgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0LT5hc1N0cmluZygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0VHVwbGU7Ci0gICAg
aWYgKCFyZXN1bHQtPmFzT2JqZWN0KHJlc3VsdFR1cGxlKSkgeworICAgIGF1dG8gcmVzdWx0VHVw
bGUgPSByZXN1bHQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRUdXBsZSkgewogICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlzIG5vdCBhbiBPYmplY3Qi
X3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBy
ZXN1bHRPYmplY3Q7Ci0gICAgaWYgKCFyZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1bHQiX3Ms
IHJlc3VsdE9iamVjdCkpIHsKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFR1cGxlLT5n
ZXRPYmplY3QoInJlc3VsdCJfcyk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpIHsKICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZh
bHVlIGFuZCB3YXNUaHJvd24gZmxhZyJfczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGJvb2wgd2FzVGhyb3duID0gZmFsc2U7Ci0gICAgaWYgKCFyZXN1bHRUdXBsZS0+Z2V0Qm9vbGVh
bigid2FzVGhyb3duIl9zLCB3YXNUaHJvd24pKSB7CisgICAgb3V0X3dhc1Rocm93biA9IHJlc3Vs
dFR1cGxlLT5nZXRCb29sZWFuKCJ3YXNUaHJvd24iX3MpOworICAgIGlmICghb3V0X3dhc1Rocm93
bikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlzIG5v
dCBhIHBhaXIgb2YgdmFsdWUgYW5kIHdhc1Rocm93biBmbGFnIl9zOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgb3V0X3Jlc3VsdE9iamVjdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7Ci0KLSAg
ICBpZiAod2FzVGhyb3duKQotICAgICAgICBvdXRfd2FzVGhyb3duID0gd2FzVGhyb3duOwotCi0g
ICAgaW50IHNhdmVkUmVzdWx0SW5kZXg7Ci0gICAgaWYgKHJlc3VsdFR1cGxlLT5nZXRJbnRlZ2Vy
KCJzYXZlZFJlc3VsdEluZGV4Il9zLCBzYXZlZFJlc3VsdEluZGV4KSkKLSAgICAgICAgb3V0X3Nh
dmVkUmVzdWx0SW5kZXggPSBzYXZlZFJlc3VsdEluZGV4OworICAgIG91dF9yZXN1bHRPYmplY3Qg
PSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIG91dF9z
YXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0VHVwbGUtPmdldEludGVnZXIoInNhdmVkUmVzdWx0SW5k
ZXgiX3MpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tBc3luY0NhbGxSZXN1
bHQoUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIGNvbnN0IEFzeW5jQ2FsbENhbGxiYWNrJiBj
YWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+IHJlc3VsdE9iamVjdDsKICAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247
CiAgICAgT3B0aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OwogCiAgICAgY2hlY2tDYWxsUmVz
dWx0KGVycm9yU3RyaW5nLCByZXN1bHQsIHJlc3VsdE9iamVjdCwgd2FzVGhyb3duLCBzYXZlZFJl
c3VsdEluZGV4KTsKIAotICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgY2FsbGJhY2soZXJyb3JT
dHJpbmcsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgV1RGTW92ZSh3YXNUaHJvd24pLCBXVEZNb3Zl
KHNhdmVkUmVzdWx0SW5kZXgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFz
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
aAppbmRleCA4MTIzZjFkNjZlOWIxM2FkNGFkMGVjYjFhM2NhZDMzZjU5NzZkNWQ3Li5mNGU2YTBm
ZWVhNDExY2QwNTg1OTg0YmQ3NGFjYzRiMjRhYThlZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKQEAgLTQ3LDggKzQ3
LDcgQEAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsOwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci10eXBlZGVmIFdURjo6RnVuY3Rpb248dm9p
ZChFcnJvclN0cmluZyYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYm
LCBPcHRpb25hbDxib29sPiYsIE9wdGlvbmFsPGludD4mKT4gQXN5bmNDYWxsQ2FsbGJhY2s7Cit1
c2luZyBBc3luY0NhbGxDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0
aW9uYWw8Ym9vbD4mJiwgT3B0aW9uYWw8aW50PiYmKT47CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluamVjdGVkU2NyaXB0QmFzZSB7CiBwdWJsaWM6CkBAIC02OSwxMSArNjgsMTEgQEAgcHJv
dGVjdGVkOgogICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCYgaW5qZWN0ZWRTY3Jp
cHRPYmplY3QoKSBjb25zdDsKICAgICBFeHBlY3RlZDxKU0M6OkpTVmFsdWUsIE5ha2VkUHRyPEpT
Qzo6RXhjZXB0aW9uPj4gY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCYpIGNvbnN0OwogICAgIFJlZjxKU09OOjpWYWx1ZT4gbWFrZUNhbGwo
RGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJik7Ci0gICAgdm9pZCBtYWtlRXZhbENhbGwo
RXJyb3JTdHJpbmcmLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9p
ZCBtYWtlRXZhbENhbGwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNh
dmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgbWFrZUFzeW5jQ2FsbChEZXByZWNhdGVkOjpTY3Jp
cHRGdW5jdGlvbkNhbGwmLCBBc3luY0NhbGxDYWxsYmFjayYmKTsKIAogcHJpdmF0ZToKLSAgICB2
b2lkIGNoZWNrQ2FsbFJlc3VsdChFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVz
dWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVj
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCk7CisgICAgdm9pZCBjaGVja0NhbGxSZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIGNoZWNrQXN5bmNDYWxsUmVz
dWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBBc3luY0NhbGxDYWxsYmFjayYp
OwogCiAgICAgU3RyaW5nIG1fbmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCA5MGFmN2E4ZjNh
MzMwNTYxNmI0OTVlNWIzY2FkZjA1MzMxMWUyMzUwLi5mY2NjOGVmMTk4NmQ4ODZkNzU2MDBmNzM2
MTAwYTdlYjM5NmI1MDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC0xMDIsMTkgKzEwMiwxOSBA
QCBpbnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiAKIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQog
ewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGFyc2VkT2JqZWN0SWQ7Ci0gICAgaWYgKCFKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKG9iamVjdElkLCBwYXJzZWRPYmplY3RJZCkpCisgICAgYXV0byBw
YXJzZWRPYmplY3RJZCA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04ob2JqZWN0SWQpOworICAgIGlm
ICghcGFyc2VkT2JqZWN0SWQpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcGFyc2VkT2Jq
ZWN0SWQtPmFzT2JqZWN0KHJlc3VsdE9iamVjdCkpCisgICAgYXV0byByZXN1bHRPYmplY3QgPSBw
YXJzZWRPYmplY3RJZC0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKICAgICAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBsb25nIGluamVjdGVkU2NyaXB0SWQg
PSAwOwotICAgIGlmICghcmVzdWx0T2JqZWN0LT5nZXRJbnRlZ2VyKCJpbmplY3RlZFNjcmlwdElk
Il9zLCBpbmplY3RlZFNjcmlwdElkKSkKKyAgICBhdXRvIGluamVjdGVkU2NyaXB0SWQgPSByZXN1
bHRPYmplY3QtPmdldEludGVnZXIoImluamVjdGVkU2NyaXB0SWQiX3MpOworICAgIGlmICghaW5q
ZWN0ZWRTY3JpcHRJZCkKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBy
ZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KGluamVjdGVkU2NyaXB0SWQpOworICAgIHJl
dHVybiBtX2lkVG9JbmplY3RlZFNjcmlwdC5nZXQoKmluamVjdGVkU2NyaXB0SWQpOwogfQogCiB2
b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmlu
ZyYgb2JqZWN0R3JvdXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCmluZGV4IDY5M2U4YjI1
YzczNzc4MzQwZTgzOTQwNDY3ODZkOTMxOGE4YTA5MjQuLmRiYTE3ZDRhNjVhNzBkMzU4NTFjOGM1
MTlhZDFlY2JkNTcxNzUyZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCkBAIC02OCw3
ICs2OCw3IEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1
cmUoY29uc3QgRXJyb3JTdHJpbmcmIGVycm9yKQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJ0aWFsTWVzc2FnZSkK
K3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoUmVmPEpT
T046Ok9iamVjdD4mJiBwYXJ0aWFsTWVzc2FnZSkKIHsKICAgICBpZiAobV9hbHJlYWR5U2VudCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIAogICAgIEFTU0VSVCghbV9wcm90
b2NvbEVycm9ycy5zaXplKCkpOwogCi0gICAgbG9uZyByZXF1ZXN0SWQgPSAwOworICAgIGludCBy
ZXF1ZXN0SWQgPSAwOwogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7CiAK
ICAgICB7CkBAIC0xMTUsNDYgKzExNSw1MCBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIC8vIHRoZSBvdXRlciByZXF1ZXN0
J3MgaWQganVzdCBiZWNhdXNlIHRoZSBpbm5lciByZXF1ZXN0IGlzIGJvZ3VzLgogICAgICAgICBT
ZXRGb3JTY29wZTxPcHRpb25hbDxsb25nPj4gc2NvcGVkUmVxdWVzdElkKG1fY3VycmVudFJlcXVl
c3RJZCwgV1RGOjpudWxsb3B0KTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcnNl
ZE1lc3NhZ2U7Ci0gICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlLCBw
YXJzZWRNZXNzYWdlKSkgeworICAgICAgICBhdXRvIHBhcnNlZE1lc3NhZ2UgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgICAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKICAg
ICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBi
ZSBpbiBKU09OIGZvcm1hdCJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFwYXJzZWRNZXNz
YWdlLT5hc09iamVjdChtZXNzYWdlT2JqZWN0KSkgeworICAgICAgICBtZXNzYWdlT2JqZWN0ID0g
cGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7
CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiTWVzc2Fn
ZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGlu
Z0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiByZXF1ZXN0SWRWYWx1ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdlT2Jq
ZWN0LT5nZXRWYWx1ZSgiaWQiX3MsIHJlcXVlc3RJZFZhbHVlKSkgeworICAgICAgICBhdXRvIHJl
cXVlc3RJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoImlkIl9zKTsKKyAgICAgICAg
aWYgKCFyZXF1ZXN0SWRWYWx1ZSkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJ
bnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
ICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFyZXF1ZXN0SWRWYWx1ZS0+YXNJbnRlZ2VyKHJlcXVlc3RJZCkpIHsK
KyAgICAgICAgYXV0byByZXF1ZXN0SWRJbnQgPSByZXF1ZXN0SWRWYWx1ZS0+YXNJbnRlZ2VyKCk7
CisgICAgICAgIGlmICghcmVxdWVzdElkSW50KSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJl
IGludGVnZXIiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIHJlcXVlc3RJZCA9ICpyZXF1ZXN0SWRJ
bnQ7CiAgICAgfQogCiAgICAgewogICAgICAgICAvLyBXZSBjb3VsZCBiZSBjYWxsZWQgcmUtZW50
cmFudGx5IGZyb20gYSBuZXN0ZWQgcnVuIGxvb3AsIHNvIHJlc3RvcmUgdGhlIHByZXZpb3VzIGlk
LgogICAgICAgICBTZXRGb3JTY29wZTxPcHRpb25hbDxsb25nPj4gc2NvcGVkUmVxdWVzdElkKG1f
Y3VycmVudFJlcXVlc3RJZCwgcmVxdWVzdElkKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IG1ldGhvZFZhbHVlOwotICAgICAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJt
ZXRob2QiX3MsIG1ldGhvZFZhbHVlKSkgeworICAgICAgICBhdXRvIG1ldGhvZFZhbHVlID0gbWVz
c2FnZU9iamVjdC0+Z2V0VmFsdWUoIm1ldGhvZCJfcyk7CisgICAgICAgIGlmICghbWV0aG9kVmFs
dWUpIHsKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICIn
bWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFN0
cmluZyBtZXRob2RTdHJpbmc7Ci0gICAgICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKG1l
dGhvZFN0cmluZykpIHsKKyAgICAgICAgYXV0byBtZXRob2RTdHJpbmcgPSBtZXRob2RWYWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFtZXRob2RTdHJpbmcpIHsKICAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnbWV0aG9kJyBw
cm9wZXJ0eSBtdXN0IGJlIHN0cmluZyJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9y
cygpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg0LDEyICsxODgsMTIgQEAgdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogfQogCiAvLyBG
SVhNRTogcmVtb3ZlIHRoaXMgZnVuY3Rpb24gd2hlbiBsZWdhY3kgSW5zcGVjdG9yT2JqZWN0IHN5
bWJvbHMgYXJlIG5vIGxvbmdlciBuZWVkZWQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc5ODQ3Pi4K
LXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiByZXN1bHQpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KQogewog
ICAgIHNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwogfQog
Ci12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sKQordm9pZCBCYWNrZW5kRGlzcGF0Y2hl
cjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3Vs
dCwgYm9vbCkKIHsKICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIApAQCAt
MjcwLDc0ICsyNzQsNjQgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xF
cnJvcihPcHRpb25hbDxsb25nPiByZWxhdGVkUmVxdWVzdElkLCBDb20KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLVQgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSlNPTjo6
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChKU09OOjpWYWx1ZSYs
IFQmKT4gYXNNZXRob2QsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQorVCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIHJlcXVpcmVkLCBzdGQ6OmZ1bmN0aW9uPFQoSlNPTjo6VmFsdWUmKT4gY29udmVy
dGVyLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkKIHsKLSAgICBUIHJlc3VsdChkZWZhdWx0VmFsdWUp
OwotICAgIC8vIG91dF9vcHRpb25hbFZhbHVlRm91bmQgc2lnbmFscyB0byB0aGUgY2FsbGVyIHdo
ZXRoZXIgYW4gb3B0aW9uYWwgcHJvcGVydHkgd2FzIGZvdW5kLgotICAgIC8vIGlmIG91dF9vcHRp
b25hbFZhbHVlRm91bmQgPT0gbnVsbHB0ciwgdGhlbiB0aGlzIGlzIGEgcmVxdWlyZWQgcHJvcGVy
dHkuCi0gICAgaWYgKG91dF9vcHRpb25hbFZhbHVlRm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9u
YWxWYWx1ZUZvdW5kID0gZmFsc2U7CisgICAgVCByZXN1bHQ7CiAKICAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQpCisgICAgICAgIGlmIChyZXF1
aXJlZCkKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4g
cmVxdWlyZWQgcGFyYW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVOYW1lLCAi
Jy4iKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgYXV0byBmaW5kUmVz
dWx0ID0gb2JqZWN0LT5maW5kKG5hbWUpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG9iamVjdC0+
ZW5kKCkpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICBp
ZiAocmVxdWlyZWQpCiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCJQYXJhbWV0ZXIgJyIsIG5hbWUsICIn
IHdpdGggdHlwZSAnIiwgdHlwZU5hbWUsICInIHdhcyBub3QgZm91bmQuIikpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlmICghYXNNZXRob2QoKmZpbmRSZXN1bHQtPnZh
bHVlLCByZXN1bHQpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBhcmFtZXRlciAnIiwgbmFtZSwgIicg
aGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyIsIHR5cGVOYW1lLCAiJy4iKSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIHJlc3VsdCA9IGNvbnZlcnRlcihmaW5kUmVzdWx0
LT52YWx1ZSk7CiAKLSAgICBpZiAob3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKLSAgICAgICAgKm91
dF9vcHRpb25hbFZhbHVlRm91bmQgPSB0cnVlOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtl
U3RyaW5nKCJQYXJhbWV0ZXIgJyIsIG5hbWUsICInIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJl
ICciLCB0eXBlTmFtZSwgIicuIikpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGJvb2wgY2FzdFRvSW50ZWdlcihKU09OOjpWYWx1ZSYgdmFsdWUsIGludCYgcmVzdWx0KSB7IHJl
dHVybiB2YWx1ZS5hc0ludGVnZXIocmVzdWx0KTsgfQotc3RhdGljIGJvb2wgY2FzdFRvTnVtYmVy
KEpTT046OlZhbHVlJiB2YWx1ZSwgZG91YmxlJiByZXN1bHQpIHsgcmV0dXJuIHZhbHVlLmFzRG91
YmxlKHJlc3VsdCk7IH0KLQotaW50IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitP
cHRpb25hbDxib29sPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihKU09OOjpPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2Fz
dFRvSW50ZWdlciwgIkludGVnZXIiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxPcHRp
b25hbDxib29sPj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0Jvb2xl
YW4sICJCb29sZWFuIik7CiB9CiAKLWRvdWJsZSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91Ymxl
KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQpCitPcHRpb25hbDxpbnQ+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8ZG91YmxlPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQs
IDAsICZjYXN0VG9OdW1iZXIsICJOdW1iZXIiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1
ZTxPcHRpb25hbDxpbnQ+PihvYmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFz
SW50ZWdlciwgIkludGVnZXIiKTsKIH0KIAotU3RyaW5nIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCkKK09wdGlvbmFsPGRvdWJsZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShK
U09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQog
ewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1
ZUZvdW5kLCAiIiwgJkpTT046OlZhbHVlOjphc1N0cmluZywgIlN0cmluZyIpOworICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGRvdWJsZT4+KG9iamVjdCwgbmFtZSwgcmVxdWly
ZWQsICZKU09OOjpWYWx1ZTo6YXNEb3VibGUsICJOdW1iZXIiKTsKIH0KIAotYm9vbCBCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorU3RyaW5nIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxib29sPihvYmplY3QsIG5hbWUs
IHZhbHVlRm91bmQsIGZhbHNlLCAmSlNPTjo6VmFsdWU6OmFzQm9vbGVhbiwgIkJvb2xlYW4iKTsK
KyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+KG9iamVjdCwgbmFtZSwgcmVxdWly
ZWQsICZKU09OOjpWYWx1ZTo6YXNTdHJpbmcsICJTdHJpbmciKTsKIH0KIAotUmVmUHRyPEpTT046
Ok9iamVjdD4gQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChKU09OOjpPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorUmVmUHRyPEpTT046OlZh
bHVlPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVy
dHlWYWx1ZTxSZWZQdHI8SlNPTjo6T2JqZWN0Pj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBu
dWxscHRyLCAmSlNPTjo6VmFsdWU6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OlZhbHVlPj4ob2JqZWN0LCBuYW1lLCByZXF1aXJl
ZCwgJkpTT046OlZhbHVlOjphc1ZhbHVlLCAiVmFsdWUiKTsKIH0KIAotUmVmUHRyPEpTT046OkFy
cmF5PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1JlZlB0cjxKU09OOjpPYmplY3Q+
IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZTxSZWZQdHI8SlNPTjo6QXJyYXk+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxw
dHIsICZKU09OOjpWYWx1ZTo6YXNBcnJheSwgIkFycmF5Iik7CisgICAgcmV0dXJuIGdldFByb3Bl
cnR5VmFsdWU8UmVmUHRyPEpTT046Ok9iamVjdD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZK
U09OOjpWYWx1ZTo6YXNPYmplY3QsICJPYmplY3QiKTsKIH0KIAotUmVmUHRyPEpTT046OlZhbHVl
PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1JlZlB0cjxKU09OOjpBcnJheT4gQmFj
a2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
UmVmUHRyPEpTT046OlZhbHVlPj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBudWxscHRyLCAm
SlNPTjo6VmFsdWU6OmFzVmFsdWUsICJWYWx1ZSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPFJlZlB0cjxKU09OOjpBcnJheT4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpW
YWx1ZTo6YXNBcnJheSwgIkFycmF5Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmluZGV4IDk1ZDlkODExODhlNzM1ZThmMWI3MGNjMGRlZWUy
NjgyY2I2NzE0ZjAuLjAyYzk2ZDcyNjM4YzIyMmYwMzBkMTQ5MWNjOWI5MjYyYjA4YmVjYmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgKQEAgLTI5LDggKzI5LDEwIEBACiAjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVz
LmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC01OSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFk
eVNlbnQgPSB0cnVlOyB9CiAKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWY8SlNPTjo6T2JqZWN0PiYm
KTsKICAgICAgICAgdm9pZCBzZW5kRmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYpOwogCiAgICAg
cHJpdmF0ZToKQEAgLTg3LDI4ICs4OSwyNyBAQCBwdWJsaWM6CiAgICAgLy8gTm90ZSB0aGF0ICd1
bnVzZWQnIGlzIGEgd29ya2Fyb3VuZCBzbyB0aGUgY29tcGlsZXIgY2FuIHBpY2sgdGhlIHJpZ2h0
IHNlbmRSZXNwb25zZSBiYXNlZCBvbiBhcml0eS4KICAgICAvLyBXaGVuIDxodHRwOi8vd2Via2l0
Lm9yZy9iLzE3OTg0Nz4gaXMgZml4ZWQgb3IgdGhpcyBjbGFzcyBpcyByZW5hbWVkIGZvciB0aGUg
SlNPTjo6T2JqZWN0IGNhc2UsCiAgICAgLy8gdGhlbiB0aGlzIGFsdGVybmF0ZSBtZXRob2Qgd2l0
aCBhIGR1bW15IHBhcmFtZXRlciBjYW4gYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGUgb25lIHdp
dGhvdXQgaXQuCi0gICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7Ci0gICAgdm9pZCBzZW5kUmVzcG9u
c2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KTsKKyAgICB2
b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpTT046Ok9iamVjdD4mJiByZXN1
bHQsIGJvb2wgdW51c2VkKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwg
UmVmPEpTT046Ok9iamVjdD4mJiByZXN1bHQpOwogICAgIHZvaWQgc2VuZFBlbmRpbmdFcnJvcnMo
KTsKIAogICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihDb21tb25FcnJvckNvZGUsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoT3B0
aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFdURl9J
TlRFUk5BTAotICAgIFQgZ2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBz
dGQ6OmZ1bmN0aW9uPGJvb2woSlNPTjo6VmFsdWUmLCBUJik+LCBjb25zdCBjaGFyKiB0eXBlTmFt
ZSk7Ci0KLSAgICBpbnQgZ2V0SW50ZWdlcihKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIGRvdWJsZSBnZXREb3VibGUoSlNPTjo6T2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBTdHJpbmcgZ2V0
U3RyaW5nKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgYm9vbCBnZXRCb29sZWFuKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBnZXRWYWx1ZShK
U09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGdldE9iamVjdChKU09OOjpPYmplY3QqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZ2V0
QXJyYXkoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
KTsKKyAgICBPcHRpb25hbDxib29sPiBnZXRCb29sZWFuKEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgT3B0aW9uYWw8aW50PiBnZXRJbnRlZ2Vy
KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAg
T3B0aW9uYWw8ZG91YmxlPiBnZXREb3VibGUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKEpTT046Ok9iamVjdCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBnZXRWYWx1ZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVx
dWlyZWQpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGdldE9iamVjdChKU09OOjpPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gZ2V0QXJyYXkoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJl
cXVpcmVkKTsKIAogcHJpdmF0ZToKICAgICBCYWNrZW5kRGlzcGF0Y2hlcihSZWY8RnJvbnRlbmRS
b3V0ZXI+JiYpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldFByb3BlcnR5
VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkLCBz
dGQ6OmZ1bmN0aW9uPFQoSlNPTjo6VmFsdWUmKT4gY29udmVydGVyLCBjb25zdCBjaGFyKiB0eXBl
TmFtZSk7CisKICAgICBSZWY8RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKj4gbV9kaXNwYXRj
aGVyczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaAppbmRleCBkNzAxMGE1YzYyZTg2MzNhNGRkMDFiMmMwMDYw
NWJhYWNjOWM4Yzc5Li41ODc3ZTBkNzQxMDgyZjcxMWE1ZmZlZDQzNWNlZmMwZjIxMzEzMzVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaApAQCAtMjcsMTIgKzI3LDE5IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAKK3VzaW5n
IEVycm9yU3RyaW5nID0gU3RyaW5nOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEVy
cm9yU3RyaW5nT3IgPSBFeHBlY3RlZDxULCBFcnJvclN0cmluZz47CisKIHRlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgQmluZGluZ1RyYWl0czsKIAogdGVtcGxhdGU8SlNPTjo6VmFsdWU6OlR5cGUg
dHlwZT4gc3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewpAQCAtNDQsMjkgKzUxLDIzIEBA
IHRlbXBsYXRlPEpTT046OlZhbHVlOjpUeXBlIHR5cGU+IHN0cnVjdCBQcmltaXRpdmVCaW5kaW5n
VHJhaXRzIHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEpTT046OkFycmF5T2Y8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPEpTT046OkFycmF5T2Y8VD4+
IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKKyAgICBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8VD4+IHJ1bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzQXJyYXkoYXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOwotICAgICAgICBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS5n
ZXQoKSk7CisgICAgICAgIGF1dG8gYXJyYXkgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBC
aW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8VD4+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShhcnJheS5nZXQoKSk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU09OOjpBcnJh
eU9mPFQ+KSA9PSBzaXplb2YoSlNPTjo6QXJyYXkpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09OOjpBcnJheU9mPFQ+Kj4oc3RhdGljX2Nhc3Q8SlNP
Tjo6QXJyYXlCYXNlKj4oYXJyYXkuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxKU09OOjpBcnJheU9mPFQ+PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6
QXJyYXlCYXNlPihhcnJheS5yZWxlYXNlTm9uTnVsbCgpKSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogICAg
IHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5PiBhcnJheTsKLSAgICAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
QXJyYXkoYXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RT
dWNjZWVkZWQpOworICAgICAgICBhdXRvIGFycmF5ID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICAg
ICAgQVNTRVJUKGFycmF5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5
LT5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoYXJyYXktPmdldChpKS5nZXQoKSk7Ci0jZWxzZQotICAgICAgICBV
TlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAg
ICBCaW5kaW5nVHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS0+Z2V0
KGkpLnB0cigpKTsKKyNlbmRpZgogICAgIH0KIH07CiAKQEAgLTg1LDYgKzg2LDQgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxpbnQ+IDogUHJpbWl0aXZlQmluZGluZ1RyYWl0czxK
U09OOjpWYWx1ZTo6VHlwZToKIAogfQogCi11c2luZyBQcm90b2NvbDo6QmluZGluZ1RyYWl0czsK
LQogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAK
aW5kZXggNDZkMGI2OTQzMjhlZTA0MTc2NjUwM2ZlNTZmOWQ2YzIyOTk3NTdjNi4uYmM2MzY5YTBj
MzlkOWJiNjQwOTVmNWQ4NzA0NGQ2MDc1M2NkNDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50LmNwcApAQCAtMTM2LDI4ICsxMzYsMjIgQEAgdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQ6OnByb2ZpbGVFbmQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYKIAog
dm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnN0YXJ0Q29uc29sZVByb2ZpbGUoKQog
ewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0KICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KSB7
CiAgICAgICAgIG1fcHJvZmlsZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSBtX2RlYnVn
Z2VyQWdlbnQtPmJyZWFrcG9pbnRzQWN0aXZlKCk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2UpOworICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAobV9z
Y3JpcHRQcm9maWxlckFnZW50KSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgaW5jbHVkZVNhbXBsZXMg
PSB0cnVlOwotICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcoaWdu
b3JlZCwgJmluY2x1ZGVTYW1wbGVzKTsKLSAgICB9CisgICAgaWYgKG1fc2NyaXB0UHJvZmlsZXJB
Z2VudCkKKyAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKHRydWUp
OwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6c3RvcENvbnNvbGVQcm9m
aWxlKCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotCiAgICAgaWYgKG1fc2NyaXB0UHJv
ZmlsZXJBZ2VudCkKLSAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmco
aWdub3JlZCk7CisgICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKCk7
CiAKICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIG1fcHJvZmlsZVJlc3RvcmVCcmVha3BvaW50QWN0
aXZlVmFsdWUpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZl
KG1fcHJvZmlsZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpOwogfQogCiB2b2lkIEpTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGFrZUhlYXBTbmFwc2hvdChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCBkNGRiNTYzZWJkNzY1MzI2NjA0ZjUxMmMzMWU5ZGIyODZkMTA4M2Y0
Li5hNjBmMjVkNDM3ZmJlOWZkZmNlNmJhNThkM2U4MmMyNmRkNTZkNjNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yMzEsOSArMjMxLDggQEAgdm9pZCBK
U0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kSW5pdGlhbGl6ZWQoKQog
ICAgIGlmIChtX3BhdXNlQWZ0ZXJJbml0aWFsaXphdGlvbikgewogICAgICAgICBtX3BhdXNlQWZ0
ZXJJbml0aWFsaXphdGlvbiA9IGZhbHNlOwogCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7
Ci0gICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5lbmFibGUoaWdub3JlZCk7Ci0gICAgICAg
IGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5wYXVzZShpZ25vcmVkKTsKKyAgICAgICAgZW5zdXJlRGVi
dWdnZXJBZ2VudCgpLmVuYWJsZSgpOworICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkucGF1
c2UoKTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50
LmNwcAppbmRleCA1YjlhNzE1NDA4NTA4NjQxY2EwNjFhZWNmOGYwMTE4NDZmNzEwNDQ4Li44Njg2
ZDY5NDFiNzg0Nzk5NWIyZGZmZGQ2NzhiNjZkM2I0ODFkZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3Bw
CkBAIC01NCw0NCArNTQsNDkgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX3BlbmRpbmdFdmFsdWF0
ZVRlc3RDb21tYW5kcy5jbGVhcigpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBk
aXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckFnZW50OjplbmFibGUoKQogewogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKICAgICBp
ZiAobV9wZW5kaW5nSW5zcGVjdERhdGEuZmlyc3QpCi0gICAgICAgIGluc3BlY3QobV9wZW5kaW5n
SW5zcGVjdERhdGEuZmlyc3QuY29weVJlZigpLCBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQu
Y29weVJlZigpKTsKKyAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdC5y
ZWxlYXNlTm9uTnVsbCgpLCBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQucmVsZWFzZU5vbk51
bGwoKSk7CiAKICAgICBmb3IgKGF1dG8mIHRlc3RDb21tYW5kIDogbV9wZW5kaW5nRXZhbHVhdGVU
ZXN0Q29tbWFuZHMpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKHRlc3RDb21tYW5kKTsKIAogICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENv
bW1hbmRzLmNsZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmluaXRpYWxpemVkKEVy
cm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFnZW50
Ojppbml0aWFsaXplZCgpCiB7CiAgICAgbV9lbnZpcm9ubWVudC5mcm9udGVuZEluaXRpYWxpemVk
KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0
KFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmIG9iamVjdFRvSW5zcGVj
dCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaW50cykKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Omlu
c3BlY3QoUmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0LCBSZWY8
SlNPTjo6T2JqZWN0PiYmIGhpbnRzKQogewogICAgIGlmIChtX2VuYWJsZWQpIHsKLSAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmluc3BlY3Qob2JqZWN0VG9JbnNwZWN0LCBoaW50cyk7Cisg
ICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KFdURk1vdmUob2JqZWN0KSwgV1RG
TW92ZShoaW50cykpOwogICAgICAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCA9IG51bGxw
dHI7CiAgICAgICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZCA9IG51bGxwdHI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCA9IG9i
amVjdFRvSW5zcGVjdDsKLSAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQgPSBoaW50czsK
KyAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCA9IFdURk1vdmUob2JqZWN0KTsKKyAgICBt
X3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQgPSBXVEZNb3ZlKGhpbnRzKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JBZ2VudDo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjb25zdCBTdHJpbmcmIHNj
cmlwdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDg1OGM2OWFjMmViODZkYzE4MjhhMmYzZTEyNjcxNTgw
OWU4OWYzNWEuLjU5NGNlZTcxNzQwNjA1OTljODk5MzZkMGMyNzM2YTE1M2FhMjczZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFn
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuaApAQCAtNDAsMjYgKzQwLDI0IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xh
c3MgQmFja2VuZERpc3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JFbnZpcm9ubWVudDsKIAotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3Bl
Y3RvckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIEluc3BlY3RvckFnZW50KEFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBZ2VudCgp
IGZpbmFsOworICAgIH5JbnNwZWN0b3JBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIq
LCBCYWNrZW5kRGlzcGF0Y2hlciopIGZpbmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYp
IGZpbmFsOwotICAgIHZvaWQgaW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gaW5pdGlhbGl6ZWQoKTsKIAogICAgIC8vIENvbW1hbmRMaW5lQVBJCi0gICAgdm9pZCBp
bnNwZWN0KFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmIG9iamVjdFRv
SW5zcGVjdCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaW50cyk7CisgICAgdm9pZCBpbnNwZWN0
KFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIGhpbnRzKTsKIAogICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjb25zdCBT
dHJpbmcmIHNjcmlwdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAKaW5kZXggMDBiMWVj
YzFhZjQ4MDcwZWZlZGM3NjZhM2JhNmZmNWI2ZjRiYTcwMC4uMmY5ZjhmMDU5Y2IxMzkxM2FmYTMw
ZjY0OTc3ZTAzM2I1MzRjOTQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAKQEAgLTU3
LDQxICs1Nyw0MSBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXVk
aXRBZ2VudDo6c2V0dXAoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckF1
ZGl0QWdlbnQ6OnNldHVwKE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250
ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIGlmIChoYXNBY3RpdmVBdWRpdCgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgY2FsbCB0ZWFyZG93biBiZWZvcmUgY2Fs
bGluZyBzZXR1cCBhZ2FpbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29u
dGV4dElkKTsKKyAgICBpZiAoaGFzQWN0aXZlQXVkaXQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJNdXN0IGNhbGwgdGVhcmRvd24gYmVmb3JlIGNhbGxpbmcgc2V0dXAgYWdhaW4i
X3MpOworCisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlw
dEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQuZ2xvYmFsT2JqZWN0KCk7Ci0g
ICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBl
eGVjdXRpb24gc3RhdGUgb2YgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBleGVjdXRpb25Db250
ZXh0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFnbG9iYWxPYmplY3Qp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBleGVjdXRpb24gc3RhdGUg
b2YgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBleGVjdXRpb25Db250ZXh0SWQiX3MpOwogCiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhnbG9iYWxPYmplY3QpOwogCiAgICAgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFs
dWUuc2V0KHZtLCBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpKTsKLSAgICBpZiAo
IW1faW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIlVuYWJsZSB0byBjb25zdHJ1Y3QgaW5qZWN0ZWQgV2ViSW5zcGVjdG9yQXVkaXQgb2JqZWN0
LiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1faW5qZWN0ZWRXZWJJbnNw
ZWN0b3JBdWRpdFZhbHVlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBjb25zdHJ1Y3QgaW5qZWN0ZWQgV2ViSW5zcGVjdG9yQXVkaXQgb2JqZWN0LiJfcyk7CiAKICAg
ICBwb3B1bGF0ZUF1ZGl0T2JqZWN0KGdsb2JhbE9iamVjdCwgbV9pbmplY3RlZFdlYkluc3BlY3Rv
ckF1ZGl0VmFsdWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBdWRp
dEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRlc3Qs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8+PiBJbnNwZWN0b3JBdWRp
dEFnZW50OjpydW4oY29uc3QgU3RyaW5nJiB0ZXN0LCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0
cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpKTsK
ICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBTdHJpbmdC
dWlsZGVyIGZ1bmN0aW9uU3RyaW5nOwogICAgIGZ1bmN0aW9uU3RyaW5nLmFwcGVuZExpdGVyYWwo
IihmdW5jdGlvbihXZWJJbnNwZWN0b3JBdWRpdCkgeyBcInVzZSBzdHJpY3RcIjsgcmV0dXJuIGV2
YWwoYCgiKTsKQEAgLTEwMyw2ICsxMDMsOCBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29ucwogICAg
IGlmIChtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkKICAgICAgICAgb3B0aW9ucy5h
cmdzID0geyBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZS5nZXQoKSB9OwogCisgICAg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRp
b25hbDxib29sPiB3YXNUaHJvd247CiAgICAgT3B0aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4
OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtw
b2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7
CkBAIC0xMTMsMTYgKzExNSwyMSBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1bihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29ucwogICAgIGluamVj
dGVkU2NyaXB0LmV4ZWN1dGUoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uU3RyaW5nLnRvU3RyaW5nKCks
IFdURk1vdmUob3B0aW9ucyksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsK
IAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQu
cmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJvd24pIH0gfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50Ojp0ZWFyZG93bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBdWRpdEFnZW50Ojp0ZWFyZG93bigp
CiB7Ci0gICAgaWYgKCFoYXNBY3RpdmVBdWRpdCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik11c3QgY2FsbCBzZXR1cCBiZWZvcmUgY2FsbGluZyB0ZWFyZG93biJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIWhhc0FjdGl2ZUF1ZGl0KCkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTXVzdCBjYWxsIHNldHVwIGJlZm9yZSBjYWxsaW5nIHRlYXJkb3duIl9z
KTsKIAogICAgIG1faW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlLmNsZWFyKCk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckF1ZGl0QWdlbnQ6Omhhc0FjdGl2ZUF1
ZGl0KCkgY29uc3QKQEAgLTEzOSw3ICsxNDYsNyBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6
OnBvcHVsYXRlQXVkaXRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAog
ICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwogCi0gICAgYXVkaXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiVmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXVkaXQ6OlZFUlNJT04pKTsKKyAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJWZXJzaW9uIiksIEpTQzo6SlNW
YWx1ZShQcm90b2NvbDo6QXVkaXQ6OlZFUlNJT04pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBdWRpdEFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKaW5kZXggNWI2ZDhhYWI3MjI2M2YxOGFhNjQx
MDc4NWMwMWM5YmE4YzRkMzBmOC4uYmY1MDZjMzZkMmRmZjNmNmZjYTU5OWY2N2U1ODU0YTI2OGE3
YjFkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNj
cmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgSW5zcGVjdG9yQXVkaXRBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYyBBdWRpdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yQXVkaXRBZ2VudCk7CkBAIC01Myw5ICs1Miw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFz
b24pIGZpbmFsOwogCiAgICAgLy8gQXVkaXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIHNldHVwKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZp
bmFsOwotICAgIHZvaWQgcnVuKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIGZpbmFsOwotICAg
IHZvaWQgdGVhcmRvd24oRXJyb3JTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXR1cChPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1
cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4g
Lyogd2FzVGhyb3duICovPj4gcnVuKGNvbnN0IFN0cmluZyYgdGVzdCwgT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gdGVhcmRvd24oKSBmaW5hbDsKIAogICAgIGJvb2wgaGFzQWN0
aXZlQXVkaXQoKSBjb25zdDsKIApAQCAtNjQsNyArNjMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJ
bmplY3RlZFNjcmlwdE1hbmFnZXImIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIHsgcmV0dXJuIG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOyB9CiAKLSAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29u
dGV4dElkKSA9IDA7CisgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZv
ckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRl
QXVkaXRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+JiBhdWRpdE9iamVjdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4
IDEwNWZlNmZjNmMyMjA4ZWY3NjM3MWVhZWRkYmZhNDczMWZiZmI2NTQuLjEzYjYyMzRkMWY1MzI4
NTBlMzAwNTI3OTczYzIxNWI3MmUzNmFlMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50
LmNwcApAQCAtNTMsOCArNTMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZAogCiB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29u
bmVjdFJlYXNvbikKIHsKLSAgICBTdHJpbmcgZXJyb3JTdHJpbmc7Ci0gICAgZGlzYWJsZShlcnJv
clN0cmluZyk7CisgICAgZGlzYWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6ZGlzY2FyZFZhbHVlcygpCkBAIC02MywxMCArNjIsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmRpc2NhcmRWYWx1ZXMoKQogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291
bnQgPSAwOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZW5hYmxlKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCkBAIC04MCwxNyArNzks
MjEgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lc3NhZ2VzLnNpemUoKTsgKytpKQogICAgICAg
ICBtZXNzYWdlc1tpXS0+YWRkVG9Gcm9udGVuZCgqbV9mcm9udGVuZERpc3BhdGNoZXIsIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLCBmYWxzZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoKQogewog
ICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNz
YWdlcygpCiB7CiAgICAgbV9jb25zb2xlTWVzc2FnZXMuY2xlYXIoKTsKICAgICBtX2V4cGlyZWRD
b25zb2xlTWVzc2FnZUNvdW50ID0gMDsKQEAgLTk5LDYgKzEwMiw4IEBAIHZvaWQgSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikKIAogICAgIGlmIChtX2Vu
YWJsZWQpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZXNzYWdlc0NsZWFyZWQoKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkZXZl
bG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QKQEAgLTEwOCw4ICsxMTMsNyBAQCBib29sIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0CiAKIHZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50OjpyZXNldCgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKLSAgICBjbGVhck1lc3NhZ2VzKGlnbm9yZWQpOworICAgIGNsZWFyTWVzc2FnZXMoKTsKIAog
ICAgIG1fdGltZXMuY2xlYXIoKTsKICAgICBtX2NvdW50cy5jbGVhcigpOwpAQCAtMTE3LDEwICsx
MjEsOCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQogCiB2b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZShzdGQ6OnVuaXF1ZV9wdHI8Q29u
c29sZU1lc3NhZ2U+IG1lc3NhZ2UpCiB7Ci0gICAgaWYgKG1lc3NhZ2UtPnR5cGUoKSA9PSBNZXNz
YWdlVHlwZTo6Q2xlYXIpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAg
Y2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsKLSAgICB9CisgICAgaWYgKG1lc3NhZ2UtPnR5cGUoKSA9
PSBNZXNzYWdlVHlwZTo6Q2xlYXIpCisgICAgICAgIGNsZWFyTWVzc2FnZXMoKTsKIAogICAgIGFk
ZENvbnNvbGVNZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpOwogfQpAQCAtMTkxLDEyICsxOTMsMTIg
QEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnRha2VIZWFwU25hcHNob3QoY29uc3QgU3Ry
aW5nJiB0aXRsZSkKICAgICBpZiAoIW1faGVhcEFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRvdWJsZSB0aW1lc3RhbXA7Ci0gICAgU3RyaW5n
IHNuYXBzaG90RGF0YTsKLSAgICBtX2hlYXBBZ2VudC0+c25hcHNob3QoaWdub3JlZCwgJnRpbWVz
dGFtcCwgJnNuYXBzaG90RGF0YSk7CisgICAgYXV0byByZXN1bHQgPSBtX2hlYXBBZ2VudC0+c25h
cHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmhlYXBTbmFwc2hvdCh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSwgdGl0
bGUuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZ0aXRsZSk7CisgICAgYXV0byBbdGltZXN0YW1wLCBz
bmFwc2hvdERhdGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmhlYXBTbmFwc2hvdCh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSwgdGl0bGUpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnQoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGxhYmVsKQpAQCAtMjU2LDE1ICsyNTgsMTUg
QEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZENvbnNvbGVNZXNzYWdlKHN0ZDo6dW5p
cXVlX3B0cjxDb25zb2xlTWVzc2FnZT4gY28KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+JiBjaGFubmVscykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPj4+IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKCkKIHsKICAg
ICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGhhcyBubyBsb2dnaW5nIGNoYW5uZWxzLgotICAg
IGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNy
ZWF0ZSgpOworICAgIHJldHVybiBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPjo6Y3JlYXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzZXRMb2dn
aW5nQ2hhbm5lbExldmVsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZSwgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbCkKIHsKLSAgICBlcnJv
clN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Tm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDb25zb2xlQWdlbnQuaAppbmRleCA3OGNhZjFhZDA4YWU1N2IxZTA3ODVjOWFkZDUxNjc1
MzZhZmJmMjk2Li5lZDhlMWY2OTlhNWQwYzkxY2QwNTY2OTFhN2RiMjE5ODBmMjM1ZDIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaApAQCAtNDYsNyArNDYsNiBAQCBjbGFzcyBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJbnNwZWN0b3JIZWFwQWdlbnQ7CiBjbGFzcyBTY3JpcHRB
cmd1bWVudHM7CiBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQ29uc29sZUFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIENvbnNvbGVCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckNvbnNvbGVBZ2Vu
dCk7CkBAIC02MSwxMSArNjAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY2FyZFZhbHVlcygp
IGZpbmFsOwogCiAgICAgLy8gQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZv
aWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBj
aGFubmVsLCBjb25zdCBTdHJpbmcmIGxldmVsKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gY2xlYXJNZXNzYWdlcygpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4+IGdldExv
Z2dpbmdDaGFubmVscygpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBzZXRIZWFwQWdlbnQoSW5zcGVjdG9ySGVhcEFnZW50KiBhZ2VudCkgeyBtX2hlYXBBZ2VudCA9
IGFnZW50OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMTNmYzJj
NTNiNWFjNDY1ZTZlM2Q2NmFiZTA1NWMwZWU2ZDRkYzA3MC4uNDFmNGJhNDI3ZWE0Zjc5ZGMxNDQ3
ZmVhNTk2NGFkODA2M2NiZGY3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTY0LDI1ICs2NCwyNSBAQCBzdGF0aWMgYm9vbCBpc1dlYktpdEluamVjdGVkU2NyaXB0KGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQogICAgIHJldHVybiBzb3VyY2VVUkwuc3RhcnRzV2l0aCgi
X19JbmplY3RlZFNjcmlwdF8iKSAmJiBzb3VyY2VVUkwuZW5kc1dpdGgoIi5qcyIpOwogfQogCi1z
dGF0aWMgT3B0aW9uYWw8SlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRB
Y3Rpb25UeXBlRm9yU3RyaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiB0eXBlU3RyaW5nKQorc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpU
eXBlPiBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCiB7Ci0gICAgYXV0byB0eXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9u
OjpUeXBlPih0eXBlU3RyaW5nKTsKKyAgICBhdXRvIHR5cGUgPSBQcm90b2NvbDo6SGVscGVyczo6
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFj
dGlvbjo6VHlwZT4odHlwZVN0cmluZyk7CiAgICAgaWYgKCF0eXBlKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBicmVha3BvaW50IGFjdGlvbiB0eXBlOiAiX3Ms
IHR5cGVTdHJpbmcpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAg
IHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpMb2c6CisgICAgY2FzZSBQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OkxvZzoKICAgICAgICAgcmV0dXJuIEpTQzo6QnJl
YWtwb2ludDo6QWN0aW9uOjpUeXBlOjpMb2c7CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZToKKyAgICBjYXNl
IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6RXZhbHVhdGU6CiAg
ICAgICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6RXZhbHVhdGU7CiAK
LSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9u
OjpUeXBlOjpTb3VuZDoKKyAgICBjYXNlIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFj
dGlvbjo6VHlwZTo6U291bmQ6CiAgICAgICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlv
bjo6VHlwZTo6U291bmQ7CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpQcm9iZToKKyAgICBjYXNlIFByb3RvY29sOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6UHJvYmU6CiAgICAgICAgIHJldHVybiBKU0M6
OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6UHJvYmU7CiAgICAgfQogCkBAIC05MSwzMCArOTEs
MjkgQEAgc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlPiBicmVh
a3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhFcnIKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1zdGF0aWMgVCBwYXJzZUJyZWFrcG9pbnRPcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCwgRnVuY3Rpb248VChjb25zdCBT
dHJpbmcmLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiwgYm9vbCwgc2l6ZV90KT4g
Y2FsbGJhY2spCitzdGF0aWMgVCBwYXJzZUJyZWFrcG9pbnRPcHRpb25zKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucywgRnVu
Y3Rpb248VChjb25zdCBTdHJpbmcmLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiwg
Ym9vbCwgc2l6ZV90KT4gY2FsbGJhY2spCiB7CiAgICAgU3RyaW5nIGNvbmRpdGlvbjsKICAgICBK
U0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3IgYWN0aW9uczsKICAgICBib29sIGF1dG9Db250
aW51ZSA9IGZhbHNlOwogICAgIHNpemVfdCBpZ25vcmVDb3VudCA9IDA7CiAKLSAgICBpZiAob3B0
aW9uc1BheWxvYWQpIHsKLSAgICAgICAgb3B0aW9uc1BheWxvYWQtPmdldFN0cmluZygiY29uZGl0
aW9uIl9zLCBjb25kaXRpb24pOworICAgIGlmIChvcHRpb25zKSB7CisgICAgICAgIGNvbmRpdGlv
biA9IG9wdGlvbnMtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRPcHRp
b25zOjpjb25kaXRpb25LZXkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYWN0aW9u
c1BheWxvYWQ7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2FkLT5nZXRBcnJheSgiYWN0aW9ucyJfcywg
YWN0aW9uc1BheWxvYWQpOworICAgICAgICBhdXRvIGFjdGlvbnNQYXlsb2FkID0gb3B0aW9ucy0+
Z2V0QXJyYXkoUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50T3B0aW9uczo6YWN0aW9uc0tl
eSk7CiAgICAgICAgIGlmIChhdXRvIGNvdW50ID0gYWN0aW9uc1BheWxvYWQgPyBhY3Rpb25zUGF5
bG9hZC0+bGVuZ3RoKCkgOiAwKSB7CiAgICAgICAgICAgICBhY3Rpb25zLnJlc2VydmVDYXBhY2l0
eShjb3VudCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYWN0aW9uT2JqZWN0
OwotICAgICAgICAgICAgICAgIGlmICghYWN0aW9uc1BheWxvYWQtPmdldChpKS0+YXNPYmplY3Qo
YWN0aW9uT2JqZWN0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gYWN0aW9uT2JqZWN0ID0gYWN0
aW9uc1BheWxvYWQtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFj
dGlvbk9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVj
dGVkIG5vbi1vYmplY3QgaXRlbSBpbiBnaXZlbiBhY3Rpb25zIl9zOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFN0
cmluZyBhY3Rpb25UeXBlU3RyaW5nOwotICAgICAgICAgICAgICAgIGlmICghYWN0aW9uT2JqZWN0
LT5nZXRTdHJpbmcoInR5cGUiX3MsIGFjdGlvblR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBhY3Rpb25UeXBlU3RyaW5nID0gYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjp0eXBlS2V5KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWFjdGlvblR5cGVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyB0eXBlIGZvciBpdGVtIGluIGdpdmVuIGFjdGlvbnMiX3M7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtMTI1LDMzICsx
MjQsMzMgQEAgc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3AKIAogICAgICAgICAgICAgICAgIEpTQzo6
QnJlYWtwb2ludDo6QWN0aW9uIGFjdGlvbigqYWN0aW9uVHlwZSk7CiAKLSAgICAgICAgICAgICAg
ICBhY3Rpb25PYmplY3QtPmdldFN0cmluZygiZGF0YSJfcywgYWN0aW9uLmRhdGEpOworICAgICAg
ICAgICAgICAgIGFjdGlvbi5kYXRhID0gYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6
OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpkYXRhS2V5KTsKIAogICAgICAgICAgICAgICAg
IC8vIFNwZWNpZnlpbmcgYW4gaWRlbnRpZmllciBpcyBvcHRpb25hbC4gVGhleSBhcmUgdXNlZCB0
byBjb3JyZWxhdGUgcHJvYmUgc2FtcGxlcwogICAgICAgICAgICAgICAgIC8vIGluIHRoZSBmcm9u
dGVuZCBhY3Jvc3MgbXVsdGlwbGUgYmFja2VuZCBwcm9iZSBhY3Rpb25zIGFuZCBzZWdyZWdhdGUg
b2JqZWN0IGdyb3Vwcy4KLSAgICAgICAgICAgICAgICBhY3Rpb25PYmplY3QtPmdldEludGVnZXIo
ImlkIl9zLCBhY3Rpb24uaWQpOworICAgICAgICAgICAgICAgIGFjdGlvbi5pZCA9IGFjdGlvbk9i
amVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246Omlk
S2V5KS52YWx1ZU9yKEpTQzo6bm9CcmVha3BvaW50QWN0aW9uSUQpOwogCiAgICAgICAgICAgICAg
ICAgYWN0aW9ucy5hcHBlbmQoV1RGTW92ZShhY3Rpb24pKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIG9wdGlvbnNQYXlsb2FkLT5nZXRCb29sZWFuKCJhdXRvQ29udGludWUi
X3MsIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2FkLT5nZXRJbnRlZ2VyKCJp
Z25vcmVDb3VudCJfcywgaWdub3JlQ291bnQpOworICAgICAgICBhdXRvQ29udGludWUgPSBvcHRp
b25zLT5nZXRCb29sZWFuKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmF1
dG9Db250aW51ZUtleSkudmFsdWVPcihmYWxzZSk7CisgICAgICAgIGlnbm9yZUNvdW50ID0gb3B0
aW9ucy0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRPcHRpb25zOjpp
Z25vcmVDb3VudEtleSkudmFsdWVPcigwKTsKICAgICB9CiAKICAgICByZXR1cm4gY2FsbGJhY2so
Y29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGlnbm9yZUNvdW50KTsK
IH0KIAotT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50
PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2Fk
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnNQYXlsb2FkKQorT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9j
b2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6
OmZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6U291
cmNlSUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIHJldHVybiBwYXJzZUJy
ZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5n
LCBvcHRpb25zUGF5bG9hZCwgWyZdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpCcmVh
a3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNpemVf
dCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CisgICAgcmV0
dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4o
ZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucyksIFsmXSAoY29uc3QgU3RyaW5nJiBjb25kaXRp
b24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0b0Nv
bnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2lu
dD4gewogICAgICAgICByZXR1cm4gUHJvdG9jb2xCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRp
bnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CiAKLU9wdGlvbmFsPEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJv
dG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK09w
dGlvbmFsPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1Jl
Z2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0
aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+PihlcnJvclN0cmluZywgb3B0aW9uc1Bh
eWxvYWQsIFsmXSAoY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0
aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291
bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4geworICAgIHJldHVybiBwYXJzZUJy
ZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5n
LCBXVEZNb3ZlKG9wdGlvbnMpLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJy
ZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6
ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKICAgICAg
ICAgcmV0dXJuIFByb3RvY29sQnJlYWtwb2ludCh1cmwsIGlzUmVnZXgsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlciwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGln
bm9yZUNvdW50KTsKICAgICB9KTsKIH0KQEAgLTIwNyw5ICsyMDYsOSBAQCBib29sIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6bWF0Y2hlc1NjcmlwdFVSTChjb25z
dCBTdHJpbmcmCiAgICAgcmV0dXJuIG1fdXJsID09IHNjcmlwdFVSTDsKIH0KIAotUmVmUHRyPEpT
Qzo6QnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50
RnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnNQYXlsb2FkKQorUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAg
IHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+Pihl
cnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQsIFtdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwg
SlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGlu
dWUsIHNpemVfdCBpZ25vcmVDb3VudCkgeworICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRp
b25zPFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25z
KSwgW10gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNW
ZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSB7
CiAgICAgICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OmNyZWF0ZShKU0M6Om5vQnJlYWtwb2lu
dElELCBjb25kaXRpb24sIFdURk1vdmUoYWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291
bnQpOwogICAgIH0pOwogfQpAQCAtMjM0LDEwICsyMzMsMTAgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBC
YWNrZW4KIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzb24pCiB7CiAgICAgaWYgKGVuYWJsZWQoKSkK
LSAgICAgICAgZGlzYWJsZShyZWFzb24gPT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFy
Z2V0RGVzdHJveWVkKTsKKyAgICAgICAgaW50ZXJuYWxEaXNhYmxlKHJlYXNvbiA9PSBEaXNjb25u
ZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95ZWQpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omlu
dGVybmFsRW5hYmxlKCkKIHsKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCkBAIC0yNTcsNyArMjU2
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3ll
ZCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNC
ZWluZ0Rlc3Ryb3llZCkKIHsKICAgICBmb3IgKGF1dG8qIGxpc3RlbmVyIDogY29weVRvVmVjdG9y
KG1fbGlzdGVuZXJzKSkKICAgICAgICAgbGlzdGVuZXItPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsK
QEAgLTI3NywxOSArMjc2LDIxIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmVuYWJsZSgpCiB7Ci0gICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJEZWJ1Z2dlciBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChlbmFibGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
RGVidWdnZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKLSAgICBlbmFibGUoKTsKKyAg
ICBpbnRlcm5hbEVuYWJsZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGRp
c2FibGUoZmFsc2UpOworICAgIGludGVybmFsRGlzYWJsZShmYWxzZSk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRzQWN0aXZl
KCkgY29uc3QKQEAgLTI5NywyOCArMjk4LDMwIEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6YnJlYWtwb2ludHNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBtX2RlYnVnZ2VyLmJyZWFr
cG9pbnRzQWN0aXZlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QXN5
bmNTdGFja1RyYWNlRGVwdGgoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZGVwdGgpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRB
c3luY1N0YWNrVHJhY2VEZXB0aChpbnQgZGVwdGgpCiB7CiAgICAgaWYgKG1fYXN5bmNTdGFja1Ry
YWNlRGVwdGggPT0gZGVwdGgpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGlmIChkZXB0aCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3Rl
ZCBuZWdhdGl2ZSBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZGVw
dGggPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbmVnYXRp
dmUgZGVwdGgiX3MpOwogCiAgICAgbV9hc3luY1N0YWNrVHJhY2VEZXB0aCA9IGRlcHRoOwogCiAg
ICAgaWYgKCFtX2FzeW5jU3RhY2tUcmFjZURlcHRoKQogICAgICAgICBjbGVhckFzeW5jU3RhY2tU
cmFjZURhdGEoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGJvb2wgYWN0aXZlKQogewogICAgIGlmIChhY3RpdmUpCiAgICAg
ICAgIG1fZGVidWdnZXIuYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIGVsc2UKICAgICAgICAg
bV9kZWJ1Z2dlci5kZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNQYXVzZWQoKSBjb25zdApAQCAtMzQy
LDIwICszNDUsMjAgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp1cGRhdGVQYXVzZVJl
YXNvbkFuZERhdGEoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXIKICAgICBtX3BhdXNlRGF0YSA9
IFdURk1vdmUoZGF0YSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBidWlsZEFz
c2VydFBhdXNlUmVhc29uKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3N0YXRpYyBSZWY8SlNPTjo6
T2JqZWN0PiBidWlsZEFzc2VydFBhdXNlUmVhc29uKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsK
ICAgICBhdXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb246
OmNyZWF0ZSgpLnJlbGVhc2UoKTsKICAgICBpZiAoIW1lc3NhZ2UuaXNOdWxsKCkpCiAgICAgICAg
IHJlYXNvbi0+c2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICByZXR1cm4gcmVhc29uLT5vcGVuQWNj
ZXNzb3JzKCk7CisgICAgcmV0dXJuICpyZWFzb24tPmFzT2JqZWN0KCk7CiB9CiAKLXN0YXRpYyBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBidWlsZENTUFZpb2xhdGlvblBhdXNlUmVhc29uKGNvbnN0IFN0
cmluZyYgZGlyZWN0aXZlVGV4dCkKK3N0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWlsZENTUFZp
b2xhdGlvblBhdXNlUmVhc29uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCkKIHsKICAgICBh
dXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6Q1NQVmlvbGF0aW9uUGF1c2VSZWFzb246
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXREaXJlY3RpdmUoZGlyZWN0aXZlVGV4dCkKICAgICAgICAg
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gcmVhc29uLT5vcGVuQWNjZXNzb3JzKCk7CisgICAgcmV0
dXJuICpyZWFzb24tPmFzT2JqZWN0KCk7CiB9CiAKIFJlZlB0cjxKU09OOjpPYmplY3Q+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29uKEpTQzo6QnJlYWtw
b2ludElEIGRlYnVnZ2VyQnJlYWtwb2ludElEKQpAQCAtMzY4LDcgKzM3MSw3IEBAIFJlZlB0cjxK
U09OOjpPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkQnJlYWtwb2ludFBhdXNl
UmVhc29uKEpTQzo6QnJlCiAgICAgICAgICAgICAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6
RGVidWdnZXI6OkJyZWFrcG9pbnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCkKICAgICAgICAgICAgICAg
ICAgICAgLnNldEJyZWFrcG9pbnRJZChwcm90b2NvbEJyZWFrcG9pbnRJRCkKICAgICAgICAgICAg
ICAgICAgICAgLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uLT5vcGVu
QWNjZXNzb3JzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbi0+YXNPYmplY3QoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM4Niw3ICszODksMTEgQEAgUmVm
UHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRFeGNlcHRpb25Q
YXVzZVJlYXNvbihKU0M6OkpTVmEKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2Jq
ZWN0R3JvdXApLT5vcGVuQWNjZXNzb3JzKCk7CisgICAgYXV0byBleGNlcHRpb25WYWx1ZSA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoZXhjZXB0aW9uLCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpiYWNrdHJhY2VPYmplY3RHcm91cCk7CisgICAgaWYgKCFleGNlcHRpb25WYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZXhjZXB0aW9uVmFsdWUtPmFzT2JqZWN0
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2Vy
dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC00OTIsNyArNDk5LDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWREaXNwYXRjaEFzeW5jQ2FsbCgpCiAgICAgICAgIG1fcGVuZGlu
Z0FzeW5jQ2FsbHMucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCi1zdGF0aWMgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlvbihjb25zdCBKU0M6
OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlYWtw
b2ludCYgZGVidWdnZXJCcmVha3BvaW50KQogewogICAgIEFTU0VSVChkZWJ1Z2dlckJyZWFrcG9p
bnQuaXNSZXNvbHZlZCgpKTsKIApAQCAtNTAxLDUwICs1MDgsNDkgQEAgc3RhdGljIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2VyTG9jYXRpb24oY29uc3Qg
SlNDOjpCcmUKICAgICAgICAgLnNldExpbmVOdW1iZXIoZGVidWdnZXJCcmVha3BvaW50LmxpbmVO
dW1iZXIoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKICAgICBsb2NhdGlvbi0+c2V0Q29sdW1uTnVt
YmVyKGRlYnVnZ2VyQnJlYWtwb2ludC5jb2x1bW5OdW1iZXIoKSk7Ci0KICAgICByZXR1cm4gbG9j
YXRpb247CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNvdXJjZUlEJiBzb3Vy
Y2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5OdW1iZXIpCitzdGF0
aWMgYm9vbCBwYXJzZUxvY2F0aW9uKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIEpTQzo6U291cmNlSUQmIHNvdXJjZUlELCB1
bnNpZ25lZCYgbGluZU51bWJlciwgdW5zaWduZWQmIGNvbHVtbk51bWJlcikKIHsKLSAgICBpZiAo
IWxvY2F0aW9uLmdldEludGVnZXIoImxpbmVOdW1iZXIiX3MsIGxpbmVOdW1iZXIpKSB7CisgICAg
YXV0byBsaW5lTnVtYmVyVmFsdWUgPSBsb2NhdGlvbi5nZXRJbnRlZ2VyKFByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb246OmxpbmVOdW1iZXJLZXkpOworICAgIGlmICghbGluZU51bWJlclZhbHVl
KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgbGluZU51
bWJlciBpbiBnaXZlbiBsb2NhdGlvbiJfczsKICAgICAgICAgc291cmNlSUQgPSBKU0M6Om5vU291
cmNlSUQ7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTdHJpbmcgc2NyaXB0
SURTdHI7Ci0gICAgaWYgKCFsb2NhdGlvbi5nZXRTdHJpbmcoInNjcmlwdElkIl9zLCBzY3JpcHRJ
RFN0cikpIHsKKyAgICBsaW5lTnVtYmVyID0gKmxpbmVOdW1iZXJWYWx1ZTsKKworICAgIGF1dG8g
c2NyaXB0SURTdHIgPSBsb2NhdGlvbi5nZXRTdHJpbmcoUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2Nh
dGlvbjo6c2NyaXB0SWRLZXkpOworICAgIGlmICghc2NyaXB0SURTdHIpIHsKICAgICAgICAgc291
cmNlSUQgPSBKU0M6Om5vU291cmNlSUQ7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhlcGN0
ZWQgbm9uLXN0cmluZyBzY3JpcHRJZCBpbiBnaXZlbiBsb2NhdGlvbiJfczsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHNvdXJjZUlEID0gc2NyaXB0SURTdHIudG9JbnRQdHIo
KTsKLSAgICBjb2x1bW5OdW1iZXIgPSAwOwotICAgIGxvY2F0aW9uLmdldEludGVnZXIoImNvbHVt
bk51bWJlciJfcywgY29sdW1uTnVtYmVyKTsKKyAgICBjb2x1bW5OdW1iZXIgPSBsb2NhdGlvbi5n
ZXRJbnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNvbHVtbk51bWJlcktleSku
dmFsdWVPcigwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkLCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJ
ZCogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdn
ZXI6OkxvY2F0aW9uPj4mIG91dExvY2F0aW9ucykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldEJyZWFrcG9pbnRCeVVybChpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgdXJsUmVnZXgsIE9wdGlvbmFsPGludD4mJiBjb2x1bW5OdW1iZXIsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW9wdGlvbmFsVVJMID09
ICFvcHRpb25hbFVSTFJlZ2V4KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVpdGhlciB1cmwg
b3IgdXJsUmVnZXggbXVzdCBiZSBzcGVjaWZpZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCF1cmwgPT0gIXVybFJlZ2V4KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkVpdGhlciB1cmwgb3IgdXJsUmVnZXggbXVzdCBiZSBzcGVjaWZpZWQiX3MpOwogCi0gICAg
YXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25hbFVSTCA/ICpvcHRpb25hbFVSTCA6ICpvcHRpb25hbFVSTFJl
Z2V4LCAhIW9wdGlvbmFsVVJMUmVnZXgsIGxpbmVOdW1iZXIsIG9wdGlvbmFsQ29sdW1uTnVtYmVy
ID8gKm9wdGlvbmFsQ29sdW1uTnVtYmVyIDogMCwgb3B0aW9uc1BheWxvYWQpOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gcHJvdG9jb2xCcmVha3Bv
aW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgISF1cmwg
PyB1cmwgOiB1cmxSZWdleCwgISF1cmxSZWdleCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLnZh
bHVlT3IoMCksIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghcHJvdG9jb2xCcmVha3BvaW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBpZiAobV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9p
bnRJRC5jb250YWlucyhwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCkpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLiJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9wcm90b2NvbEJyZWFrcG9pbnRG
b3JQcm90b2NvbEJyZWFrcG9pbnRJRC5jb250YWlucyhwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCkp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxv
Y2F0aW9uIGFscmVhZHkgZXhpc3RzLiJfcyk7CiAKICAgICBtX3Byb3RvY29sQnJlYWtwb2ludEZv
clByb3RvY29sQnJlYWtwb2ludElELnNldChwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksICpwcm90
b2NvbEJyZWFrcG9pbnQpOwogCi0gICAgb3V0TG9jYXRpb25zID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPjo6Y3JlYXRlKCk7CisgICAgYXV0byBsb2NhdGlvbnMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUoKTsK
IAogICAgIGZvciAoYXV0byYgW3NvdXJjZUlELCBzY3JpcHRdIDogbV9zY3JpcHRzKSB7CiAgICAg
ICAgIFN0cmluZyBzY3JpcHRVUkxGb3JCcmVha3BvaW50cyA9ICFzY3JpcHQuc291cmNlVVJMLmlz
RW1wdHkoKSA/IHNjcmlwdC5zb3VyY2VVUkwgOiBzY3JpcHQudXJsOwpAQCAtNTYxLDI5ICs1Njcs
MjkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGkKIAogICAgICAgICBkaWRTZXRCcmVha3BvaW50
KCpwcm90b2NvbEJyZWFrcG9pbnQsIGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAKLSAgICAgICAgb3V0
TG9jYXRpb25zLT5hZGRJdGVtKGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dlckJyZWFrcG9p
bnQpKTsKKyAgICAgICAgbG9jYXRpb25zLT5hZGRJdGVtKGJ1aWxkRGVidWdnZXJMb2NhdGlvbihk
ZWJ1Z2dlckJyZWFrcG9pbnQpKTsKICAgICB9CiAKLSAgICAqb3V0QnJlYWtwb2ludElkID0gcHJv
dG9jb2xCcmVha3BvaW50LT5pZCgpOworICAgIHJldHVybiB7IHsgcHJvdG9jb2xCcmVha3BvaW50
LT5pZCgpLCBXVEZNb3ZlKGxvY2F0aW9ucykgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBK
U09OOjpPYmplY3QmIGxvY2F0aW9uLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2Fk
LCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBSZWZQ
dHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIG91dEFjdHVhbExvY2F0aW9uKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFr
cG9pbnRJZCwgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRDsKICAgICB1bnNp
Z25lZCBsaW5lTnVtYmVyOwogICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlcjsKICAgICBpZiAoIXBh
cnNlTG9jYXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9uLCBzb3VyY2VJRCwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0
cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVu
ZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBzY3JpcHRJ
ZCBpbiBnaXZlbiBsb2NhdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
c2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZvciBzY3JpcHRJZCBpbiBnaXZlbiBsb2NhdGlvbiJf
cyk7CiAKLSAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6
ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3Rv
Y29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIHNvdXJjZUlELCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghcHJvdG9jb2xC
cmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBEb24ndCBzYXZlIGBwcm90b2NvbEJyZWFrcG9pbnRg
IGluIGBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEYCBiZWNhdXNl
IGl0CiAgICAgLy8gd2FzIHNldCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBnaXZlbiBgc291cmNlSURg
LCB3aGljaCBpcyB1bmlxdWUsIG1lYW5pbmcgdGhhdCBpdCB3aWxsIG5ldmVyCkBAIC01OTEsMjAg
KzU5NywxNSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOgogCiAgICAgYXV0byBkZWJ1Z2dlckJy
ZWFrcG9pbnQgPSBwcm90b2NvbEJyZWFrcG9pbnQtPmNyZWF0ZURlYnVnZ2VyQnJlYWtwb2ludCht
X25leHREZWJ1Z2dlckJyZWFrcG9pbnRJRCsrLCBzb3VyY2VJRCk7CiAKLSAgICBpZiAoIXJlc29s
dmVCcmVha3BvaW50KHNjcmlwdEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50KSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3BvaW50Il9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVzb2x2ZUJyZWFrcG9pbnQoc2Ny
aXB0SXRlcmF0b3ItPnZhbHVlLCBkZWJ1Z2dlckJyZWFrcG9pbnQpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3MpOwogCi0gICAg
aWYgKCFzZXRCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzZXRCcmVha3BvaW50KGRlYnVnZ2Vy
QnJlYWtwb2ludCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBm
b3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMiX3MpOwogCiAgICAgZGlkU2V0QnJlYWtw
b2ludCgqcHJvdG9jb2xCcmVha3BvaW50LCBkZWJ1Z2dlckJyZWFrcG9pbnQpOwogCi0gICAgb3V0
QWN0dWFsTG9jYXRpb24gPSBidWlsZERlYnVnZ2VyTG9jYXRpb24oZGVidWdnZXJCcmVha3BvaW50
KTsKLSAgICAqb3V0QnJlYWtwb2ludElkID0gcHJvdG9jb2xCcmVha3BvaW50LT5pZCgpOworICAg
IHJldHVybiB7IHsgcHJvdG9jb2xCcmVha3BvaW50LT5pZCgpLCBidWlsZERlYnVnZ2VyTG9jYXRp
b24oZGVidWdnZXJCcmVha3BvaW50KSB9IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkU2V0QnJlYWtwb2ludChQcm90b2NvbEJyZWFrcG9pbnQmIHByb3RvY29sQnJlYWtw
b2ludCwgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCkBAIC02MzAsNyArNjMx
LDcgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEpTQzo6QnJl
YWtwb2ludCYgZGVidWdnZXJCcmVha3BvaW50KQogICAgIHJldHVybiBtX2RlYnVnZ2VyLnNldEJy
ZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgcHJvdG9jb2xCcmVha3BvaW50SUQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1v
dmVCcmVha3BvaW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiBwcm90
b2NvbEJyZWFrcG9pbnRJRCkKIHsKICAgICBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29s
QnJlYWtwb2ludElELnJlbW92ZShwcm90b2NvbEJyZWFrcG9pbnRJRCk7CiAKQEAgLTY0MSwyNCAr
NjQyLDM0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvCiAgICAgICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2tlcihtX2RlYnVnZ2VyLnZtKCkpOwogICAgICAgICBtX2RlYnVnZ2VyLnJlbW92ZUJy
ZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVW50aWxOZXh0UnVuTG9v
cChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVVudGlsTmV4dFJ1bkxvb3AoKQogewot
ICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAotICAgIHJlc3VtZShlcnJvclN0
cmluZyk7CisgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgYXV0byByZXN1bWVSZXN1bHQg
PSByZXN1bWUoKTsKKyAgICBpZiAoIXJlc3VtZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHJlc3VtZVJlc3VsdC5lcnJvcigpKTsKIAogICAgIG1fZW5hYmxlUGF1c2VXaGVu
SWRsZSA9IHRydWU7CiAKICAgICByZWdpc3RlcklkbGVIYW5kbGVyKCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlv
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24p
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
b250aW51ZVRvTG9jYXRpb24oUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlvbikKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNl
ZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVn
Z2VyQnJlYWtwb2ludCkgewogICAgICAgICBtX2RlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQoKm1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50KTsKQEAgLTY2OSwxOSArNjgwLDE4
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwogICAg
IHVuc2lnbmVkIGNvbHVtbk51bWJlcjsKICAgICBpZiAoIXBhcnNlTG9jYXRpb24oZXJyb3JTdHJp
bmcsIGxvY2F0aW9uLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgYXV0byBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKICAg
ICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKSB7CiAgICAgICAgIG1fZGVi
dWdnZXIuY29udGludWVQcm9ncmFtKCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZXN1bWVkKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBzY3Jp
cHRJZCBpbiBnaXZlbiBsb2NhdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZvciBzY3JpcHRJZCBpbiBnaXZlbiBs
b2NhdGlvbiJfcyk7CiAgICAgfQogCiAgICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90
b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBzb3VyY2VJRCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyKTsKICAgICBpZiAoIXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgLy8gRG9uJ3Qgc2F2ZSBgcHJvdG9jb2xCcmVha3BvaW50YCBpbiBgbV9wcm90b2NvbEJy
ZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRGAgYmVjYXVzZSBpdAogICAgIC8vIGlzIGEg
dGVtcG9yYXJ5IGJyZWFrcG9pbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgYXMgc29vbiBhcyBgbG9j
YXRpb25gIGlzIHJlYWNoZWQuCkBAIC02OTEsOCArNzAxLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdAogICAgIGlmICghcmVzb2x2ZUJyZWFrcG9pbnQoc2NyaXB0SXRlcmF0b3ItPnZhbHVlLCBk
ZWJ1Z2dlckJyZWFrcG9pbnQpKSB7CiAgICAgICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFt
KCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXN1bWVkKCk7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3M7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcmVzb2x2ZSBi
cmVha3BvaW50Il9zKTsKICAgICB9CiAKICAgICBpZiAoIXNldEJyZWFrcG9pbnQoZGVidWdnZXJC
cmVha3BvaW50KSkgewpAQCAtNzAxLDcgKzcxMCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QK
ICAgICAgICAgLy8gaGl0IHRoaXMgbmV3IGJyZWFrcG9pbnQgb3Igbm90LgogICAgICAgICBtX2Rl
YnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
cmVzdW1lZCgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQgPSBXVEZNb3ZlKGRl
YnVnZ2VyQnJlYWtwb2ludCk7CkBAIC03MTAsNDEgKzcxOSw0MiBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0CiAgICAgLy8gU28gZG9uJ3QgaXNzdWUgYSByZXN1bWVkIGV2ZW50IHVubGVzcyB3ZSBl
eGl0IHRoZSBWTSB3aXRob3V0IHBhdXNpbmcuCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxl
KCk7CiAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29s
KiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmlj
VHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoY29uc3QgUHJvdG9jb2w6OkRl
YnVnZ2VyOjpTY3JpcHRJZCYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIE9wdGlvbmFs
PGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAg
IEpTQzo6U291cmNlSUQgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGF1
dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKGl0ID09IG1fc2NyaXB0
cy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2
ZW4gc2NyaXB0SWQiOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gaXQgPSBtX3Nj
cmlwdHMuZmluZChzY3JpcHRJZC50b0ludFB0cigpKTsKKyAgICBpZiAoaXQgPT0gbV9zY3JpcHRz
LmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZv
ciBnaXZlbiBzY3JpcHRJZCJfcyk7CiAKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVn
ZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7Ci0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwot
ICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxpbmVz
KGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICBy
ZXR1cm4gQ29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFs
dWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZS52YWx1ZU9yKGZhbHNlKSwgaXNSZWdleC52
YWx1ZU9yKGZhbHNlKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2Ny
aXB0U291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzY3JpcHRJ
RFN0ciwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShjb25zdCBQcm90b2Nv
bDo6RGVidWdnZXI6OlNjcmlwdElkJiBzY3JpcHRJZCkKIHsKLSAgICBKU0M6OlNvdXJjZUlEIHNv
dXJjZUlEID0gc2NyaXB0SURTdHIudG9JbnRQdHIoKTsKLSAgICBhdXRvIGl0ID0gbV9zY3JpcHRz
LmZpbmQoc291cmNlSUQpOwotICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCi0gICAgICAg
ICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291cmNlOwotICAgIGVsc2UKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIjsKKyAgICBhdXRv
IGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQudG9JbnRQdHIoKSk7CisgICAgaWYgKGl0ID09
IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiKTsKKworICAgIHJldHVybiBpdC0+dmFsdWUuc291
cmNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVm
UHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZGV0YWlscykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0
TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGZ1bmN0aW9uSWQpOwotICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGZ1bmN0aW9uSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2
ZW4gZnVuY3Rpb25JZCJfcyk7CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5j
dGlvbkRldGFpbHM+IGRldGFpbHM7CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25EZXRh
aWxzKGVycm9yU3RyaW5nLCBmdW5jdGlvbklkLCBkZXRhaWxzKTsKKyAgICBpZiAoIWRldGFpbHMp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1
cm4gZGV0YWlscy5yZWxlYXNlTm9uTnVsbCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNjaGVkdWxlUGF1c2VBdE5leHRPcHBvcnR1bml0eShEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0Y2hlcjo6UmVhc29uIHJlYXNvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhKQpAQCAt
NzkyLDU3ICs4MDIsNzUgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVz
ZUZvclNwZWNpYWxCcmVha3BvaW50KEpTQzo6QnJlYWtwb2ludCYgYnIKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZShFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpw
YXVzZSgpCiB7CiAgICAgc2NoZWR1bGVQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KERlYnVnZ2VyRnJv
bnRlbmREaXNwYXRjaGVyOjpSZWFzb246OlBhdXNlT25OZXh0U3RhdGVtZW50KTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZSgpCiB7Ci0gICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9i
amVjdCAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTXVzdCBiZSBwYXVzZWQgb3Igd2FpdGluZyB0byBwYXVzZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2JqZWN0ICYmICFtX2phdmFTY3Jp
cHRQYXVzZVNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNdXN0IGJl
IHBhdXNlZCBvciB3YWl0aW5nIHRvIHBhdXNlIl9zKTsKIAogICAgIGNhbmNlbFBhdXNlQXROZXh0
T3Bwb3J0dW5pdHkoKTsKICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgIG1f
Y29uZGl0aW9uVG9EaXNwYXRjaFJlc3VtZWQgPSBTaG91bGREaXNwYXRjaFJlc3VtZWQ6OldoZW5D
b250aW51ZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnN0ZXBOZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBOZXh0KCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBh
dXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgp
OwogICAgIG1fZGVidWdnZXIuc3RlcE5leHRFeHByZXNzaW9uKCk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBPdmVyKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnN0ZXBPdmVyKCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuc3RlcE92ZXJT
dGF0ZW1lbnQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c3RlcEludG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcEludG8oKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0
UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxl
KCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwSW50b1N0YXRlbWVudCgpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAg
ICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwT3V0T2ZG
dW5jdGlvbigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpyZWdpc3RlcklkbGVIYW5kbGVyKCkKQEAgLTg3Nyw4NiArOTA1LDk4IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQmVjb21lSWRsZSgpCiAKICAgICBtX2NvbmRpdGlv
blRvRGlzcGF0Y2hSZXN1bWVkID0gU2hvdWxkRGlzcGF0Y2hSZXN1bWVkOjpObzsKIAotICAgIGlm
IChtX2VuYWJsZVBhdXNlV2hlbklkbGUpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsK
LSAgICAgICAgcGF1c2UoaWdub3JlZCk7Ci0gICAgfQorICAgIGlmIChtX2VuYWJsZVBhdXNlV2hl
bklkbGUpCisgICAgICAgIHBhdXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2V0UGF1c2VPbkRlYnVnZ2VyU3RhdGVtZW50cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNl
T25EZWJ1Z2dlclN0YXRlbWVudHMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgaWYgKCFlbmFibGVkKSB7CiAgICAgICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPbkRlYnVnZ2Vy
U3RhdGVtZW50c0JyZWFrcG9pbnQobnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFr
cG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8g
YnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBX
VEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIG1fZGVi
dWdnZXIuc2V0UGF1c2VPbkRlYnVnZ2VyU3RhdGVtZW50c0JyZWFrcG9pbnQoV1RGTW92ZShicmVh
a3BvaW50KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldFBhdXNlT25FeGNlcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBzdGF0ZVN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9h
ZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldFBhdXNlT25FeGNlcHRpb25zKGNvbnN0IFN0cmluZyYgc3RhdGVTdHJpbmcsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBhbGxFeGNlcHRpb25zQnJl
YWtwb2ludDsKICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiB1bmNhdWdodEV4Y2VwdGlvbnNC
cmVha3BvaW50OwogCiAgICAgaWYgKHN0YXRlU3RyaW5nID09ICJhbGwiKSB7Ci0gICAgICAgIGFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJy
b3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgYWxsRXhjZXB0aW9uc0JyZWFrcG9p
bnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShv
cHRpb25zKSk7CiAgICAgICAgIGlmICghYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogICAgIH0gZWxzZSBpZiAoc3RhdGVTdHJpbmcgPT0gInVuY2F1Z2h0IikgewotICAgICAg
ICB1bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBh
eWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgdW5jYXVnaHRFeGNl
cHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICAgICAgaWYgKCF1bmNhdWdodEV4Y2VwdGlvbnNC
cmVha3BvaW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RhdGVTdHJp
bmcgIT0gIm5vbmUiKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93
biBzdGF0ZTogIl9zLCBzdGF0ZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0gZWxzZSBp
ZiAoc3RhdGVTdHJpbmcgIT0gIm5vbmUiKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
bWFrZVN0cmluZygiVW5rbm93biBzdGF0ZTogIl9zLCBzdGF0ZVN0cmluZykpOwogCiAgICAgbV9k
ZWJ1Z2dlci5zZXRQYXVzZU9uQWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQoV1RGTW92ZShhbGxFeGNl
cHRpb25zQnJlYWtwb2ludCkpOwogICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPblVuY2F1Z2h0RXhj
ZXB0aW9uc0JyZWFrcG9pbnQoV1RGTW92ZSh1bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFBhdXNlT25Bc3NlcnRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVk
LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkFzc2VydGlvbnMo
Ym9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFlbmFibGVkKSB7CiAg
ICAgICAgIG1fcGF1c2VPbkFzc2VydGlvbnNCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2lu
dCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5
bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgbV9wYXVzZU9uQXNzZXJ0aW9uc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFr
cG9pbnQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uTWljcm90YXNrcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wg
ZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25NaWNy
b3Rhc2tzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghZW5hYmxl
ZCkgewogICAgICAgICBtX3BhdXNlT25NaWNyb3Rhc2tzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGJy
ZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0
aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZy
b21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFr
cG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKIAogICAgIG1fcGF1c2VPbk1pY3JvdGFza3NCcmVha3BvaW50ID0gV1RGTW92
ZShicmVha3BvaW50KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0
IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3Qg
Ym9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJlICovLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4g
Lyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRl
T25DYWxsRnJhbWUoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYgY2FsbEZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+
JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYm
IHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25h
bDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgIC8qIGVtdWxhdGVVc2VyR2Vz
dHVyZSAqLykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3Jp
cHRGb3JPYmplY3RJZChjYWxsRnJhbWVJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlw
dCBmb3IgZ2l2ZW4gY2FsbEZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gY2FsbEZyYW1lSWQiX3Mp
OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtw
b2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7
CiAKQEAgLTk2NiwyOCArMTAwNiwzMSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2
YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAg
ICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25D
YWxsRnJhbWUoZXJyb3JTdHJpbmcsIG1fY3VycmVudENhbGxTdGFjay5nZXQoKSwgY2FsbEZyYW1l
SWQsIGV4cHJlc3Npb24sCi0gICAgICAgIG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogZW1w
dHlTdHJpbmcoKSwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJICYmICppbmNsdWRlQ29tbWFuZExpbmVB
UEksIHJldHVybkJ5VmFsdWUgJiYgKnJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldyAmJiAq
Z2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0ICYmICpzYXZlUmVzdWx0LAotICAgICAgICByZXN1
bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJv
d247CisgICAgT3B0aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OworCisgICAgaW5qZWN0ZWRT
Y3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgbV9jdXJyZW50Q2FsbFN0YWNr
LmdldCgpLCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21t
YW5kTGluZUFQSS52YWx1ZU9yKGZhbHNlKSwgcmV0dXJuQnlWYWx1ZS52YWx1ZU9yKGZhbHNlKSwg
Z2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBzYXZlUmVzdWx0LnZhbHVlT3IoZmFsc2Up
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICBpZiAocGF1c2VB
bmRNdXRlKQogICAgICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7
IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShz
YXZlZFJlc3VsdEluZGV4KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0U2hvdWxkQmxhY2tib3hVUkwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChj
b25zdCBTdHJpbmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwgT3B0aW9uYWw8Ym9vbD4mJiBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxJc1JlZ2V4KQog
ewotICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVSTCBt
dXN0IG5vdCBiZSBlbXB0eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAodXJs
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVUkwgbXVzdCBub3Qg
YmUgZW1wdHkiX3MpOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlICYmICpvcHRpb25hbENhc2VTZW5zaXRpdmU7Ci0gICAgYm9vbCBpc1JlZ2V4ID0gb3B0
aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVnZXg7CisgICAgYm9vbCBjYXNlU2Vuc2l0aXZl
ID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLnZhbHVlT3IoZmFsc2UpOworICAgIGJvb2wgaXNSZWdl
eCA9IG9wdGlvbmFsSXNSZWdleC52YWx1ZU9yKGZhbHNlKTsKIAotICAgIGlmICghY2FzZVNlbnNp
dGl2ZSAmJiAhaXNSZWdleCAmJiBpc1dlYktpdEluamVjdGVkU2NyaXB0KHVybCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQmxhY2tib3hpbmcgb2YgaW50ZXJuYWwgc2NyaXB0cyBpcyBjb250
cm9sbGVkIGJ5ICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyciX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFjYXNlU2Vuc2l0aXZlICYmICFpc1JlZ2V4ICYm
IGlzV2ViS2l0SW5qZWN0ZWRTY3JpcHQodXJsKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJCbGFja2JveGluZyBvZiBpbnRlcm5hbCBzY3JpcHRzIGlzIGNvbnRyb2xsZWQgYnkgJ0Rl
YnVnZ2VyLnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRzJyJfcyk7CiAKICAgICBCbGFja2JveENv
bmZpZyBjb25maWcgeyB1cmwsIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXggfTsKICAgICBpZiAoc2hv
dWxkQmxhY2tib3gpCkBAIC0xMDA0LDYgKzEwNDcsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
cwogICAgICAgICAgICAgYmxhY2tib3hUeXBlID0gSlNDOjpEZWJ1Z2dlcjo6QmxhY2tib3hUeXBl
OjpEZWZlcnJlZDsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRCbGFja2JveFR5cGUoc291cmNlSUQs
IGJsYWNrYm94VHlwZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzaG91bGRCbGFja2JveFVSTChjb25zdCBTdHJpbmcmIHVybCkg
Y29uc3QKQEAgLTEwMzksMTAgKzEwODQsMTAgQEAgU3RyaW5nIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQKICAg
ICByZXR1cm4gc2NyaXB0LnNvdXJjZU1hcHBpbmdVUkw7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoRXJyb3JTdHJpbmcmLCBib29s
IHNob3VsZFBhdXNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoYm9vbCBzaG91bGRQYXVzZSkK
IHsKICAgICBpZiAoc2hvdWxkUGF1c2UgPT0gbV9wYXVzZUZvckludGVybmFsU2NyaXB0cykKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9wYXVzZUZvckludGVy
bmFsU2NyaXB0cyA9IHNob3VsZFBhdXNlOwogCkBAIC0xMDUyLDYgKzEwOTcsOCBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRzKEVycm9yU3Ry
aW5nJiwgYm9vbCBzaG91bAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fZGVidWdn
ZXIuc2V0QmxhY2tib3hUeXBlKHNvdXJjZUlELCBibGFja2JveFR5cGUpOwogICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VT
b3VyY2UoSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0
JiBzY3JpcHQpCkBAIC0xMDYxLDEyICsxMTA4LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBKU0M6OkQK
ICAgICBTdHJpbmcgc291cmNlVVJMID0gc2NyaXB0LnNvdXJjZVVSTDsKICAgICBTdHJpbmcgc291
cmNlTWFwcGluZ1VSTCA9IHNvdXJjZU1hcFVSTEZvclNjcmlwdChzY3JpcHQpOwogCi0gICAgY29u
c3QgYm9vbCBpc01vZHVsZSA9IHNjcmlwdC5zb3VyY2VQcm92aWRlci0+c291cmNlVHlwZSgpID09
IEpTQzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGU7Ci0gICAgY29uc3QgYm9vbCog
aXNDb250ZW50U2NyaXB0ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdCA/ICZzY3JpcHQuaXNDb250
ZW50U2NyaXB0IDogbnVsbHB0cjsKLSAgICBTdHJpbmcqIHNvdXJjZVVSTFBhcmFtID0gaGFzU291
cmNlVVJMID8gJnNvdXJjZVVSTCA6IG51bGxwdHI7Ci0gICAgU3RyaW5nKiBzb3VyY2VNYXBVUkxQ
YXJhbSA9IHNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZzb3VyY2VNYXBw
aW5nVVJMOwotCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNjcmlwdFBhcnNlZChzY3JpcHRJ
RFN0ciwgc2NyaXB0LnVybCwgc2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBz
Y3JpcHQuZW5kTGluZSwgc2NyaXB0LmVuZENvbHVtbiwgaXNDb250ZW50U2NyaXB0LCBzb3VyY2VV
UkxQYXJhbSwgc291cmNlTWFwVVJMUGFyYW0sIGlzTW9kdWxlID8gJmlzTW9kdWxlIDogbnVsbHB0
cik7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNjcmlwdFBhcnNlZChzY3JpcHRJRFN0ciwg
c2NyaXB0LnVybCwgc2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBzY3JpcHQu
ZW5kTGluZSwgc2NyaXB0LmVuZENvbHVtbiwgc2NyaXB0LmlzQ29udGVudFNjcmlwdCwgc291cmNl
VVJMLCBzb3VyY2VNYXBwaW5nVVJMLCBzY3JpcHQuc291cmNlUHJvdmlkZXItPnNvdXJjZVR5cGUo
KSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsKIAogICAgIG1fc2Ny
aXB0cy5zZXQoc291cmNlSUQsIHNjcmlwdCk7CiAKQEAgLTExODAsMTIgKzEyMjIsMTMgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6RGUKICAgICAgICAgaWYgKGF1dG8gZGVidWdnZXJCcmVha3BvaW50
SWQgPSBtX2RlYnVnZ2VyLnBhdXNpbmdCcmVha3BvaW50SUQoKSkgewogICAgICAgICAgICAgQVNT
RVJUKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCB8fCBkZWJ1Z2dlckJy
ZWFrcG9pbnRJZCAhPSBtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludC0+aWQo
KSk7CiAgICAgICAgICAgICBkYXRhID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIGRhdGEtPnNldFN0cmluZygib3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpJbnNwZWN0
b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uOjpCcmVha3BvaW50KSk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgib3Jp
Z2luYWxEYXRhIl9zLCBidWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihkZWJ1Z2dlckJyZWFrcG9p
bnRJZCkpOworICAgICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywg
UHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKERlYnVnZ2VyRnJvbnRlbmRE
aXNwYXRjaGVyOjpSZWFzb246OkJyZWFrcG9pbnQpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHBh
dXNlUmVhc29uID0gYnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oZGVidWdnZXJCcmVha3BvaW50
SWQpKQorICAgICAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIHBh
dXNlUmVhc29uLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG1fcHJlQmxh
Y2tib3hQYXVzZURhdGEpIHsKICAgICAgICAgICAgIGRhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJv
dG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG1fcHJlQmxhY2ti
b3hQYXVzZVJlYXNvbikpOwotICAgICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0
YSJfcywgbV9wcmVCbGFja2JveFBhdXNlRGF0YSk7CisgICAgICAgICAgICBkYXRhLT5zZXRTdHJp
bmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUobV9wcmVCbGFja2JveFBhdXNlUmVhc29uKSk7CisgICAgICAgICAgICBkYXRhLT5zZXRW
YWx1ZSgib3JpZ2luYWxEYXRhIl9zLCBtX3ByZUJsYWNrYm94UGF1c2VEYXRhLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIHVwZGF0ZVBhdXNlUmVhc29uQW5kRGF0YShEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpCbGFja2JveGVkU2NyaXB0LCBXVEZNb3Zl
KGRhdGEpKTsKICAgICB9CkBAIC0xMjA2LDcgKzEyNDksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpEZQogICAgICAgICAgICAgYXN5bmNTdGFja1RyYWNlID0gaXQtPnZhbHVlLT5idWlsZEluc3Bl
Y3Rvck9iamVjdCgpOwogICAgIH0KIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wYXVzZWQo
Y3VycmVudENhbGxGcmFtZXMoaW5qZWN0ZWRTY3JpcHQpLCBtX3BhdXNlUmVhc29uLCBtX3BhdXNl
RGF0YSwgYXN5bmNTdGFja1RyYWNlKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cGF1c2Vk
KGN1cnJlbnRDYWxsRnJhbWVzKGluamVjdGVkU2NyaXB0KSwgUHJvdG9jb2w6OkhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG1fcGF1c2VSZWFzb24pLCBtX3BhdXNlRGF0YS5jb3B5UmVmKCks
IFdURk1vdmUoYXN5bmNTdGFja1RyYWNlKSk7CiAKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVk
dWxlZCA9IGZhbHNlOwogCkBAIC0xMjMxLDEyICsxMjc0LDE1IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
cGF5bG9hZCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoc2FtcGxlLCBvYmplY3RHcm91cEZv
ckJyZWFrcG9pbnRBY3Rpb24oYWN0aW9uSUQpLCB0cnVlKTsKKyAgICBpZiAoIXBheWxvYWQpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpQ
cm9iZVNhbXBsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFByb2JlSWQoYWN0aW9uSUQpCiAgICAg
ICAgIC5zZXRCYXRjaElkKGJhdGNoSWQpCiAgICAgICAgIC5zZXRTYW1wbGVJZChzYW1wbGVJZCkK
ICAgICAgICAgLnNldFRpbWVzdGFtcChtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbnNwZWN0b3JF
bnZpcm9ubWVudCgpLmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
KQotICAgICAgICAuc2V0UGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKQorICAgICAgICAuc2V0UGF5
bG9hZChwYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNhbXBsZVByb2JlKFdURk1vdmUocmVzdWx0KSk7CiB9
CkBAIC0xMjY3LDkgKzEzMTMsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFr
UHJvZ3JhbShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIHJlYQogCiB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFySW5zcGVjdG9yQnJlYWtwb2ludFN0YXRlKCkKIHsK
LSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIGZvciAoYXV0byYgcHJvdG9jb2xCcmVha3Bv
aW50SUQgOiBjb3B5VG9WZWN0b3IobV9kZWJ1Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVh
a3BvaW50SUQua2V5cygpKSkKLSAgICAgICAgcmVtb3ZlQnJlYWtwb2ludChpZ25vcmVkLCBwcm90
b2NvbEJyZWFrcG9pbnRJRCk7CisgICAgICAgIHJlbW92ZUJyZWFrcG9pbnQocHJvdG9jb2xCcmVh
a3BvaW50SUQpOwogCiAgICAgbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9p
bnRJRC5jbGVhcigpOwogCkBAIC0xMzE3LDcgKzEzNjIsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZENsZWFyR2xvYmFsT2JqZWN0KCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogfQogCi1ib29sIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitib29sIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmFzc2VydFBhdXNlZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQogewogICAgIGlmICghbV9wYXVzZWRHbG9iYWxPYmplY3QpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTXVzdCBiZSBwYXVzZWQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKaW5kZXggMzBmZjlmM2MyNmQxYWUwNDY2YTcxYTViZjYzNjYxODI5NTRmYTJkOC4uNGZjM2Y4
NGE2ZTIxMmI4ODViNmEyZjMyOGY4MWVkZjc1ZjkwYTQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaApAQCAtNDgsNyArNDgsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNz
IEFzeW5jU3RhY2tUcmFjZTsKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBK
U0M6OkRlYnVnZ2VyOjpPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVj
dG9yRGVidWdnZXJBZ2VudCk7CkBAIC01Niw3ICs1NSw3IEBAIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBw
dWJsCiBwdWJsaWM6CiAgICAgfkluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKIAot
ICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9t
UGF5bG9hZChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQp
OworICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGJhY2t0cmFjZU9iamVj
dEdyb3VwOwogCkBAIC02NiwzMSArNjUsMzEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBl
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CiAKICAgICAvLyBEZWJ1Z2dlckJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmlu
YWw7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZXRB
c3luY1N0YWNrVHJhY2VEZXB0aChFcnJvclN0cmluZyYsIGludCBkZXB0aCkgZmluYWw7Ci0gICAg
dm9pZCBzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyYsIGJvb2wgYWN0aXZlKSBmaW5h
bDsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJM
UmVnZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0aW9ucywgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4mIGxvY2F0aW9ucykgZmlu
YWw7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBsb2NhdGlvbiwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zLCBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4mIG91dEFjdHVhbExvY2F0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVu
dGlmaWVyKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlVW50aWxOZXh0UnVuTG9vcChFcnJvclN0
cmluZyYpIGZpbmFsOwotICAgIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbikgZmluYWw7Ci0gICAgdm9pZCBzdGVwTmV4dChF
cnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc3RlcE92ZXIoRXJyb3JTdHJpbmcmKSBmaW5h
bDsKLSAgICB2b2lkIHN0ZXBJbnRvKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVw
T3V0KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBwYXVzZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgcmVzdW1lKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZWFy
Y2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIGZpbmFsOwotICAgIHZvaWQgZ2V0U2NyaXB0U291cmNl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgU3RyaW5nKiBzY3JpcHRTb3Vy
Y2UpIGZpbmFsOwotICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlv
bkRldGFpbHM+JikgZmluYWw7Ci0gICAgdm9pZCBzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRz
KEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMp
IGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHBhdXNlU3RhdGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNl
T25NaWNyb3Rhc2tzKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMo
RXJyb3JTdHJpbmcmLCBib29sIHNob3VsZFBhdXNlKSBmaW5hbDsKLSAgICB2b2lkIGV2YWx1YXRl
T25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJv
b2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hvdWxkQmxhY2tib3hVUkwoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCkgZmluYWw7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IHNldEFzeW5jU3RhY2tUcmFjZURlcHRoKGludCkgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QnJlYWtwb2ludHNBY3RpdmUoYm9vbCkg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6
RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4+Pj4gc2V0QnJlYWtwb2ludEJ5VXJsKGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB1cmxSZWdleCwgT3B0aW9uYWw8aW50PiYmIGNv
bHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJl
YWtwb2ludElkLCBSZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+PiBzZXRCcmVha3Bv
aW50KFJlZjxKU09OOjpPYmplY3Q+JiYgbG9jYXRpb24sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3Zl
QnJlYWtwb2ludChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNvbnRpbnVlVW50aWxOZXh0UnVu
TG9vcCgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNvbnRpbnVl
VG9Mb2NhdGlvbihSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uKSBmaW5hbDsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwTmV4dCgpIGZpbmFsOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBPdmVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc3RlcEludG8oKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzdGVwT3V0KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gcGF1c2UoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZXN1bWUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+PiBzZWFyY2hJbkNv
bnRlbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpTY3JpcHRJZCYsIGNvbnN0IFN0cmluZyYg
cXVlcnksIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBp
c1JlZ2V4KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFNj
cmlwdFNvdXJjZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OlNjcmlwdElkJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPj4gZ2V0RnVuY3Rpb25EZXRhaWxzKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCkg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPbkRlYnVn
Z2VyU3RhdGVtZW50cyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9u
cykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPbkV4
Y2VwdGlvbnMoY29uc3QgU3RyaW5nJiBzdGF0ZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRp
b25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9u
QXNzZXJ0aW9ucyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPbk1pY3Jv
dGFza3MoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlRm9ySW50ZXJuYWxT
Y3JpcHRzKGJvb2wgc2hvdWxkUGF1c2UpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRp
b25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJ
bmRleCAqLz4+IGV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpD
YWxsRnJhbWVJZCYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFs
PGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxi
b29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBP
cHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJH
ZXN0dXJlKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRT
aG91bGRCbGFja2JveFVSTChjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwg
T3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgp
IGZpbmFsOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKICAgICB2b2lkIGRpZFBh
cnNlU291cmNlKEpTQzo6U291cmNlSUQsIGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYpIGZp
bmFsOwpAQCAtMTQyLDExICsxNDEsMTEgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudChBZ2VudENvbnRleHQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5h
YmxlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxFbmFibGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50
ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCk7CiAKICAgICBJbmplY3RlZFNjcmlw
dE1hbmFnZXImIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOyB9Ci0gICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkg
PSAwOworICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFBy
b3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRp
b25Db250ZXh0SWQ+JiYpID0gMDsKIAogICAgIEpTQzo6RGVidWdnZXImIGRlYnVnZ2VyKCkgeyBy
ZXR1cm4gbV9kZWJ1Z2dlcjsgfQogCkBAIC0xNjYsOCArMTY1LDggQEAgcHJpdmF0ZToKICAgICBj
bGFzcyBQcm90b2NvbEJyZWFrcG9pbnQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9p
bnQ+IGZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiwgSlNDOjpTb3VyY2VJRCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlv
bnNQYXlsb2FkID0gbnVsbHB0cik7Ci0gICAgICAgIHN0YXRpYyBPcHRpb25hbDxQcm90b2NvbEJy
ZWFrcG9pbnQ+IGZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkID0gbnVsbHB0cik7CisgICAgICAgIHN0
YXRpYyBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IGZyb21QYXlsb2FkKFByb3RvY29sOjpF
cnJvclN0cmluZyYsIEpTQzo6U291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVk
IGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zID0gbnVsbHB0cik7
CisgICAgICAgIHN0YXRpYyBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IGZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgs
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRpb25zID0gbnVsbHB0cik7CiAKICAgICAgICAgUHJvdG9jb2xCcmVha3Bv
aW50KCk7CiAgICAgICAgIFByb3RvY29sQnJlYWtwb2ludChKU0M6OlNvdXJjZUlELCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0
aW9uID0gbnVsbFN0cmluZygpLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rp
b25zID0geyB9LCBib29sIGF1dG9Db250aW51ZSA9IGZhbHNlLCBzaXplX3QgaWdub3JlQ291bnQg
PSAwKTsKQEAgLTE3NSwxMiArMTc0LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgUmVmPEpTQzo6
QnJlYWtwb2ludD4gY3JlYXRlRGVidWdnZXJCcmVha3BvaW50KEpTQzo6QnJlYWtwb2ludElELCBK
U0M6OlNvdXJjZUlEKSBjb25zdDsKIAotICAgICAgICBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAg
ICAgICAgY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQogCiAgICAgICAgIGJvb2wgbWF0Y2hlc1NjcmlwdFVSTChjb25zdCBT
dHJpbmcmKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQgbV9pZDsKKyAgICAgICAgUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQgbV9pZDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIEpT
Qzo6U291cmNlSUQgbV9zb3VyY2VJRCB7IEpTQzo6bm9Tb3VyY2VJRCB9OwpAQCAtMjAyLDcgKzIw
MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzZXRCcmVha3BvaW50KEpTQzo6QnJlYWtwb2ludCYp
OwogICAgIHZvaWQgZGlkU2V0QnJlYWtwb2ludChQcm90b2NvbEJyZWFrcG9pbnQmLCBKU0M6OkJy
ZWFrcG9pbnQmKTsKIAotICAgIGJvb2wgYXNzZXJ0UGF1c2VkKEVycm9yU3RyaW5nJik7CisgICAg
Ym9vbCBhc3NlcnRQYXVzZWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJik7CiAgICAgdm9pZCBjbGVh
ckRlYnVnZ2VyQnJlYWtwb2ludFN0YXRlKCk7CiAgICAgdm9pZCBjbGVhckluc3BlY3RvckJyZWFr
cG9pbnRTdGF0ZSgpOwogICAgIHZvaWQgY2xlYXJQYXVzZURldGFpbHMoKTsKQEAgLTI0OCw4ICsy
NDcsOCBAQCBwcml2YXRlOgogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIG1fcGF1c2VkR2xvYmFs
T2JqZWN0IHsgbnVsbHB0ciB9OwogICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9jdXJy
ZW50Q2FsbFN0YWNrOwogCi0gICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludElkLCBQcm90b2NvbEJyZWFrcG9pbnQ+IG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7Ci0gICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBKU0M6OkJyZWFrcG9pbnRzVmVjdG9yPiBtX2RlYnVn
Z2VyQnJlYWtwb2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsKKyAgICBIYXNoTWFwPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBQcm90b2NvbEJyZWFrcG9pbnQ+IG1fcHJvdG9j
b2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7CisgICAgSGFzaE1hcDxQcm90b2Nv
bDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgSlNDOjpCcmVha3BvaW50c1ZlY3Rvcj4gbV9kZWJ1
Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7CiAgICAgSlNDOjpCcmVha3Bv
aW50SUQgbV9uZXh0RGVidWdnZXJCcmVha3BvaW50SUQgeyBKU0M6Om5vQnJlYWtwb2ludElEICsg
MSB9OwogCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gbV9jb250aW51ZVRvTG9jYXRpb25E
ZWJ1Z2dlckJyZWFrcG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAppbmRleCA4YzYyMWFk
NDFjNGRhNTAwNDNkMzAyMjAwYTQ2ZmFlOWVmYzk3MThjLi44NWNlZDlmM2RmNjIyMzAxYjk1ZTMz
ZTQ5MzVjYmJmMTYyYjdlMzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAKQEAgLTU2LDI4
ICs1NiwyNSBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpcwogCiB2b2lkIEluc3BlY3RvckhlYXBB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKIHsK
LSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlz
YWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvckhl
YXBBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9lbmFibGVkKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkhlYXAgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAobV9lbmFibGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkhlYXAgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2VuYWJsZWQgPSB0
cnVlOwogCiAgICAgbV9lbnZpcm9ubWVudC52bSgpLmhlYXAuYWRkT2JzZXJ2ZXIodGhpcyk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmICghbV9lbmFibGVkKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkhlYXAgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiSGVhcCBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAg
ICBtX2VuYWJsZWQgPSBmYWxzZTsKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CkBAIC04NSwxNyAr
ODIsMjEgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogICAgIG1fZW52aXJvbm1lbnQudm0oKS5oZWFwLnJlbW92ZU9ic2VydmVyKHRo
aXMpOwogCiAgICAgY2xlYXJIZWFwU25hcHNob3RzKCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2MoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpnYygpCiB7CiAgICAgVk0mIHZt
ID0gbV9lbnZpcm9ubWVudC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBz
YW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xs
ZWN0aW9uU2NvcGU6OkZ1bGwpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91YmxlKiB0aW1lc3RhbXAsIFN0
cmluZyogc25hcHNob3REYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxk
b3VibGUsIFByb3RvY29sOjpIZWFwOjpIZWFwU25hcHNob3REYXRhPj4gSW5zcGVjdG9ySGVhcEFn
ZW50OjpzbmFwc2hvdCgpCiB7CiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVudC52bSgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTEwMyw4ICsxMDQsOCBAQCB2b2lkIEluc3BlY3Rv
ckhlYXBBZ2VudDo6c25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3Ry
aW5nKiBzbmFwcwogICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIgc25hcHNob3RCdWlsZGVyKHZtLmVu
c3VyZUhlYXBQcm9maWxlcigpKTsKICAgICBzbmFwc2hvdEJ1aWxkZXIuYnVpbGRTbmFwc2hvdCgp
OwogCi0gICAgKnRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7Ci0gICAgKnNuYXBzaG90RGF0YSA9IHNuYXBzaG90QnVp
bGRlci5qc29uKFsmXSAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYgbm9kZSkgeworICAgIGF1dG8g
dGltZXN0YW1wID0gbV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKTsKKyAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHNuYXBzaG90QnVpbGRlci5q
c29uKFsmXSAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYgbm9kZSkgewogICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLmNlbGwtPnN0cnVjdHVyZSh2bSkpIHsKICAgICAgICAg
ICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxP
YmplY3QoKSkgewogICAgICAgICAgICAgICAgIGlmICghbV9lbnZpcm9ubWVudC5jYW5BY2Nlc3NJ
bnNwZWN0ZWRTY3JpcHRTdGF0ZShnbG9iYWxPYmplY3QpKQpAQCAtMTEzLDM3ICsxMTQsNDUgQEAg
dm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91YmxlKiB0
aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9KTsKKworICAgIHJldHVybiB7IHsgdGltZXN0YW1wLCBzbmFwc2hvdERhdGEgfSB9Owog
fQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JIZWFw
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIAot
ICAgIGRvdWJsZSB0aW1lc3RhbXA7Ci0gICAgU3RyaW5nIHNuYXBzaG90RGF0YTsKLSAgICBzbmFw
c2hvdChlcnJvclN0cmluZywgJnRpbWVzdGFtcCwgJnNuYXBzaG90RGF0YSk7CisgICAgYXV0byBy
ZXN1bHQgPSBzbmFwc2hvdCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwogCisgICAgYXV0byBbdGltZXN0
YW1wLCBzbmFwc2hvdERhdGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnRyYWNraW5nU3RhcnQodGltZXN0YW1wLCBzbmFwc2hvdERhdGEpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0b3BUcmFj
a2luZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3Ry
YWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3Ry
YWNraW5nID0gZmFsc2U7CiAKLSAgICBkb3VibGUgdGltZXN0YW1wOwotICAgIFN0cmluZyBzbmFw
c2hvdERhdGE7Ci0gICAgc25hcHNob3QoZXJyb3JTdHJpbmcsICZ0aW1lc3RhbXAsICZzbmFwc2hv
dERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gc25hcHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsK
IAorICAgIGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ0NvbXBsZXRlKHRpbWVz
dGFtcCwgc25hcHNob3REYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLU9wdGlvbmFsPEhl
YXBTbmFwc2hvdE5vZGU+IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBPYmplY3RJZGVu
dGlmaWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgdW5zaWduZWQgaGVhcE9iamVjdElkZW50
aWZpZXIpCitPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5v
ZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllcikKIHsKICAgICBIZWFwUHJvZmlsZXIq
IGhlYXBQcm9maWxlciA9IG1fZW52aXJvbm1lbnQudm0oKS5oZWFwUHJvZmlsZXIoKTsKICAgICBp
ZiAoIWhlYXBQcm9maWxlcikgewpAQCAtMTY2LDggKzE3NSwxMCBAQCBPcHRpb25hbDxIZWFwU25h
cHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5vZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmll
cihFcnJvcgogICAgIHJldHVybiBvcHRpb25hbE5vZGU7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVh
cEFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGhlYXBPYmpl
Y3RJZCwgT3B0aW9uYWw8U3RyaW5nPiYgcmVzdWx0U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBmdW5jdGlvbkRldGFpbHMsIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIG9iamVjdFByZXZpZXcpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6
RnVuY3Rpb25EZXRhaWxzPiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
Pj4+IEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhpbnQgaGVhcE9iamVjdElkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIC8vIFByZXZlbnQg
dGhlIGNlbGwgZnJvbSBnZXR0aW5nIGNvbGxlY3RlZCBhcyB3ZSBsb29rIGl0IHVwLgogICAgIFZN
JiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBA
IC0xNzYsNTMgKzE4Nyw0OCBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsCiAgICAgdW5zaWduZWQg
aGVhcE9iamVjdElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhcE9iamVjdElk
KTsKICAgICBjb25zdCBPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBvcHRpb25hbE5vZGUgPSBu
b2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoZXJyb3JTdHJpbmcsIGhlYXBPYmplY3RJZGVudGlm
aWVyKTsKICAgICBpZiAoIW9wdGlvbmFsTm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgLy8gU3RyaW5nIHByZXZp
ZXcuCiAgICAgSlNDZWxsKiBjZWxsID0gb3B0aW9uYWxOb2RlLT5jZWxsOwotICAgIGlmIChjZWxs
LT5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IGFzU3RyaW5nKGNlbGwpLT50
cnlHZXRWYWx1ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChjZWxsLT5pc1N0
cmluZygpKQorICAgICAgICByZXR1cm4geyB7IGFzU3RyaW5nKGNlbGwpLT50cnlHZXRWYWx1ZSgp
LCBudWxscHRyLCBudWxscHRyIH0gfTsKIAogICAgIC8vIEJpZ0ludCBwcmV2aWV3LgotICAgIGlm
IChjZWxsLT5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBKU0JpZ0lu
dDo6dHJ5R2V0U3RyaW5nKHZtLCBhc0hlYXBCaWdJbnQoY2VsbCksIDEwKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoY2VsbC0+aXNIZWFwQmlnSW50KCkpCisgICAgICAgIHJldHVy
biB7IHsgSlNCaWdJbnQ6OnRyeUdldFN0cmluZyh2bSwgYXNIZWFwQmlnSW50KGNlbGwpLCAxMCks
IG51bGxwdHIsIG51bGxwdHIgfSB9OwogCiAgICAgLy8gRklYTUU6IFByb3ZpZGUgcHJldmlldyBp
bmZvcm1hdGlvbiBmb3IgSW50ZXJuYWwgT2JqZWN0cz8gQ29kZUJsb2NrLCBFeGVjdXRhYmxlLCBl
dGMuCiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0g
ICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdl
dCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwotICAgIGlm
ICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQg
b2JqZWN0IGRldGFpbHMgLSBHbG9iYWxPYmplY3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfcyk7CiAKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmlu
amVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhh
c05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVj
dCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQi
X3MpOwogCiAgICAgLy8gRnVuY3Rpb24gcHJldmlldy4KICAgICBpZiAoY2VsbC0+aW5oZXJpdHM8
SlNGdW5jdGlvbj4odm0pKSB7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1
bmN0aW9uRGV0YWlscz4gZnVuY3Rpb25EZXRhaWxzOwogICAgICAgICBpbmplY3RlZFNjcmlwdC5m
dW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGNlbGwsIGZ1bmN0aW9uRGV0YWlscyk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFmdW5jdGlvbkRldGFpbHMpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICByZXR1cm4geyB7IG51
bGxTdHJpbmcoKSwgZnVuY3Rpb25EZXRhaWxzLCBudWxscHRyIH0gfTsKICAgICB9CiAKICAgICAv
LyBPYmplY3QgcHJldmlldy4KLSAgICBvYmplY3RQcmV2aWV3ID0gaW5qZWN0ZWRTY3JpcHQucHJl
dmlld1ZhbHVlKGNlbGwpOworICAgIHJldHVybiB7IHsgbnVsbFN0cmluZygpLCBudWxscHRyLCBp
bmplY3RlZFNjcmlwdC5wcmV2aWV3VmFsdWUoY2VsbCkgfSB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE9iamVjdEdyb3VwLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9y
SGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoaW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICAvLyBQcmV2ZW50IHRoZSBjZWxsIGZyb20gZ2V0dGluZyBjb2xsZWN0ZWQgYXMgd2Ug
bG9vayBpdCB1cC4KICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMjMxLDI5ICsyMzcsMjYgQEAgdm9pZCBJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFJlbW90ZU9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBoZWFw
T2JqZWMKICAgICB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihoZWFwT2JqZWN0SWQpOwogICAgIGNvbnN0IE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5v
ZGU+IG9wdGlvbmFsTm9kZSA9IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihlcnJvclN0cmlu
ZywgaGVhcE9iamVjdElkZW50aWZpZXIpOwogICAgIGlmICghb3B0aW9uYWxOb2RlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBKU0NlbGwqIGNlbGwgPSBvcHRpb25hbE5vZGUtPmNlbGw7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmICghc3RydWN0dXJlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1
Y3R1cmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWls
cyAtIFN0cnVjdHVyZSJfcyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFs
T2JqZWN0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZ2xvYmFsT2JqZWN0
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBHbG9iYWxPYmplY3QiX3MpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxP
YmplY3QpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2Ny
aXB0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdl
dCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zKTsKIAotICAgIFN0cmluZyBvYmpl
Y3RHcm91cCA9IG9wdGlvbmFsT2JqZWN0R3JvdXAgPyAqb3B0aW9uYWxPYmplY3RHcm91cCA6IFN0
cmluZygpOwotICAgIHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY2VsbCwgb2Jq
ZWN0R3JvdXAsIHRydWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9i
amVjdChjZWxsLCBvYmplY3RHcm91cCwgdHJ1ZSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IE9i
amVjdCIpOworCisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCiBzdGF0
aWMgUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHByb3RvY29sVHlwZUZv
ckhlYXBPcGVyYXRpb24oQ29sbGVjdGlvblNjb3BlIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQu
aAppbmRleCBkZWY2YWNkZTk0NjBlNzEyODAwNDFkYWE2NWZjY2Q2ODVlMGY3YzBmLi5jYWE1MTJk
MGFiMmUxMGE4OGUwZWU2MGMyZTMyZDc0Mzk0MjIyN2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQu
aApAQCAtNDAsNyArNDAsNiBAQCBzdHJ1Y3QgSGVhcFNuYXBzaG90Tm9kZTsKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9ySGVhcEFn
ZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEhlYXBCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIsIHB1YmxpYyBKU0M6OkhlYXBPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSW5zcGVjdG9ySGVhcEFnZW50KTsKQEAgLTU0LDE0ICs1MywxNCBAQCBwdWJsaWM6
CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
KSBmaW5hbDsKIAogICAgIC8vIEhlYXBCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2MoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2
b2lkIHNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25h
cHNob3REYXRhKSBmaW5hbDsKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBm
aW5hbDsKLSAgICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGludCBoZWFwT2JqZWN0SWQsIE9wdGlvbmFsPFN0
cmluZz4mIHJlc3VsdFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25E
ZXRhaWxzPiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mKSBmaW5h
bDsKLSAgICB2b2lkIGdldFJlbW90ZU9iamVjdChFcnJvclN0cmluZyYsIGludCBoZWFwT2JqZWN0
SWQsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxPYmplY3RHcm91cCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBnYygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6
dHVwbGU8ZG91YmxlLCBQcm90b2NvbDo6SGVhcDo6SGVhcFNuYXBzaG90RGF0YT4+IHNuYXBzaG90
KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2lu
ZygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2lu
ZygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5n
LCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+Pj4gZ2V0UHJldmlldyhpbnQgaGVhcE9iamVj
dElkKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4+IGdldFJlbW90ZU9iamVjdChpbnQgaGVhcE9iamVjdElkLCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5hbDsKIAogICAgIC8vIEpTQzo6SGVhcE9ic2Vy
dmVyCiAgICAgdm9pZCB3aWxsR2FyYmFnZUNvbGxlY3QoKSBmaW5hbDsKQEAgLTczLDcgKzcyLDcg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRF
dmVudChQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUsIFNlY29uZHMgc3Rh
cnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpOwogCiBwcml2YXRlOgotICAgIE9wdGlvbmFsPEpTQzo6
SGVhcFNuYXBzaG90Tm9kZT4gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKEVycm9yU3RyaW5n
JiwgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpOworICAgIE9wdGlvbmFsPEpTQzo6SGVh
cFNuYXBzaG90Tm9kZT4gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKFByb3RvY29sOjpFcnJv
clN0cmluZyYsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKIAogICAgIEluamVjdGVk
U2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEhlYXBGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggOWFiMWFmNzRkNDMzNjM3MWY2NDkyOWJmNjA2
NWE0MmNlMWI5OWY4NC4uMDUxYzlmMzM2ODI4YmRlMjk5NDAyZDNjYTY5MjFlNmU5MjI5MzgwYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC00OSwxOCArNDksNiBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotc3RhdGljIGJvb2wg
YXNCb29sKGNvbnN0IGJvb2wqIGIpCi17Ci0gICAgcmV0dXJuIGIgJiYgKmI7Ci19Ci0KLXN0YXRp
YyBpbnQgYXNJbnQoY29uc3QgaW50KiBpKQotewotICAgIGlmIChpKQotICAgICAgICByZXR1cm4g
Kmk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9y
UnVudGltZUFnZW50KEFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IEluc3BlY3RvckFnZW50
QmFzZSgiUnVudGltZSJfcykKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGNvbnRleHQu
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQpAQCAtODEsMjUgKzY5LDQ2IEBAIHN0YXRpYyBSZWY8UHJv
dG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+IGJ1aWxkRXJyb3JSYW5nZU9iamVjdChjb25zdCBK
U1Rva2VuTG9jCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBPcHRpb25hbDxTdHJpbmc+
JiBtZXNzYWdlLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5h
YmxlKCkKK3sKKyAgICBtX2VuYWJsZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNh
YmxlKCkKK3sKKyAgICBtX2VuYWJsZWQgPSBmYWxzZTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5
bnRheEVycm9yVHlwZSwgU3RyaW5nIC8qIG1lc3NhZ2UgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6RXJyb3JSYW5nZT4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbikKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX3ZtKTsKIAogICAg
IFBhcnNlckVycm9yIGVycm9yOwogICAgIGNoZWNrU3ludGF4KG1fdm0sIEpTQzo6bWFrZVNvdXJj
ZShleHByZXNzaW9uLCB7IH0pLCBlcnJvcik7CiAKKyAgICBPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6U3ludGF4RXJyb3JUeXBlPiByZXN1bHQ7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiByYW5nZTsKKwogICAgIHN3aXRj
aCAoZXJyb3Iuc3ludGF4RXJyb3JUeXBlKCkpIHsKICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50
YXhFcnJvck5vbmU6Ci0gICAgICAgICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4
RXJyb3JUeXBlOjpOb25lOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3lu
dGF4RXJyb3JUeXBlOjpOb25lOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJy
b3I6OlN5bnRheEVycm9ySXJyZWNvdmVyYWJsZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29s
OjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OklycmVjb3ZlcmFibGU7CisgICAgICAgIHJlc3Vs
dCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OklycmVjb3ZlcmFibGU7CiAg
ICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JVbnRlcm1p
bmF0ZWRMaXRlcmFsOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRh
eEVycm9yVHlwZTo6VW50ZXJtaW5hdGVkTGl0ZXJhbDsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6VW50ZXJtaW5hdGVkTGl0ZXJhbDsKICAgICAg
ICAgYnJlYWs7CisKICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvclJlY292ZXJhYmxl
OgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6
UmVjb3ZlcmFibGU7CisgICAgICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhF
cnJvclR5cGU6OlJlY292ZXJhYmxlOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEwNywy
OSArMTE2LDQyIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUHJvdG9jCiAgICAgICAgIG1lc3NhZ2UgPSBl
cnJvci5tZXNzYWdlKCk7CiAgICAgICAgIHJhbmdlID0gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGVy
cm9yLnRva2VuKCkubV9sb2NhdGlvbik7CiAgICAgfQorCisgICAgcmV0dXJuIHsgeyAqcmVzdWx0
LCBtZXNzYWdlLCBXVEZNb3ZlKHJhbmdlKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0
ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1
cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVS
ZXN1bHQsIGNvbnN0IGJvb2wqIC8qIGVtdWxhdGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNU
aHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piwg
T3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVz
dWx0SW5kZXggKi8+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4m
JiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhj
ZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1
cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9v
bD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYmIC8qIGVtdWxhdGVVc2VyR2VzdHVyZSAq
LykKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0
Rm9yRXZhbChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRp
b25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CisKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0Owor
ICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKKyAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVz
dWx0SW5kZXg7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRp
b25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2Rl
YnVnZ2VyKTsKIAotICAgIGJvb2wgcGF1c2VBbmRNdXRlID0gYXNCb29sKGRvTm90UGF1c2VPbkV4
Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSk7CisgICAgYm9vbCBwYXVzZUFuZE11dGUgPSBkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUudmFsdWVPcihmYWxzZSk7CiAgICAgaWYgKHBh
dXNlQW5kTXV0ZSkgewogICAgICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3Bv
aW50cy5yZXBsYWNlKCk7CiAgICAgICAgIG11dGVDb25zb2xlKCk7CiAgICAgfQogCi0gICAgaW5q
ZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4cHJlc3Npb24sIG9iamVjdEdyb3Vw
ID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCksIGFzQm9vbChpbmNsdWRlQ29tbWFuZExpbmVBUEkp
LCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBhc0Jvb2wo
c2F2ZVJlc3VsdCksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICBp
bmplY3RlZFNjcmlwdC5ldmFsdWF0ZShlcnJvclN0cmluZywgZXhwcmVzc2lvbiwgb2JqZWN0R3Jv
dXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSS52YWx1ZU9yKGZhbHNlKSwgcmV0dXJuQnlWYWx1ZS52
YWx1ZU9yKGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBzYXZlUmVzdWx0
LnZhbHVlT3IoZmFsc2UpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAK
ICAgICBpZiAocGF1c2VBbmRNdXRlKQogICAgICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KworICAgIHJldHVybiB7IHtyZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJv
d24pLCBXVEZNb3ZlKHNhdmVkUmVzdWx0SW5kZXgpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwg
Y29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6YXdhaXRQcm9taXNlKGNvbnN0IFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgcHJvbWlzZU9iamVjdElkLCBPcHRpb25hbDxi
b29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBP
cHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQocHJvbWlzZU9iamVjdElk
KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xMzcsMjE5ICsx
NTksMjQ0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3Qg
U3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpbmplY3RlZFNjcmlwdC5hd2FpdFByb21pc2UocHJvbWlzZU9iamVjdElkLCBhc0Jv
b2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBhc0Jvb2woc2F2ZVJl
c3VsdCksIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpIHsKLSAgICAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkpCisgICAgaW5qZWN0ZWRT
Y3JpcHQuYXdhaXRQcm9taXNlKHByb21pc2VPYmplY3RJZCwgcmV0dXJuQnlWYWx1ZS52YWx1ZU9y
KGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBzYXZlUmVzdWx0LnZhbHVl
T3IoZmFsc2UpLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
JiBzYXZlZFJlc3VsdEluZGV4KSB7CisgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAg
Y2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yU3RyaW5nKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURk1vdmUocmVzdWx0KSwgd2FzVGhyb3duLCBz
YXZlZFJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhyZXN1
bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJvd24pLCBXVEZNb3ZlKHNhdmVkUmVz
dWx0SW5kZXgpKTsKICAgICB9KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9u
YWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2
aWV3LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8sIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhy
b3duKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbkRlY2xh
cmF0aW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYm
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiBy
ZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8
Ym9vbD4mJiAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZv
ck9iamVjdElkKG9iamVjdElkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBTdHJpbmcgYXJndW1lbnRzOwotICAgIGlm
IChvcHRpb25hbEFyZ3VtZW50cykKLSAgICAgICAgYXJndW1lbnRzID0gb3B0aW9uYWxBcmd1bWVu
dHMtPnRvSlNPTlN0cmluZygpOworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJ
ZCk7CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0
SWQiX3MpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJl
c3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247CiAKICAgICBKU0M6OkRlYnVnZ2Vy
OjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2Fi
bGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKIAotICAgIGJvb2wgcGF1c2VBbmRN
dXRlID0gYXNCb29sKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSk7CisgICAg
Ym9vbCBwYXVzZUFuZE11dGUgPSBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUu
dmFsdWVPcihmYWxzZSk7CiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkgewogICAgICAgICB0ZW1wb3Jh
cmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7CiAgICAgICAgIG11dGVD
b25zb2xlKCk7CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJy
b3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNzaW9uLCBhcmd1bWVudHMsIGFzQm9vbChyZXR1cm5C
eVZhbHVlKSwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIHJlc3VsdCwgd2FzVGhyb3duKTsKKyAg
ICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGZ1
bmN0aW9uRGVjbGFyYXRpb24sIGFyZ3VtZW50cyA/IGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkg
OiBudWxsU3RyaW5nKCksIHJldHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJl
dmlldy52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24pOwogCiAgICAgaWYgKHBhdXNl
QW5kTXV0ZSkKICAgICAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4g
eyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93bikgfSB9OwogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHByZXZpZXcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFByZXZpZXcoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmpl
Y3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmlu
amVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3Rl
ZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9z
KTsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIp
OwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsK
IAorICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4gcHJldmlldzsK
KwogICAgIG11dGVDb25zb2xlKCk7CiAKICAgICBpbmplY3RlZFNjcmlwdC5nZXRQcmV2aWV3KGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgcHJldmlldyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisK
KyAgICBpZiAoIXByZXZpZXcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4gcHJldmlldy5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMs
IGNvbnN0IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFs
UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+Pj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhjb25zdCBQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBPcHRpb25hbDxib29sPiYmIG93
blByb3BlcnRpZXMsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYg
ZmV0Y2hDb3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9i
amVjdElkKG9iamVjdElkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZl
biBvYmplY3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3Rh
cnQgPSBhc0ludChmZXRjaFN0YXJ0KTsKLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGludCBzdGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAg
ICBpZiAoc3RhcnQgPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3Rh
cnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNo
Q291bnQpOwotICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0
Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaW50IGNvdW50ID0gZmV0Y2hDb3VudC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDAp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVn
YXRpdmUiX3MpOworCisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OlByb3BlcnR5RGVzY3JpcHRvcj4+IHByb3BlcnRpZXM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4gaW50ZXJu
YWxQcm9wZXJ0aWVzOwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhj
ZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMo
bV9kZWJ1Z2dlcik7CiAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMu
cmVwbGFjZSgpOwogCiAgICAgbXV0ZUNvbnNvbGUoKTsKIAotICAgIGluamVjdGVkU2NyaXB0Lmdl
dFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2wob3duUHJvcGVydGllcyks
IHN0YXJ0LCBjb3VudCwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIHByb3BlcnRpZXMpOworICAg
IGluamVjdGVkU2NyaXB0LmdldFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvd25Q
cm9wZXJ0aWVzLnZhbHVlT3IoZmFsc2UpLCBzdGFydCwgY291bnQsIGdlbmVyYXRlUHJldmlldy52
YWx1ZU9yKGZhbHNlKSwgcHJvcGVydGllcyk7CiAKICAgICAvLyBPbmx5IGluY2x1ZGUgaW50ZXJu
YWwgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGZldGNoLgogICAgIGlmICghc3RhcnQpCi0gICAg
ICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJvcGVydGllcyhlcnJvclN0cmluZywgb2Jq
ZWN0SWQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBpbnRlcm5hbFByb3BlcnRpZXMpOworICAg
ICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9i
amVjdElkLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIGludGVybmFsUHJvcGVydGll
cyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7
IHByb3BlcnRpZXMucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShpbnRlcm5hbFByb3BlcnRpZXMp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldERpc3BsYXlhYmxlUHJv
cGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGNvbnN0IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFs
UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+Pj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIE9wdGlvbmFs
PGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3VudCwgT3B0aW9uYWw8
Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3RhcnQgPSBhc0ludChmZXRjaFN0YXJ0
KTsKLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoU3Rh
cnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlu
dCBzdGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZl
Il9zKTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNoQ291bnQpOwotICAgIGlmIChjb3Vu
dCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVn
YXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IGNvdW50ID0gZmV0Y2hD
b3VudC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOworCisgICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
IHByb3BlcnRpZXM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4gaW50ZXJuYWxQcm9wZXJ0aWVzOwogCiAgICAg
SlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAgICAgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogCiAgICAgbXV0
ZUNvbnNvbGUoKTsKIAotICAgIGluamVjdGVkU2NyaXB0LmdldERpc3BsYXlhYmxlUHJvcGVydGll
cyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHN0YXJ0LCBjb3VudCwgYXNCb29sKGdlbmVyYXRlUHJl
dmlldyksIHByb3BlcnRpZXMpOworICAgIGluamVjdGVkU2NyaXB0LmdldERpc3BsYXlhYmxlUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHN0YXJ0LCBjb3VudCwgZ2VuZXJhdGVQcmV2
aWV3LnZhbHVlT3IoZmFsc2UpLCBwcm9wZXJ0aWVzKTsKIAogICAgIC8vIE9ubHkgaW5jbHVkZSBp
bnRlcm5hbCBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZmV0Y2guCiAgICAgaWYgKCFzdGFydCkK
LSAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5n
LCBvYmplY3RJZCwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGludGVybmFsUHJvcGVydGllcyk7
CisgICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJvcGVydGllcyhlcnJvclN0cmlu
Zywgb2JqZWN0SWQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgaW50ZXJuYWxQcm9w
ZXJ0aWVzKTsKIAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcHJvcGVydGllcykK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVy
biB7IHsgcHJvcGVydGllcy5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGludGVybmFsUHJvcGVy
dGllcykgfSB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29sbGVjdGlv
bkVudHJpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElk
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0
IGludCogZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+PiBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3Vu
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVj
dGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBz
Y3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsK
IAotICAgIGludCBzdGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwotICAgIGlmIChzdGFydCA8IDAp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IHN0YXJ0ID0gZmV0Y2hTdGFydC52
YWx1ZU9yKDApOworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW50IGNvdW50
ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50LnZhbHVlT3IoMCk7CisgICAg
aWYgKGNvdW50IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaENvdW50
IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRDb2xsZWN0
aW9uRW50cmllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIG9iamVjdEdyb3VwID8gKm9iamVjdEdy
b3VwIDogU3RyaW5nKCksIHN0YXJ0LCBjb3VudCwgZW50cmllcyk7CisgICAgUmVmUHRyPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+IGVudHJpZXM7CisK
KyAgICBpbmplY3RlZFNjcmlwdC5nZXRDb2xsZWN0aW9uRW50cmllcyhlcnJvclN0cmluZywgb2Jq
ZWN0SWQsIG9iamVjdEdyb3VwLCBzdGFydCwgY291bnQsIGVudHJpZXMpOworCisgICAgaWYgKCFl
bnRyaWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIGVudHJpZXMucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBK
U09OOjpPYmplY3QmIGNhbGxBcmd1bWVudCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQs
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxPcHRpb25hbDxpbnQ+IC8qIHNhdmVSZXN1bHRJbmRleCAqLz4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpzYXZlUmVzdWx0KFJlZjxKU09OOjpPYmplY3Q+JiYgY2FsbEFyZ3VtZW50LCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRl
eHRJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdDsKIAotICAgIFN0cmluZyBvYmplY3RJZDsKLSAg
ICBpZiAoY2FsbEFyZ3VtZW50LmdldFN0cmluZygib2JqZWN0SWQiX3MsIG9iamVjdElkKSkgewot
ICAgICAgICBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBhdXRv
IG9iamVjdElkID0gY2FsbEFyZ3VtZW50LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlJ1bnRpbWU6OkNh
bGxBcmd1bWVudDo6b2JqZWN0SWRLZXkpOworICAgIGlmICghb2JqZWN0SWQpIHsKKyAgICAgICAg
aW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1v
dmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNO
b1ZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluamVjdGVkU2Ny
aXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChv
YmplY3RJZCk7CisgICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAgICAgfQotICAgIAotICAgIGluamVjdGVkU2NyaXB0LnNh
dmVSZXN1bHQoZXJyb3JTdHJpbmcsIGNhbGxBcmd1bWVudC50b0pTT05TdHJpbmcoKSwgc2F2ZWRS
ZXN1bHRJbmRleCk7CisKKyAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CisKKyAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQtPnRv
SlNPTlN0cmluZygpLCBzYXZlZFJlc3VsdEluZGV4KTsKKworICAgIGlmICghc2F2ZWRSZXN1bHRJ
bmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiBXVEZNb3ZlKHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6c2V0U2F2ZWRSZXN1bHRBbGlhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyogYWxpYXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNldFNhdmVkUmVzdWx0QWxpYXMoY29uc3QgU3RyaW5nJiBzYXZlZFJlc3VsdEFsaWFz
KQogewotICAgIE9wdGlvbmFsPFN0cmluZz4gc2F2ZWRSZXN1bHRBbGlhczsKLSAgICBpZiAoYWxp
YXMgJiYgIWFsaWFzLT5pc0VtcHR5KCkpCi0gICAgICAgIHNhdmVkUmVzdWx0QWxpYXMgPSAqYWxp
YXM7CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRIb3N0KCkuc2V0
U2F2ZWRSZXN1bHRBbGlhcyhzYXZlZFJlc3VsdEFsaWFzKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdChjb25zdCBQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogewogICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JP
YmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkp
CiAgICAgICAgIGluamVjdGVkU2NyaXB0LnJlbGVhc2VPYmplY3Qob2JqZWN0SWQpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmpl
Y3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmpl
Y3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RHcm91cCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9y
VmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6
QXJyYXkmIGxvY2F0aW9ucywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRpb25zKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlv
bj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0
T2Zmc2V0cyhSZWY8SlNPTjo6QXJyYXk+JiYgbG9jYXRpb25zKQogewogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLSAgICB0eXBlRGVzY3JpcHRpb25zID0gSlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPjo6Y3JlYXRlKCk7
Ci0gICAgaWYgKCFtX3ZtLnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
IlZNIGhhcyBubyB0eXBlIGluZm9ybWF0aW9uIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmICghbV92bS50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJWTSBoYXMgbm8gdHlwZSBpbmZvcm1hdGlvbiJfcyk7CisKKyAgICBhdXRvIHR5cGVzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPjo6Y3JlYXRl
KCk7CiAKICAgICBNb25vdG9uaWNUaW1lIHN0YXJ0ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAg
ICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMobV92bSwgIlVzZXIg
UXVlcnkiX3MpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsb2NhdGlvbnMubGVuZ3Ro
KCk7IGkrKykgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gbG9jYXRpb25z
LmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRpb247Ci0gICAgICAg
IGlmICghdmFsdWUtPmFzT2JqZWN0KGxvY2F0aW9uKSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiVW5leHBlY3RlZCBub24tb2JqZWN0IGl0ZW0gaW4gbG9jYXRpb25zIl9zOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsb2Nh
dGlvbnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgYXV0byBsb2NhdGlvbiA9IGxvY2F0aW9u
cy0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWxvY2F0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1vYmplY3QgaXRlbSBpbiBs
b2NhdGlvbnMiX3MpOwogCi0gICAgICAgIGludCBkZXNjcmlwdG9yOwotICAgICAgICBTdHJpbmcg
c291cmNlSURBc1N0cmluZzsKLSAgICAgICAgaW50IGRpdm90OwotICAgICAgICBsb2NhdGlvbi0+
Z2V0SW50ZWdlcigidHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciJfcywgZGVzY3JpcHRvcik7Ci0g
ICAgICAgIGxvY2F0aW9uLT5nZXRTdHJpbmcoInNvdXJjZUlEIl9zLCBzb3VyY2VJREFzU3RyaW5n
KTsKLSAgICAgICAgbG9jYXRpb24tPmdldEludGVnZXIoImRpdm90Il9zLCBkaXZvdCk7CisgICAg
ICAgIGF1dG8gZGVzY3JpcHRvciA9IGxvY2F0aW9uLT5nZXRJbnRlZ2VyKFByb3RvY29sOjpSdW50
aW1lOjpUeXBlTG9jYXRpb246OnR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3JLZXkpLnZhbHVlT3Io
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCk7CisgICAgICAgIGF1dG8gc291cmNl
SURTdHJpbmcgPSBsb2NhdGlvbi0+Z2V0U3RyaW5nKFByb3RvY29sOjpSdW50aW1lOjpUeXBlTG9j
YXRpb246OnNvdXJjZUlES2V5KTsKKyAgICAgICAgYXV0byBkaXZvdCA9IGxvY2F0aW9uLT5nZXRJ
bnRlZ2VyKFByb3RvY29sOjpSdW50aW1lOjpUeXBlTG9jYXRpb246OmRpdm90S2V5KS52YWx1ZU9y
KDApOwogCiAgICAgICAgIGJvb2wgb2theTsKLSAgICAgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9j
YXRpb24gPSBtX3ZtLnR5cGVQcm9maWxlcigpLT5maW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlE
QXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpLCBzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJT
ZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwgbV92bSk7CisgICAgICAgIFR5cGVMb2NhdGlv
biogdHlwZUxvY2F0aW9uID0gbV92bS50eXBlUHJvZmlsZXIoKS0+ZmluZExvY2F0aW9uKGRpdm90
LCBzb3VyY2VJRFN0cmluZy50b0ludFB0clN0cmljdCgmb2theSksIHN0YXRpY19jYXN0PFR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0b3IpLCBtX3ZtKTsKICAgICAgICAgQVNT
RVJUKG9rYXkpOwogCiAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiB0eXBlU2V0OwpAQCAtMzcyLDEy
ICs0MTksMTQgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0Zv
clZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXIKICAgICAgICAgICAgIGRlc2NyaXB0
aW9uLT5zZXRJc1RydW5jYXRlZCh0eXBlU2V0LT5pc092ZXJmbG93bigpKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHR5cGVEZXNjcmlwdGlvbnMtPmFkZEl0ZW0oV1RGTW92ZShkZXNjcmlwdGlvbikp
OworICAgICAgICB0eXBlcy0+YWRkSXRlbShXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CiAgICAgfQog
CiAgICAgTW9ub3RvbmljVGltZSBlbmQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkluc3BlY3Rvcjo6Z2V0UnVudGltZVR5cGVzRm9y
VmFyaWFibGVzQXRPZmZzZXRzIHRvb2sgJWxmbXNcbiIsIChlbmQgLSBzdGFydCkubWlsbGlzZWNv
bmRzKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUodHlwZXMpOwogfQogCiB2b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikKQEAgLTM4OSwyOCAr
NDM4LDM1IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uIHJlYXNvCiAgICAgaWYgKHJlYXNvbiAhPSBEaXNj
b25uZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95ZWQgJiYgbV9pc1R5cGVQcm9maWxp
bmdFbmFibGVkKQogICAgICAgICBzZXRUeXBlUHJvZmlsZXJFbmFibGVkU3RhdGUoZmFsc2UpOwog
Ci0gICAgU3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7CisgICAgZGlzYWJsZSgp
OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlVHlwZVByb2ZpbGVyKEVy
cm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6ZW5hYmxlVHlwZVByb2ZpbGVyKCkKIHsKICAgICBzZXRUeXBlUHJvZmlsZXJFbmFi
bGVkU3RhdGUodHJ1ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJv
ZmlsZXIoKQogewogICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlQ29u
dHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKQog
ewogICAgIHNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3RhdGUodHJ1ZSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUNvbnRy
b2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcigpCiB7
CiAgICAgc2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0VHlwZVByb2Zp
bGVyRW5hYmxlZFN0YXRlKGJvb2wgaXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKQEAgLTQ0MiwxOSAr
NDk4LDEzIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRDb250cm9sRmxvd1Byb2Zp
bGVyRW5hYmxlZFN0YXRlKGJvb2wgaXNDb250cm9sRmxvCiAgICAgfSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNpY0Jsb2NrcyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc291cmNlSURBc1N0cmluZywgUmVmUHRyPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+PiYgYmFzaWNCbG9ja3MpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNC
bG9jaz4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpCiB7Ci0gICAgaWYgKCFtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJWTSBoYXMgbm8gY29udHJvbCBmbG93IGluZm9ybWF0aW9u
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV92bS5jb250cm9sRmxvd1By
b2ZpbGVyKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVk0gaGFzIG5vIGNvbnRy
b2wgZmxvdyBpbmZvcm1hdGlvbiJfcyk7CiAKLSAgICBib29sIG9rYXk7Ci0gICAgaW50cHRyX3Qg
c291cmNlSUQgPSBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KTsKLSAgICBB
U1NFUlQob2theSk7Ci0gICAgY29uc3QgVmVjdG9yPEJhc2ljQmxvY2tSYW5nZT4mIGJhc2ljQmxv
Y2tSYW5nZXMgPSBtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JT
b3VyY2VJRChzb3VyY2VJRCwgbV92bSk7Ci0gICAgYmFzaWNCbG9ja3MgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPjo6Y3JlYXRlKCk7Ci0gICAgZm9yIChjb25z
dCBCYXNpY0Jsb2NrUmFuZ2UmIGJsb2NrIDogYmFzaWNCbG9ja1JhbmdlcykgeworICAgIGF1dG8g
YmFzaWNCbG9ja3MgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2Nr
Pjo6Y3JlYXRlKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBibG9jayA6IG1fdm0uY29udHJvbEZs
b3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNvdXJjZUlELnRvSW50UHRy
KCksIG1fdm0pKSB7CiAgICAgICAgIGF1dG8gbG9jYXRpb24gPSBQcm90b2NvbDo6UnVudGltZTo6
QmFzaWNCbG9jazo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTdGFydE9mZnNldChibG9jay5t
X3N0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgLnNldEVuZE9mZnNldChibG9jay5tX2VuZE9mZnNl
dCkKQEAgLTQ2Myw2ICs1MTMsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFz
aWNCbG9ja3MoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgYmFzaWNCbG9ja3MtPmFkZEl0ZW0oV1RGTW92ZShsb2Nh
dGlvbikpOwogICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShiYXNpY0Jsb2Nrcyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCAx
NzU2MTUxMWFmOTc5YjNiMmI3OTFjNzRkZDcyN2Q0YWUzMTI0ZWNlLi5mNDAyOTQ2ZmY2ZGFhODhj
NDg1ZDA5N2FhYzYxYzFkOWViZmMwOWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaApA
QCAtNDUsNyArNDUsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRT
Y3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yUnVudGltZUFnZW50
IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFJ1bnRpbWVCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclJ1bnRpbWVB
Z2VudCk7CkBAIC01OCwzMyArNTcsMzMgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBSdW50
aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IHRydWU7IH0KLSAgICB2b2lkIGRpc2FibGUoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBwYXJzZShF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUHJvdG9jb2w6OlJ1bnRpbWU6
OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBPcHRpb25hbDxTdHJpbmc+JiBtZXNzYWdlLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JikgZmluYWw7Ci0gICAgdm9pZCBldmFs
dWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
KiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBi
b29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBn
ZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxh
dGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYg
cHJvbWlzZU9iamVjdElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBn
ZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VD
YWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3Qg
SlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93bikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9y
U3RyaW5nJiwgY29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElkKSBmaW5hbDsKLSAgICB2b2lkIGdl
dFByZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRQcm9w
ZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgYm9vbCog
b3duUHJvcGVydGllcywgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291
bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBmaW5hbDsKLSAgICB2b2lkIGdldERpc3BsYXlhYmxl
UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGlu
dCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29sKiBnZW5lcmF0
ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGll
cykgZmluYWw7Ci0gICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGlu
dCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpIGZpbmFsOwot
ICAgIHZvaWQgc2F2ZVJlc3VsdChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgY2Fs
bEFyZ3VtZW50LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8aW50PiYg
c2F2ZWRSZXN1bHRJbmRleCkgZmluYWw7Ci0gICAgdm9pZCBzZXRTYXZlZFJlc3VsdEFsaWFzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBhbGlhcykgZmluYWw7Ci0gICAgdm9pZCByZWxlYXNl
T2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5h
bDsKLSAgICB2b2lkIGdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0
cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBsb2NhdGlvbnMsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYpIGZpbmFsOwotICAgIHZvaWQg
ZW5hYmxlVHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxl
VHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBlbmFibGVDb250cm9s
Rmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxlQ29udHJv
bEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZ2V0QmFzaWNCbG9j
a3MoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGluX3NvdXJjZUlELCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+JiBvdXRfYmFzaWNCbG9ja3Mp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIG92ZXJy
aWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlk
ZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpSdW50
aW1lOjpTeW50YXhFcnJvclR5cGUsIFN0cmluZyAvKiBtZXNzYWdlICovLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Pj4gcGFyc2UoY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZShjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFs
PGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBP
cHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVz
dWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBhd2FpdFByb21pc2UoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElk
JiwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQcm9taXNl
Q2FsbGJhY2s+JiYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAv
KiB3YXNUaHJvd24gKi8+PiBjYWxsRnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0SWQmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIFJlZlB0
cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUs
IE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIGVtdWxh
dGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gcmVsZWFzZU9iamVjdChjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQm
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6Ok9iamVjdFByZXZpZXc+PiBnZXRQcmV2aWV3KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6
dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3Jp
cHRvcj4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQ
cm9wZXJ0eURlc2NyaXB0b3I+Pj4+IGdldFByb3BlcnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiwgT3B0aW9uYWw8Ym9vbD4mJiBvd25Qcm9wZXJ0aWVzLCBPcHRp
b25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlv
bmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBnZXREaXNwbGF5YWJsZVByb3BlcnRp
ZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgT3B0aW9uYWw8aW50
PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50LCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+PiBn
ZXRDb2xsZWN0aW9uRW50cmllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
SWQmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFy
dCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPE9wdGlvbmFsPGludD4gLyogc2F2ZVJlc3VsdEluZGV4ICovPiBzYXZlUmVzdWx0
KFJlZjxKU09OOjpPYmplY3Q+JiYgY2FsbEFyZ3VtZW50LCBPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXRTYXZlZFJlc3VsdEFsaWFzKGNvbnN0IFN0cmluZyYpIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbGVhc2VPYmplY3RHcm91cChjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4+IGdldFJ1bnRpbWVU
eXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhSZWY8SlNPTjo6QXJyYXk+JiYgbG9jYXRpb25zKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGVUeXBlUHJvZmls
ZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlVHlw
ZVByb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5h
YmxlQ29udHJvbEZsb3dQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJh
c2ljQmxvY2s+Pj4gZ2V0QmFzaWNCbG9ja3MoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkgZmluYWw7
CiAKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQoQWdlbnRDb250ZXh0Jik7
CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXImIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIHsg
cmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOyB9CiAKLSAgICB2aXJ0dWFsIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkKSA9IDA7CisgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IG11dGVDb25zb2xlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bm11dGVDb25zb2xlKCkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAppbmRleCA2ODEz
ZTA3NWE5NGIzNjMxZmI1MmVhZGQ5Y2U3OTliOWM3ZGNkOGRlLi43ZWI1MWFmMzBmZGE4MDJjYTgx
YThiMTBlY2Q3ZTZlYmVlMjIxMTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50LmNwcApAQCAtNjQsMTAgKzY0LDEwIEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJv
ZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBpbmNsdWRlU2FtcGxlcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0YXJ0
VHJhY2tpbmcoT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlU2FtcGxlcykKIHsKICAgICBpZiAobV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IHRydWU7CiAKQEAgLTkxLDEyICs5MSwxNCBAQCB2b2lkIEluc3BlY3RvclNjcmlw
dFByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBp
bmNsdQogICAgIG1fZW52aXJvbm1lbnQuZGVidWdnZXIoKS5zZXRQcm9maWxpbmdDbGllbnQodGhp
cyk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChzdG9wd2F0Y2gu
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKICAgICBt
X2FjdGl2ZUV2YWx1YXRlU2NyaXB0ID0gZmFsc2U7CkBAIC0xMDQsNiArMTA2LDggQEAgdm9pZCBJ
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQog
ICAgIG1fZW52aXJvbm1lbnQuZGVidWdnZXIoKS5zZXRQcm9maWxpbmdDbGllbnQobnVsbHB0cik7
CiAKICAgICB0cmFja2luZ0NvbXBsZXRlKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29s
IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmlzQWxyZWFkeVByb2ZpbGluZygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmgKaW5kZXggN2U3Y2RjOWY5
NzUwNjc3NjYyOTc0MGFhZGNiNTRmYjRkYTAwZDA4Zi4uMjhmNTQ4OGQwYWZjMDYzYjI5ZGQwZmY3
Y2RkNTBlNWQ1MGE2NDc4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuaApAQCAtMzcsMjcgKzM3LDI1IEBAIGNsYXNzIFByb2ZpbGU7CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBTY3JpcHRQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciwgcHVibGljIEpTQzo6RGVidWdnZXI6OlByb2ZpbGluZ0NsaWVudCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudCk7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudChBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudCgp
IGZpbmFsOworICAgIH5JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChG
cm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKikgZmluYWw7Ci0gICAgdm9pZCB3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKKyAgICB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmRE
aXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNj
b25uZWN0UmVhc29uKTsKIAogICAgIC8vIFNjcmlwdFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCog
aW5jbHVkZVNhbXBsZXMpIGZpbmFsOwotICAgIHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3RyaW5n
JikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2lu
ZyhPcHRpb25hbDxib29sPiYmIGluY2x1ZGVTYW1wbGVzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6OlBy
b2ZpbGluZ0NsaWVudAotICAgIGJvb2wgaXNBbHJlYWR5UHJvZmlsaW5nKCkgY29uc3QgZmluYWw7
Ci0gICAgU2Vjb25kcyB3aWxsRXZhbHVhdGVTY3JpcHQoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEV2
YWx1YXRlU2NyaXB0KFNlY29uZHMsIEpTQzo6UHJvZmlsaW5nUmVhc29uKSBmaW5hbDsKKyAgICBi
b29sIGlzQWxyZWFkeVByb2ZpbGluZygpIGNvbnN0OworICAgIFNlY29uZHMgd2lsbEV2YWx1YXRl
U2NyaXB0KCk7CisgICAgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChTZWNvbmRzLCBKU0M6OlByb2Zp
bGluZ1JlYXNvbik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRFdmVudChTZWNvbmRzIHN0YXJ0
VGltZSwgU2Vjb25kcyBlbmRUaW1lLCBKU0M6OlByb2ZpbGluZ1JlYXNvbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRB
Z2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JUYXJnZXRBZ2VudC5jcHAKaW5kZXggOGZjYjVhMWU1NTc1MGQzMjVhODQ4MjRkODZjNDljZmU2
ZmIwNDI2OC4uNTA4ZWIwMmVjOTVjNTI0MDgzODRhMWUyYjc3NjQ4YWZkNDI2ZGQ5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFy
Z2V0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclRhcmdldEFnZW50LmNwcApAQCAtNTUsMzYgKzU1LDM2IEBAIHZvaWQgSW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RS
ZWFzb24pCiAgICAgbV9zaG91bGRQYXVzZU9uU3RhcnQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6c2V0UGF1c2VPblN0YXJ0KEVycm9yU3RyaW5nJiwgYm9vbCBwYXVz
ZU9uU3RhcnQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJnZXRB
Z2VudDo6c2V0UGF1c2VPblN0YXJ0KGJvb2wgcGF1c2VPblN0YXJ0KQogewogICAgIG1fc2hvdWxk
UGF1c2VPblN0YXJ0ID0gcGF1c2VPblN0YXJ0OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6cmVzdW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvclRhcmdldEFnZW50OjpyZXN1bWUoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKIHsKICAg
ICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdl
dCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFy
Z2V0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdl
dElkIl9zKTsKIAotICAgIGlmICghdGFyZ2V0LT5pc1BhdXNlZCgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQgaXMgbm90IHBhdXNlZCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRhcmdldC0+aXNQYXVzZWQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJUYXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIGlzIG5v
dCBwYXVzZWQiX3MpOwogCiAgICAgdGFyZ2V0LT5yZXN1bWUoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlVG9UYXJnZXQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJn
ZXRBZ2VudDo6c2VuZE1lc3NhZ2VUb1RhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgSW5zcGVjdG9yVGFyZ2V0KiB0YXJnZXQgPSBtX3Rh
cmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIl9zKTsKIAogICAgIHRhcmdl
dC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQobWVzc2FnZSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCiB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5kTWVzc2FnZUZyb21UYXJnZXRU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclRhcmdldEFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCmluZGV4IGI5MjlkZGZmZTI5YzNmYjA4OGFiNjcxNDA4
N2M5OTMwMmMyNzUyMTQuLmVkY2Q0ODliNzZlMDgwODI3ZTA3NDFmMTRiYWIwOWY5ZWE5MzAzZDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclRhcmdldEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaApAQCAtMzUsMjMgKzM1LDIxIEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJbnNwZWN0b3JUYXJnZXQ7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JUYXJnZXRB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBUYXJnZXRCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rv
clRhcmdldEFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JUYXJnZXRBZ2VudChGcm9udGVuZFJvdXRlciYsIEJhY2tlbmREaXNwYXRjaGVy
Jik7Ci0gICAgfkluc3BlY3RvclRhcmdldEFnZW50KCkgZmluYWw7CisgICAgfkluc3BlY3RvclRh
cmdldEFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVy
KikgZmluYWw7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25u
ZWN0UmVhc29uKSBmaW5hbDsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChG
cm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFRhcmdldEJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0UGF1c2VPblN0YXJ0KEVycm9yU3Ry
aW5nJiwgYm9vbCBwYXVzZU9uU3RhcnQpIGZpbmFsOwotICAgIHZvaWQgcmVzdW1lKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkgZmluYWw7Ci0gICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvVGFyZ2V0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRQYXVzZU9uU3RhcnQoYm9vbCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
cmVzdW1lKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNlbmRNZXNzYWdlVG9UYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIFRhcmdldCBsaWZlY3ljbGUuCiAgICAgdm9p
ZCB0YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0
QXVkaXRBZ2VudC5jcHAKaW5kZXggNGJmYTlmNWFhN2ZkZTE1NGI1MzNjOGYyM2NkN2JhZTY3NzU4
YWIwMC4uMjlmY2VjOTdiYjhlN2Y0NzcyZDRkN2NjOGZhZDZjOTIzMTcxZjg5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RB
dWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCkBAIC00MSw3ICs0MSw3IEBAIEpTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudDo6SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KEpTQWdlbnRDb250ZXh0
JiBjb250ZXh0KQogCiBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6On5KU0dsb2JhbE9iamVjdEF1
ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0QXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9i
amVjdEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29u
dGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4
dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qg
c3VwcG9ydGVkIGZvciBKU0NvbnRleHRzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBj
b250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuaAppbmRleCA3ZDQ2NzBk
MDRkYzdmZDMzMDgzYTE1MDYxZDM3NzY1YjFhNmMzZWU2Li41ODRkMDUwMjY0NTg5YjQ4MDVjNjFi
NGM0ZGJhMzgxOTlhNmZlZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuaApA
QCAtMzgsMTAgKzM4LDEwIEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3JBdWRpdEFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoSlNBZ2VudENvbnRleHQm
KTsKLSAgICB+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCkgZmluYWw7CisgICAgfkpTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKSBmaW5hbDsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlv
bkNvbnRleHRJZD4mJik7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0JiBtX2dsb2JhbE9iamVj
dDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcAppbmRleCAy
NTUxZTdhNDIzOTM5OTVkNmEzZWVhOWNlNDkxNzQ5YTM4Nzg5MTg5Li4zYjcwMjg3OGExY2E1MTYy
NDQwOTk5ZjRlNjRiNTNmYzM0Zjk1MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFn
ZW50OjpKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSlNBZ2VudENvbnRleHQmIGNvbnRleHQK
IAogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Ojp+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFn
ZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdERlYnVnZ2Vy
QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNv
bnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRl
eHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90
IHN1cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24g
Y29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgKaW5kZXgg
NmY3OTI3OGQ1MzMxNzFlMWZkZDBhZWZlOWRkMjliMzNiZmQxZmU5NS4uMTAwZmIyM2UzMTVkZjA0
N2Y5Zjg1NmNjYzlhNWE2ZjgwZTgzZDc3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmgKQEAgLTM2LDE4ICszNiwxOCBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdERlYnVn
Z2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3REZWJ1Z2dl
ckFnZW50KEpTQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yQ29uc29sZUFnZW50Kik7Ci0gICAgfkpT
R2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpIGZpbmFsOworICAgIH5KU0dsb2JhbE9iamVjdERl
YnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyCi0gICAgdm9p
ZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcm
IGRhdGEpIGZpbmFsOworICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogcHJpdmF0ZToKLSAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1l
OjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgLy8gTk9URTogSmF2YVNjcmlwdCBpbnNw
ZWN0b3IgZG9lcyBub3QgeWV0IG5lZWQgdG8gbXV0ZSBhIGNvbnNvbGUgYmVjYXVzZSBubyBtZXNz
YWdlcwogICAgIC8vIGFyZSBzZW50IHRvIHRoZSBjb25zb2xlIG91dHNpZGUgb2YgdGhlIEFQSSBi
b3VuZGFyeSBvciBjb25zb2xlIG9iamVjdC4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgZmluYWwg
eyB9Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgZmluYWwgeyB9CisgICAgdm9pZCBtdXRlQ29u
c29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgSW5zcGVjdG9y
Q29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudCB7IG51bGxwdHIgfTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggYzg2NjllZTBhYTViOGNhODRlNWQy
OTQzN2YzNDQ0NzFjMWY5YTA2MC4uZTI1NDQ4NzQ4ZjE0ZTUwYTJmYzVjZGU3NmIwNjg5MDJiMDM4
M2IxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcApAQCAtNDMs
OSArNDMsMTIgQEAgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6OkpTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50KEpTQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudDo6fkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCkgPSBkZWZhdWx0OwogCi1Jbmpl
Y3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpCitJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4
dElkKQogewotICAgIEFTU0VSVF9VTlVTRUQoZXhlY3V0aW9uQ29udGV4dElkLCAhZXhlY3V0aW9u
Q29udGV4dElkKTsKKyAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CisgICAgICAgIGVycm9y
U3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBKU0NvbnRl
eHRzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOworICAgICAgICBy
ZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKKyAgICB9CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKCZt
X2dsb2JhbE9iamVjdCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0UnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCmluZGV4IDZmMGNlOTA1OWQ3MjMzODM3
OGIxZDQ3YTcxYTcyNWMzOTJjZDI3N2EuLmJmZWJkYTkyYTA4YTkxZDM4Y2UyYzUxNzU2Nzk2NzMx
ZDU5YTJjOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaApAQCAtMzks
MTUgKzM5LDE1IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50IGZpbmFsIDogcHVi
bGljIEluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoSlNBZ2VudENvbnRleHQm
KTsKLSAgICB+SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoKSBmaW5hbDsKKyAgICB+SlNHbG9i
YWxPYmplY3RSdW50aW1lQWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNv
bnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgLy8gTk9URTogSmF2YVNjcmlwdCBpbnNwZWN0b3Ig
ZG9lcyBub3QgeWV0IG5lZWQgdG8gbXV0ZSBhIGNvbnNvbGUgYmVjYXVzZSBubyBtZXNzYWdlcwog
ICAgIC8vIGFyZSBzZW50IHRvIHRoZSBjb25zb2xlIG91dHNpZGUgb2YgdGhlIEFQSSBib3VuZGFy
eSBvciBjb25zb2xlIG9iamVjdC4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgZmluYWwgeyB9Ci0g
ICAgdm9pZCB1bm11dGVDb25zb2xlKCkgZmluYWwgeyB9CisgICAgdm9pZCBtdXRlQ29uc29sZSgp
IHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJl
ZlB0cjxSdW50aW1lQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCmlu
ZGV4IDNiOGZhMThiZDdlOGQ5NWQ3ZThmOTViNDQyYWZjNjNlNTUwY2U2M2EuLmZkZTRmNjk2NGQ0
MGU4YTU2NTExNmJlMmJjNjkyYTQ1MWMyZGExMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCkBAIC0yNjcsNyArMjY3LDcgQEAK
ICAgICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX0RBUktfTU9ERV9DU1Mp
ICYmIEVOQUJMRV9EQVJLX01PREVfQ1NTKSB8fCAoZGVmaW5lZChIQVZFX09TX0RBUktfTU9ERV9T
VVBQT1JUKSAmJiBIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAidGFy
Z2V0VHlwZXMiOiBbInBhZ2UiXSwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYXBwZWFyYW5jZSIsICIkcmVmIjogIkFwcGVhcmFuY2UiLCAi
ZGVzY3JpcHRpb24iOiAiQXBwZWFyYW5jZSBuYW1lIHRvIGZvcmNlLiBFbXB0eSBzdHJpbmcgZGlz
YWJsZXMgdGhlIG92ZXJyaWRlLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXBwZWFy
YW5jZSIsICIkcmVmIjogIkFwcGVhcmFuY2UiLCAib3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAg
ICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25D
bGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCmluZGV4IDA2NTJlMTI3MDhiZjg2
MjMwYmU0NjI5ZmU2NTcyNWJiYmMzNWI2NzAuLjExMDAwMDQ3M2RjZmNjNDM2NDc2ODQ4MTdkOTUz
OGM3MTVjNzI4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudC5jcHAKQEAgLTkyLDMyICs5MiwyNCBAQCBPcHRpb25hbDxSZW1v
dGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpFdmVudD4gUmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbkNsaWVudAogCiAgICAgU3RyaW5nIGpzb25EYXRhID0gU3RyaW5nOjpmcm9tVVRGOChkYXRh
KTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgIGlmICghSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTihqc29uRGF0YSwgbWVzc2FnZVZhbHVlKSkKKyAgICBhdXRvIG1l
c3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbkRhdGEpOworICAgIGlmICgh
bWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbWVzc2FnZU9iamVjdDsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNP
YmplY3QobWVzc2FnZU9iamVjdCkpCisgICAgYXV0byBtZXNzYWdlT2JqZWN0ID0gbWVzc2FnZVZh
bHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIEV2ZW50IGV2ZW50OwotICAgIGlmICghbWVzc2FnZU9iamVj
dC0+Z2V0U3RyaW5nKCJldmVudCJfcywgZXZlbnQubWV0aG9kTmFtZSkpCisKKyAgICBldmVudC5t
ZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJldmVudCJfcyk7CisgICAgaWYg
KCFldmVudC5tZXRob2ROYW1lKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
ZXZlbnQuY2xpZW50SUQgPSBjbGllbnRJRDsKLQotICAgIENvbm5lY3Rpb25JRCBjb25uZWN0aW9u
SUQ7Ci0gICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywg
Y29ubmVjdGlvbklEKSkKLSAgICAgICAgZXZlbnQuY29ubmVjdGlvbklEID0gY29ubmVjdGlvbklE
OwotCi0gICAgVGFyZ2V0SUQgdGFyZ2V0SUQ7Ci0gICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldElu
dGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCkpCi0gICAgICAgIGV2ZW50LnRhcmdldElEID0g
dGFyZ2V0SUQ7Ci0KLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAobWVzc2FnZU9iamVjdC0+
Z2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKSkKLSAgICAgICAgZXZlbnQubWVzc2FnZSA9
IG1lc3NhZ2U7Ci0KKyAgICBldmVudC5jb25uZWN0aW9uSUQgPSBtZXNzYWdlT2JqZWN0LT5nZXRJ
bnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MpOworICAgIGV2ZW50LnRhcmdldElEID0gbWVzc2FnZU9i
amVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpOworICAgIGV2ZW50Lm1lc3NhZ2UgPSBtZXNz
YWdlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MpOwogICAgIHJldHVybiBldmVudDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKaW5kZXggZjczMzhmNmRkM2YxODFlODk1
ZTE5ZWVjNjZjYTIxZDU5Y2JiZGFmYS4uNDZiOTA2NTdjMzllNGQyNTAzYjdjNzFkMmM0Y2RkMzc5
Nzg1YzdjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CkBAIC01NSwyNzkgKzU1
LDMyOSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnY3BwX3Byb3RvY29sX2dyb3VwJywgJycpCiAK
ICAgICBkZWYgaGVscGVyc19uYW1lc3BhY2Uoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJXNIZWxw
ZXJzJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCisgICAgICAgIG5hbWVzcGFjZSA9ICdIZWxwZXJz
JworICAgICAgICBpZiBzZWxmLnByb3RvY29sX25hbWUoKSAhPSAnSW5zcGVjdG9yJzoKKyAgICAg
ICAgICAgIG5hbWVzcGFjZSA9IHNlbGYucHJvdG9jb2xfbmFtZSgpICsgbmFtZXNwYWNlCisgICAg
ICAgIHJldHVybiBuYW1lc3BhY2UKIAogICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1hbmlwdWxh
dGlvbiByb3V0aW5lcy4KICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNwcF9nZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnZ2V0QXJyYXknCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAg
aWYgX3R5cGUucmF3X25hbWUoKSA9PSAnaW50ZWdlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICdnZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdudW1i
ZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0RG91YmxlJwotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnknOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0
VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0JyAr
IHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfZ2V0dGVy
X21ldGhvZF9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUp
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkg
b3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgorICAgICAgICAgICAgcmV0
dXJuICdnZXRPYmplY3QnCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYXJyYXknXToKKyAgICAgICAgICAgIHJl
dHVybiAnZ2V0QXJyYXknCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdudW1iZXInOgorICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0RG91YmxlJworICAgICAgICAgICAgaWYgX3R5cGUucmF3
X25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldFZhbHVlJworICAg
ICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQorCisgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICBAc3RhdGljbWV0aG9k
CiAgICAgZGVmIGNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldE9i
amVjdCcKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAg
ICAgIHJldHVybiAnc2V0QXJyYXknCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnaW50ZWdlcic6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBf
dHlwZS5yYXdfbmFtZSgpID09ICdudW1iZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0
RG91YmxlJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnknOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKICAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJu
IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5
cGUpCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAg
IyBmYWxsdGhyb3VnaAorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToK
LSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1p
dGl2ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29i
amVjdCddOgorICAgICAgICAgICAgcmV0dXJuICdzZXRPYmplY3QnCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsn
YXJyYXknXToKKyAgICAgICAgICAgIHJldHVybiAnc2V0QXJyYXknCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdf
bmFtZSgpID09ICdudW1iZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0RG91YmxlJwor
ICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ3NldFZhbHVlJworICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNmaXJzdChf
dHlwZS5yYXdfbmFtZSgpKQorCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlw
ZSIpCiAKICAgICAjIEdlbmVyYXRlIHR5cGUgcmVwcmVzZW50YXRpb25zIGZvciB2YXJpb3VzIHNp
dHVhdGlvbnMuCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfcHJvdG9jb2xfdHlwZV9m
b3JfdHlwZShfdHlwZSk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3Vn
aCB0byBlbnVtIG9yIHByaW1pdGl2ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNl
ZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkgYW5kIGxlbihfdHlwZS5tZW1iZXJzKSA9PSAwOgotICAgICAg
ICAgICAgcmV0dXJuICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IEFycmF5VHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzIE5vbmU6ICAj
IE90aGVyd2lzZSwgZmFsbCB0aHJvdWdoIGFuZCB1c2UgdHlwZWRlZidkIG5hbWUuCisgICAgICAg
ICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
ICdKU09OOjpBcnJheU9mPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBFbnVtVHlwZSwgQXJyYXlU
eXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycg
JSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAg
ICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4o
KS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQogCi0gICAgQHN0YXRpY21ldGhvZAot
ICAgIGRlZiBjcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9i
amVjdF9kZWNsYXJhdGlvbik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgIHJldHVybiAnOjonLmpvaW4oW0NwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6
Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICBkZWYgY3BwX3R5cGVfZm9yX3R5
cGVfbWVtYmVyX2FyZ3VtZW50KF90eXBlLCBuYW1lKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorICAgICAgICAgICAgX3R5
cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKIAotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9
IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCi0KLSAg
ICAgICAgIyBUaGlzIGhhbmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZp
bmVkIHByb3BlcnRpZXMuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUp
IG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6Ci0gICAgICAgICAgICBjcHBf
bmFtZSA9ICdKU09OOjpPYmplY3QnCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25h
bWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAg
IGNwcF9uYW1lID0gJ0pTT046OkFycmF5JwotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAg
ICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlm
IF90eXBlLnJhd19uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1cm4g
J2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY3BwX25hbWUKLQotICAgICAgICByZXR1cm4gInVua25vd25fdW5jaGVja2VkX2Zv
cm1hbF9pbl9wYXJhbWV0ZXJfdHlwZSIKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3Bw
X3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJh
bWV0ZXIudHlwZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJl
cihtZW1iZXIpOgotICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBl
X3dpdGhfbmFtZShtZW1iZXIudHlwZSwgbWVtYmVyLm1lbWJlcl9uYW1lLCBGYWxzZSkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBl
LCB0eXBlX25hbWUsIGlzX29wdGlvbmFsKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
KEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+
JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgYnVpbGRl
cl90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQot
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyonICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZS5hbGlhc2VkX3R5cGUpCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyYnICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHJldHVybiBidWlsZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0
aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNP
Tjo6T2JqZWN0PicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBb
J2FueSddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPicKLSAg
ICAgICAgICAgIGVsaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQorICAgICAgICAgICAgcmV0dXJuICdSZWY8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90
b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+
JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmlu
Zyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAg
ICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlBy
b3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBl
LnJhd19uYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVjZmlyc3QobmFtZSkKKyAgICAg
ICAgICAgIHJldHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5k
b21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKIAotICAgICAgICAgICAgaWYgaXNfb3B0aW9u
YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcyonICUgZW51bV90eXBlX25hbWUKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcycgJSBlbnVtX3R5cGVfbmFt
ZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX291dF9w
YXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4mIiAlIGNwcF9uYW1lCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGNwcF9uYW1lCi0gICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBl
LmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmly
c3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMqJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAK
LSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBmb3JtYWwgb3V0IHBhcmFtZXRlciB0
eXBlLiIpCi0KLSAgICAjIEZJWE1FOiB0aGlzIGlzIG9ubHkgc2xpZ2h0bHkgZGlmZmVyZW50IGZy
b20gb3V0IHBhcmFtZXRlcnM7IHRoZXkgY291bGQgYmUgdW5pZmllZC4KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRl
cik6Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChP
YmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYm
JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBf
bmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0g
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICJPcHRpb25hbDwlcz4mIiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAg
IHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQot
ICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91
czoKLSAgICAgICAgICAgICAgICBjcHBfbmFtZSA9ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
Y3BwX25hbWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2Rv
bWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwl
cz4iICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNwcF9uYW1lCi0KLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBmb3JtYWwgYXN5
bmMgcGFyYW1ldGVyIHR5cGUuIikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0
eXBlIikKIAogICAgICMgSW4tcGFyYW1ldGVycyBkb24ndCB1c2UgYnVpbGRlciB0eXBlcywgYmVj
YXVzZSB0aGV5IGNvdWxkIGJlIHBhc3NlZAogICAgICMgIm9wZW4gdHlwZXMiIHRoYXQgYXJlIG1h
bnVhbGx5IGNvbnN0cnVjdGVkIG91dCBvZiBJbnNwZWN0b3JPYmplY3RzLgotCi0gICAgIyBGSVhN
RTogT25seSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFjdHVhbGx5IG9wZW4gdHlwZXMgc2hvdWxkIG5l
ZWQgbm9uLWJ1aWxkZXIgcGFyYW1ldGVyIHR5cGVzLgogICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBf
dHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFt
ZXRlcihfdHlwZSwgaXNfb3B0aW9uYWwpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBG
YWxsIHRocm91Z2guCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAg
ICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkg
PT0gJ29iamVjdCc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmplY3Q+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZjxKU09OOjpPYmplY3Q+JiYnCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlU
eXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJh
eT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2Nv
bnN0ICVzJicgJSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBl
KQogCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJS
ZWZQdHI8SlNPTjo6T2JqZWN0PiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlU
eXBlKToKLSAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEpTT046OkFycmF5PiIKLSAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFt
ZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgogICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVf
Zm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gIlJl
ZlB0cjwlcz4iICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnc3RyaW5nJywgJ2ludGVnZXInLCAnbnVt
YmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUgY3BwX25hbWUK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQor
CisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9u
YWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9uYW1lCiAKICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFt
ZXRlcik6Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICBkZWYgY3BwX3R5cGVf
Zm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKF90eXBlLCBpc19vcHRpb25hbCk6CisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JyAlIENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9u
YWw8JXM+IiAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgcmV0dXJuICclcycgJSBidWlsZGVy
X3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0dXJu
ICdSZWY8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlw
ZSkKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAg
ICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8
SlNPTjo6T2JqZWN0PicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4nCisK
KyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAg
ICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6
QXJyYXk+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JworCisgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4nCisg
ICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4nCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCiAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255
bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4o
KS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
J1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9uYWw8JXM+JyAlIGNwcF9uYW1lCisgICAgICAgIHJl
dHVybiBjcHBfbmFtZQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfYXNzZXJ0aW9u
X21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6
CisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1bWVudChfdHlwZSwgaXNf
b3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxs
dGhyb3VnCiAKLSAgICAgICAgZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgot
ICAgICAgICAgICAgcmV0dXJuICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBl
KQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fu
b255bW91czoKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAg
ICAgICAgICMgZmFsbHRocm91Z2gKIAotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAg
ICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYm
JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiAnUmVmPCVzPiYmJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShfdHlwZSkKIAotICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3Jf
dHlwZSh0eXBlX21lbWJlci50eXBlKQorICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
ID09ICdvYmplY3QnOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAgICAgICAgICAgcmV0dXJuICdS
ZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkg
PT0gJ2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046OkFycmF5PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8
SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAn
YW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVy
biAnUmVmUHRyPEpTT046OlZhbHVlPiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6
VmFsdWU+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5n
JzoKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFt
ZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycg
JSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAg
ICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24g
dHlwZSIpCisKKyAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9
ICdPcHRpb25hbDwlcz4mJicgJSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2V2ZW50X3BhcmFtZXRlcihf
dHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAg
ICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmlt
aXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIGlmIGlz
X29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYmJyAlIENwcEdl
bmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmPCVzPiYmJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlw
ZShfdHlwZSkKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3Qn
OgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2Jq
ZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FycmF5JzoK
KyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPEpTT046OkFycmF5PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+
JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAg
ICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpT
T046OlZhbHVlPiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYnCisK
KyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAg
ICAgIHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
OgorICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisKKyAg
ICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25hbDwl
cz4mJicgJSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2VudW0oZW51bV90eXBlLCBuYW1lKToKKyAgICAg
ICAgaWYgZW51bV90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIHJldHVybiAnUHJvdG9j
b2w6OiVzOjolcycgJSAoZW51bV90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmly
c3QobmFtZSkpCisgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoZW51bV90eXBl
LnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogCiAgICAg
QHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
OgogICAgICAgICByZXR1cm4gX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJh
d19uYW1lKCkpCiAKLSAgICAjIERlY2lkZSB3aGV0aGVyIGNlcnRhaW4gaGVscGVycyBhcmUgbmVj
ZXNzYXJ5IGluIGEgc2l0dWF0aW9uLgogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxk
X3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Ci0gICAgICAgIHJldHVybiBub3Qg
aXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpCisgICAgZGVmIHNob3Vs
ZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNl
ZF90eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdf
bmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJl
dHVybiBpc19vcHRpb25hbCA9PSAoX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Jvb2xlYW4nLCAnaW50
ZWdlcicsICdudW1iZXInXSkKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Vz
ZV9yZWZlcmVuY2VzX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFBy
aW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbImFueSIsICJvYmpl
Y3QiXSkKKyAgICBkZWYgc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFs
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQor
CisgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Jvb2xlYW4nLCAn
aW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBy
ZXR1cm4gaXNfb3B0aW9uYWwKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Bh
c3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgotICAgICAgICByZXR1cm4gaXNpbnN0
YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBl
LCAoUHJpbWl0aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3Qi
KQorICAgIGRlZiBzaG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFs
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQor
CisgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBub3QgaW4gWydib29sZWFu
JywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIGlzX29wdGlvbmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5CmluZGV4IDA4MmJlMzNmMTVkZTI1YmU4ODk1N2NiMTQyMjkzNTIwMzZl
ZTIyY2YuLjdjODQ4NTc4NmU5Y2RjZjE0MmU5Mzk2MmFlMmNmNGQxMDcxZTFkODcgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC05NSw3ICs5
NSw3IEBAIHByb3RlY3RlZDoKICAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjwke2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBm
aW5hbDsKICR7Y29tbWFuZERlY2xhcmF0aW9uc30KIHByaXZhdGU6CiAgICAgJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwpAQCAtMTE0LDMyICsxMTQsMzAgQEAgcHJpdmF0ZToKICAg
ICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMg
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICAk
e2NhbGxiYWNrTmFtZX0oUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVyc30pOworICAgICAgICB2b2lkIHNlbmRT
dWNjZXNzKCR7cmV0dXJuc30pOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkICR7Y29tbWFuZE5h
bWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKKyAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5k
TmFtZX0oJHtwYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisgICAgIiIidm9pZCAke2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9t
ZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90
b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Mp
OwogCiAke2Rpc3BhdGNoQ2FzZXN9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFp
bk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOwogfSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25MYXJn
ZVN3aXRjaCA9ICgKLSIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKKyIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8JHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3Rv
Y29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5nIENhbGxIYW5k
bGVyID0gdm9pZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsKKyAgICB1c2luZyBDYWxsSGFu
ZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBwcm90
b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSk7CiAg
ICAgdXNpbmcgRGlzcGF0Y2hNYXAgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OwogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CiAgICAgaWYg
KGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpAQCAtMTU0LDEzICsxNTIsMTMgQEAgJHtk
aXNwYXRjaENhc2VzfQogICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRz
W2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwogICAgIH0KIAotICAgIGF1dG8gZmluZFJl
c3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBhdXRvIGZpbmRSZXN1
bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKHByb3RvY29sX21ldGhvZCk7CiAgICAgaWYgKGZp
bmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7CisgICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogfSIiIikKIAogICAgIEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3RvciA9ICgKQEAgLTE3Nyw3ICsx
NzUsNyBAQCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAgIEJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgKLSIiIiR7aW5Q
YXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisiIiIke3BhcmFtZXRlckRlY2xhcmF0aW9uc30KICAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwnJHtkb21haW5OYW1l
fS4ke2NvbW1hbmROYW1lfVwnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTE4NywxMSArMTg1LDExIEBAICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyCiAgICAgQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKICIiIiR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFj
a05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlk
KSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0
Y2hlciksIGlkKSB7IH0KIAotdm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Zm9ybWFsUGFyYW1ldGVyc30pCit2
b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1l
fTo6c2VuZFN1Y2Nlc3MoJHtjYWxsYmFja1BhcmFtZXRlcnN9KQogewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSR7b3V0UGFyYW1l
dGVyQXNzaWdubWVudHN9Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpz
b25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ciske3JldHVybkFzc2lnbm1lbnRzfQorICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwogfSIiIikKIAogICAgIEZy
b250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKQEAgLTI0Niwx
MyArMjQ0LDExIEBAICR7Y29uc3RydWN0b3JFeGFtcGxlfQogICAgIH0iIiIpCiAKICAgICBQcm90
b2NvbE9iamVjdFJ1bnRpbWVDYXN0ID0gKAotIiIiUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRp
bmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4m
JiB2YWx1ZSkKKyIiIlJlZjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlw
ZX0+OjpydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5h
c09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1
Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNPYmplY3QoKTsKICAgICBCaW5k
aW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1
bHQuZ2V0KCkpOwogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2Uq
PihyZXN1bHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PCR7b2Jq
ZWN0VHlwZX0+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpPYmplY3RCYXNlPihyZXN1bHQu
cmVsZWFzZU5vbk51bGwoKSkpOwogfQogIiIiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CmluZGV4IGUxYTY2MWJhMzc5Y2RlYTQwNjRjNmY3N2M0ZWZjYjExNjJh
Y2VmYzAuLmI5YzY2MTc0OTIyNDRkMDBlMGE3NDVkNzk0YmFiNjcxMDJlNzQ0YzUgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMzLDkgKzMzLDExIEBA
IGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0
b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisgICAgZnJvbSAu
bW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUKIGV4Y2VwdCBWYWx1ZUVycm9yOgog
ICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBjcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUKIAog
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTY1LDcgKzY3LDcgQEAgY2xh
c3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIHRhcmdldF9mcmFtZXdvcmtfbmFtZSA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
bmFtZQogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCi0gICAgICAgICAgICAoW3RhcmdldF9m
cmFtZXdvcmtfbmFtZV0sICh0YXJnZXRfZnJhbWV3b3JrX25hbWUsICIlc1Byb3RvY29sVHlwZXMu
aCIgJSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAorICAgICAgICAgICAgKFt0YXJnZXRfZnJhbWV3
b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1lLCAiJXNQcm90b2NvbE9iamVjdHMuaCIg
JSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
XSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUi
LCAiaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiKSksCiAgICAgICAgIF0K
QEAgLTkxLDkgKzkzLDE5IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJf
ZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQotICAgICAgICBmb3IgX3Bh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfY2FsbElkJ10KKyAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRl
cihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUp
KQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6
IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAxMGQ4
ZjE0YmQ1ZmViZWI4YTFiMDZiMDE3Njc1YTE0M2E4ZDRmNzM4Li42ZDlkZDJhNDhkYzM0NjkyMDcx
YzFkYmMxYjhiM2I0ZTdjNzNhOTE1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtNTUs
MTAgKzU1LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5jb21tYW5kc19mb3JfZG9t
YWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAg
ICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5nJyldCiAgICAgICAgIGhlYWRl
cl9hcmdzID0gewogICAgICAgICAgICAgJ2luY2x1ZGVzJzogc2VsZi5fZ2VuZXJhdGVfc2Vjb25k
YXJ5X2hlYWRlcl9pbmNsdWRlcygpLAotICAgICAgICAgICAgJ3R5cGVkZWZzJzogJ1xuJy5qb2lu
KFsndHlwZWRlZiAlcyAlczsnICUgdHlwZWRlZiBmb3IgdHlwZWRlZiBpbiB0eXBlZGVmc10pLAor
ICAgICAgICAgICAgJ3R5cGVkZWZzJzogJycsCiAgICAgICAgIH0KIAogICAgICAgICBkb21haW5z
ID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKQEAgLTc5LDkgKzc4LDExIEBAIGNsYXNzIENw
cEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
IGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldl
YktpdCJdLCAoc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lLCAiJXNQcm90b2NvbE9iamVjdHMu
aCIgJSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJX
ZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSkKKyAgICAgICAgICAgIChb
IkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvRXhwZWN0ZWQuaCIpKSwK
KyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYv
T3B0aW9uYWwuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoInN0ZCIsICJ0dXBsZSIpKSwKICAgICAgICAgXQotCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJp
ZXMoaGVhZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRs
ZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0x
MDEsMTEgKzEwMiw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgogICAg
ICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKIAotICAgICAgICB1
c2VkX2VudW1fbmFtZXMgPSBzZXQoKQotCiAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0g
W10KICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFp
bik6Ci0gICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCB1c2VkX2VudW1fbmFt
ZXMpKQorICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCkpCiAKICAgICAgICAg
aGFuZGxlcl9hcmdzID0gewogICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIu
am9pbihjbGFzc0NvbXBvbmVudHMpLApAQCAtMTE1LDY5ICsxMTQsNTYgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5k
bGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCi0gICAg
ZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRl
ciwgY29tbWFuZCk6Ci0gICAgICAgIGVudW1fYXJncyA9IHsKLSAgICAgICAgICAgICdwYXJhbWV0
ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgJ2NvbW1hbmRO
YW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwn
JShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShjb21t
YW5kTmFtZSlzLicgJSBlbnVtX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0g
Y2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
IGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXpl
ZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsgLy8gZW51
bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKToKKyAg
ICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29t
bWFuZCk6CiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CiAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21t
YW5kKQogCiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnRXJyb3JT
dHJpbmcmJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKworICAg
ICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5
cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2lu
X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnR5
cGUuaXNfYW5vbnltb3VzIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2Vk
X2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgY29tbWFuZCkpCi0gICAg
ICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KQotCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6
Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAg
IHJldHVybnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9mb3JtYWxfb3V0X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotCi0g
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBf
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
IG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgY29t
bWFuZCkpCi0gICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgcmV0dXJucy5hcHBlbmQoJyVzIC8qICVzICovJyAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKHBh
cmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAK
ICAgICAgICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29t
bWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihw
YXJhbWV0ZXJzKQorICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVy
cyksCisgICAgICAgICAgICAncmV0dXJucyc6ICIsICIuam9pbihyZXR1cm5zKSwKICAgICAgICAg
fQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlz
KCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgaWYgbGVuKHJl
dHVybnMpID09IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPCUocmV0dXJucylzPiAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0
ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBlbGlmIGxlbihyZXR1cm5zKSA+
IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHN0ZDo6dHVwbGU8JShyZXR1cm5zKXM+PiAlKGNvbW1hbmROYW1lKXMoJShwYXJh
bWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQog
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5k
LmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNf
aGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAg
Y2FsbGJhY2tOYW1lID0gIiVzQ2FsbGJhY2siICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFt
ZSkKIAotICAgICAgICBpbl9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIg
aW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
ICdpbl8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgX3BhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0
ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8n
ICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIg
JSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXIu
dHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQorICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZCgiUmVmPCVzPiYmIiAlIGNhbGxiYWNrTmFtZSkKIAotICAgICAgICAg
ICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJhbWV0ZXJf
bmFtZSkpCi0gICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCJSZWY8JXM+JiYgY2FsbGJhY2si
ICUgY2FsbGJhY2tOYW1lKQotCi0gICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAg
Zm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisgICAgICAgIHJldHVybnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1l
dGVyX25hbWUKKyAgICAgICAgICAgIHJldHVybnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1bWVudChwYXJhbWV0ZXIudHlwZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNsYXNz
X2NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KICAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2Rl
bCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQpAQCAtMTg4LDggKzE3
NCw4IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICcgJy5qb2luKGNsYXNz
X2NvbXBvbmVudHMpLAogICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IGNhbGxiYWNrTmFtZSwK
ICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAg
ICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIuam9pbihpbl9wYXJhbWV0ZXJzKSwKLSAgICAgICAg
ICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3Jl
dHVybnMnOiAiLCAiLmpvaW4ocmV0dXJucyksCiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVj
bGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQpAQCAtMjIzLDQgKzIw
OSw0IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhh
bmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25f
Zm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiICAgIHZvaWQgJXMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7IiAlIGNvbW1h
bmQuY29tbWFuZF9uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIiAgICB2b2lkICVzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7IiAlIGNv
bW1hbmQuY29tbWFuZF9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggZGFmMTljOTUwZmIwN2FhYTJkOGIzMWEyZjQ5YzdjYWI1MDcwMmM2MC4uOGRmYjI5
NGFiOWQyNmU0ZTg1NWY1ZTEyOWRiODMxZTdmOTAxYWJkZSAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zMywxMiArMzMsMTIgQEAgdHJ5OgogICAgIGZyb20g
LmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVz
CiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9t
IC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIGV4Y2Vw
dCBWYWx1ZUVycm9yOgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9y
CiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IsIHVjZmlyc3QKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBl
CisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC04
MCwxMSArODAsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAg
ICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAogICAg
ICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9OZXZl
ckRlc3Ryb3llZC5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0
Il0sICgiV1RGIiwgInd0Zi90ZXh0L0NTdHJpbmcuaCIpKQogICAgICAgICBdCi0KICAgICAgICAg
cmV0dXJuIHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRl
cykKIAogCkBAIC0xMjMsOCArMTIwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBjYXNlcyA9IFtdCiAK
ICAgICAgICAgZmlyc3RfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWwotICAgICAgICAgICAg
JyAgICBpZiAobWV0aG9kID09ICIlcyIpIHsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAot
ICAgICAgICAgICAgJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsn
ICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJyAgICBpZiAocHJvdG9j
b2xfbWV0aG9kID09ICIlcyIpIHsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgJyAgICAgICAgJXMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAogICAgICAgICAgICAgJyAgICAg
ICAgcmV0dXJuOycsCiAgICAgICAgICAgICAnICAgIH0nLAogICAgICAgICBdKQpAQCAtMTMyLDgg
KzEyOSw4IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kc1sxOl06
CiAgICAgICAgICAgICBhZGRpdGlvbmFsX2NvbW1hbmRfc3RyaW5nID0gIlxuIi5qb2luKFsKLSAg
ICAgICAgICAgICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kLmNvbW1h
bmRfbmFtZSwKLSAgICAgICAgICAgICAgICAnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICAgICAn
ICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwKKyAgICAgICAgICAgICAgICAnICAgICAgICAlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUo
cHJvdG9jb2xfcGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSwKICAgICAgICAg
ICAgICAgICAnICAgICAgICByZXR1cm47JywKICAgICAgICAgICAgICAgICAnICAgIH0nLAogICAg
ICAgICAgICAgXSkKQEAgLTE2NSwxNDYgKzE2MiwxMzYgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1
cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25M
YXJnZVN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oc2VsZiwgY29tbWFuZCwg
ZG9tYWluKToKLSAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAg
IGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzID0gW10K
KyAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycyA9IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBh
cmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl9u
YW1lCisKKyAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6Cisg
ICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAg
ICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUs
IHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVl
ID0gcGFyYW1ldGVyX3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgZWxp
ZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyAr
IHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21v
dmVfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1vdmUoJXMpJyAlIHBhcmFtZXRlcl92YWx1ZQorCiAg
ICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhv
ZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlw
ZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAgICAgICAgICAgICAgICAncGFyYW1ldGVy
S2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJhbWV0
ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJh
bWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIo
cGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAgICAnaGVscGVyc05hbWVzcGFjZSc6IHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFt
ZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92
YWx1ZSwKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBw
ZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNfcGFy
YW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAg
ICBjYWxsYmFja19wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRp
b25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgotICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBw
ZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1l
KXMuaGFzVmFsdWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRT
ZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKiUocGFyYW1ldGVyTmFtZSlzKTsnICUg
cGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUp
cyknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3Np
Z25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2Qpcygi
JShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQot
ICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29s
OjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJShwYXJhbWV0ZXJO
YW1lKXMpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm5fYXNzaWdubWVu
dHMuYXBwZW5kKCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCisg
ICAgICAgICAgICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAl
KHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQogICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25N
ZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1l
dGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm5fYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2Qp
cygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJn
cykKIAogICAgICAgICBhc3luY19hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCiAgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogdWNmaXJzdChj
b21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snLAotICAgICAgICAgICAgJ2Zvcm1hbFBh
cmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpLAotICAgICAgICAgICAgJ291
dFBhcmFtZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCisgICAgICAgICAgICAnY2FsbGJhY2tQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGNhbGxiYWNr
X3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3JldHVybkFzc2lnbm1lbnRzJzogIlxuIi5qb2lu
KHJldHVybl9hc3NpZ25tZW50cykKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1hbmQpLnN1
YnN0aXR1dGUoTm9uZSwgKiphc3luY19hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCBkb21haW4pOgot
ICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3BhcmFt
ZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
ID0gW10KLSAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMgPSBb
J3JlcXVlc3RJZCddCisgICAgICAgIHBhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAg
ICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucyA9IFtdCisgICAgICAgIGFsdGVybmF0ZV9kaXNw
YXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzID0gWydwcm90b2NvbF9jYWxsSWQnXQogICAgICAgICBt
ZXRob2RfcGFyYW1ldGVycyA9IFtdCi0gICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgot
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdlcnJvcicpCiAKICAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUg
PSAnaW5fJyArIHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3Vt
ZW50ID0gJ251bGxwdHInCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnJiVzX3ZhbHVlRm91bmQnICUg
cGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25z
LmFwcGVuZCgnICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlOycgJSBwYXJhbWV0ZXJfbmFt
ZSkKKyAgICAgICAgICAgIHZhcmlhYmxlX25hbWUgPSBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAg
ICAgICAjIE5vdyBhZGQgYXBwcm9wcmlhdGUgb3BlcmF0b3JzLgotICAgICAgICAgICAgcGFyYW1l
dGVyX2V4cHJlc3Npb24gPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgX3R5cGUgPSBwYXJh
bWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
OgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoK
KyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCiAKLSAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUocGFyYW1l
dGVyLnR5cGUpOgotICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAg
ICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnJXMuZ2V0KCknICUgcGFy
YW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
ICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm92ZWQgdGhlIG9iamVj
dCBpcyBub24tbnVsbC4KLSAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHJlcXVpcmVkIHByb3Bl
cnR5IGlzIG1pc3NpbmcsIEluc3BlY3RvckJhY2tlbmQ6OmdldE9iamVjdCB3aWxsCi0gICAgICAg
ICAgICAgICAgICAgICMgYXBwZW5kIGEgcHJvdG9jb2wgZXJyb3IsIGFuZCB0aGUgbWV0aG9kIGRp
c3BhdGNoZXIgd2lsbCByZXR1cm4gd2l0aG91dAotICAgICAgICAgICAgICAgICAgICAjIGludm9r
aW5nIHRoZSBiYWNrZW5kIG1ldGhvZCAoYW5kIGRlcmVmZXJlbmNpbmcgdGhlIG9iamVjdCkuCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyolcycgJSBwYXJhbWV0
ZXJfZXhwcmVzc2lvbgotICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnJiVzJyAlIHBhcmFtZXRlcl9l
eHByZXNzaW9uCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJfbmFtZSArICdfanNvbicKIAotICAgICAgICAg
ICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAotICAgICAgICAg
ICAgICAgICdwYXJhbWV0ZXJFeHByZXNzaW9uJzogcGFyYW1ldGVyX2V4cHJlc3Npb24sCi0gICAg
ICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKLSAgICAgICAgICAgICAgICAnc3VjY2Vzc091
dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1l
dGVyX25hbWUpCiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5k
KCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocGFyYW1ldGVycy5nZXQoKSwgIiUocGFyYW1ldGVy
S2V5KXMiX3MsICUoc3VjY2Vzc091dFBhcmFtKXMpOycgJSBwYXJhbV9hcmdzKQotCi0gICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgb3B0aW9uYWxf
aW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJShw
YXJhbWV0ZXJFeHByZXNzaW9uKXMgOiBudWxscHRyJyAlIHBhcmFtX2FyZ3MKLSAgICAgICAgICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQob3B0aW9u
YWxfaW5fcGFyYW1ldGVyX3N0cmluZykKLSAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQob3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZykKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMu
YXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQotICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJh
bWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKLQotICAgICAgICBpZiBjb21tYW5k
LmlzX2FzeW5jOgotICAgICAgICAgICAgYXN5bmNfYXJncyA9IHsKLSAgICAgICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAnY2FsbGJh
Y2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snCi0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7JykKLSAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykK
LSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJl
dHVybjsnKQotICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjay5j
b3B5UmVmKCknKQotCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9
IHsKLSAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAg
ICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0
dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgZW51
bV9hcmdzID0gewogICAgICAgICAgICAgICAgICAgICAnaGVscGVyc05hbWVzcGFjZSc6IHNlbGYu
aGVscGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1UeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKSwKKyAgICAg
ICAgICAgICAgICAgICAgJ2VudW1WYXJpYWJsZU5hbWUnOiB2YXJpYWJsZV9uYW1lLAorICAgICAg
ICAgICAgICAgICAgICAnc3RyaW5nVmFyaWFibGVOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlv
bnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgb3V0XyUocGFyYW1ldGVyTmFtZSlzOycg
JSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucyk6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25z
LmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5h
cHBlbmQoJyAgICBhdXRvICUoZW51bVZhcmlhYmxlTmFtZSlzID0gUHJvdG9jb2w6OiUoaGVscGVy
c05hbWVzcGFjZSlzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JShlbnVtVHlwZSlzPiglKHN0
cmluZ1ZhcmlhYmxlTmFtZSlzKTsnICUgZW51bV9hcmdzKQogICAgICAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9y
LnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcy5oYXNWYWx1ZSgpKScgJSBwYXJhbV9hcmdz
KQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktl
eSlzIl9zLCAqb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMpJyAl
IHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUo
cGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3Mp
Ci0gICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJl
c3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBJbnNwZWN0b3I6
OlByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0
XyUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9leHByZXNzaW9uID0gJ1dURk1vdmUoJXMpJyAlIHZhcmlhYmxlX25hbWUKICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcg
ICAgaWYgKCElKGVudW1WYXJpYWJsZU5hbWUpcykgeycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5rbm93biAlKHBhcmFtZXRlcktleSlzOiAiX3MsICUo
c3RyaW5nVmFyaWFibGVOYW1lKXMpKTsnICUgZW51bV9hcmdzKQorICAgICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAg
IH0nKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcqJyArIHZh
cmlhYmxlX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgX3R5cGUu
cmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0g
J1dURk1vdmUoJXMpJyAlIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbGlmIF90eXBl
LnJhd19uYW1lKCkgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyonICsgdmFyaWFibGVfbmFtZQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHBy
ZXNzaW9uID0gdmFyaWFibGVfbmFtZSArICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1l
dGVyX2V4cHJlc3Npb24pCisgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFy
YW1ldGVyX2V4cHJlc3Npb24pCiAKLSAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hv
dWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpIG9yIHBhcmFt
ZXRlci5pc19vcHRpb25hbCBhbmQgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3Jf
cmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAg
ICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnJm91dF8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAg
cGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1l
dGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9y
LmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKKyAgICAgICAgICAgICAgICAncmVx
dWlyZWQnOiAnZmFsc2UnIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICd0cnVlJywKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcg
ICAgYXV0byAlKHBhcmFtZXRlck5hbWUpcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPiUoa2V5ZWRH
ZXRNZXRob2Qpcyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiJShwYXJhbWV0ZXJLZXkpcyJf
cywgJShyZXF1aXJlZClzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICBpZiBjb21tYW5kLmlz
X2FzeW5jOgorICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdhZG9wdFJlZigq
bmV3ICVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcyhtX2JhY2tlbmREaXNwYXRjaGVyLmNv
cHlSZWYoKSwgcHJvdG9jb2xfY2FsbElkKSknICUgKGRvbWFpbi5kb21haW5fbmFtZSwgJyVzQ2Fs
bGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkpKQogCiAgICAgICAgIGNvbW1h
bmRfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6ICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29t
bWFuZC5jb21tYW5kX25hbWUpLAogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5j
b21tYW5kX25hbWUsCi0gICAgICAgICAgICAnaW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnMnOiAnXG4n
LmpvaW4oaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyksCisgICAgICAgICAgICAncGFyYW1ldGVy
RGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKHBhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAogICAgICAg
ICAgICAgJ2ludm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKG1ldGhvZF9wYXJhbWV0ZXJz
KSwKICAgICAgICAgICAgICdhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9p
bihhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgIH0KIAog
ICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVy
cykgPT0gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Jh
Y2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgndm9pZCAlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMo
bG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpJyAlIGNvbW1hbmRf
YXJncykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRv
bWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyknICUgY29tbWFuZF9hcmdzKQor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCiAKICAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzKSA+IDA6CkBAIC0zMTksMzEgKzMwNiw3MSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UyknKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCisgICAgICAgIGlmIGxlbihwYXJh
bWV0ZXJfZW51bV9yZXNvbHV0aW9ucyk6CisgICAgICAgICAgICBsaW5lcy5leHRlbmQocGFyYW1l
dGVyX2VudW1fcmVzb2x1dGlvbnMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKICAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFJlZjwlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05h
bWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3ICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJl
ZigpLCByZXF1ZXN0SWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMp
cyk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgICAgICByZXN1bHRfZXh0cmFjdGlvbl9uYW1lcyA9IFtdCisgICAgICAgICAgICBy
ZXN1bHRfY29udmVyc2lvbl9saW5lcyA9IFtdCisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29w
dF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdv
dXRfJyArIHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnMpID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9ucykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5k
TmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgICAgIHJlc3VsdF9leHRyYWN0aW9uX25h
bWVzLmFwcGVuZChwYXJhbWV0ZXJfbmFtZSkKIAotICAgICAgICBpZiBub3QgY29tbWFuZC5pc19h
c3luYzoKLSAgICAgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDE6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkg
eycpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0gICAgICAgICAgICBl
bGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9PSAxOgotICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykKLSAgICAgICAgICAgICAg
ICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICAgICAgX3R5
cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5k
IF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5w
cmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51bSgpOgorICAg
ICAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRlcl92
YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9h
cmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgp
JworICAgICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9h
cmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAg
ICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRl
ci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdX
VEZNb3ZlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKKworICAgICAgICAgICAgICAgIHBhcmFtX2Fy
Z3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRv
ci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92YWx1ZSwKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9uX2xpbmVzLmFwcGVuZCgnICAgIGlmICghISUocGFy
YW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRf
Y29udmVyc2lvbl9saW5lcy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUo
a2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlz
KTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICByZXN1bHRfY29udmVyc2lvbl9saW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRl
clZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJh
bWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBpZiAoIXJlc3VsdCkgeycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQVNT
RVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsnKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgfScpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBp
ZiBsZW4ocmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMpID09IDE6CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgYXV0byAlcyA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOycgJSByZXN1
bHRfZXh0cmFjdGlvbl9uYW1lc1swXSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgZWxzZScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsnKQorICAgICAgICAgICAg
ZWxpZiBsZW4ocmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMpID4gMToKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBhdXRvIFslc10gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsnICUg
IiwgIi5qb2luKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSkKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGlu
ZXMuZXh0ZW5kKHJlc3VsdF9jb252ZXJzaW9uX2xpbmVzKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsnKQogCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CmluZGV4IDExOWQyM2MzOGNkZjI0Y2Y1NmQwZmZjNjZkNTdiOGEzZDRl
MmRhNDQuLmJlYWExN2M5ODE1NGI3ZWUyMmUzYjViOTc2ZDAxODM5NDBhNDY5MTMgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTczLDkgKzczLDkgQEAgY2xhc3MgQ3BwRnJvbnRlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGhlYWRlcl9p
bmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAo
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lLCAiJXNQcm90b2NvbE9iamVjdHMuaCIgJSBzZWxm
LnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiV1RGIiwgInd0Zi9KU09OVmFsdWVzLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZh
U2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSkK
KyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYv
T3B0aW9uYWwuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVh
ZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGV2ZW50KToKQEAgLTExNyw4ICsxMTcsMTMgQEAgY2xh
c3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBm
b3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51
bV9uYW1lczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBh
cmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBh
bmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CiAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zv
cl9wYXJhbWV0ZXIocGFyYW1ldGVyLCBldmVudCkpCiAgICAgICAgICAgICAgICAgdXNlZF9lbnVt
X25hbWVzLmFkZChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNjZkYzZlMTg1Y2ZlMmI2MWIxZWNhNzc1NzNj
ZTE2NzRlNmIzNWE0OS4uNzYzZTAxZGZiNzhjZGVjOGQ2MDMwZDJlZGMzNTA1NDg5MTc2OTgwYyAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTMzLDEyICsz
MywxMiBAQCB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9y
CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRl
bXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvciwgdWNmaXJzdAotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlU
eXBlCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFz
ZWRUeXBlLCBFbnVtVHlwZQogZXhjZXB0OgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQg
Q3BwR2VuZXJhdG9yCiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3Bw
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlw
ZSwgQWxpYXNlZFR5cGUsIEVudW1UeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQogCkBAIC03MSw5ICs3MSw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNv
bmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBb
CiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJKYXZhU2NyaXB0
Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIpKSwKLSAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3Ry
aW5nLmgiKSkKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5l
cmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgpAQCAtOTAsMjcgKzg4LDQzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvcm1hbF9wYXJhbWV0
ZXJzID0gW10KIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKIAotICAgICAgICAgICAg
cGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIG5vdCBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3Nf
YnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgcGFy
YW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgX3R5cGUgPSBwYXJh
bWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
OgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoK
KyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAg
ICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBh
cmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90b2Nv
bDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVzcGFj
ZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91
bGRfcmVsZWFzZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfdmFsdWUgKyAnLnJlbGVhc2VO
b25OdWxsKCknCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfZGVyZWZlcmVu
Y2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CiAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCi0gICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX3Zh
bHVlID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykn
ICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAg
ICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRl
ci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1v
dmUoJXMpJyAlIHBhcmFtZXRlcl92YWx1ZQogCiAgICAgICAgICAgICBwYXJhbWV0ZXJfYXJncyA9
IHsKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdw
YXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAg
ICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKICAgICAgICAgICAgICAgICAncGFy
YW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCi0gICAgICAgICAgICAgICAgJ2tleWVkU2V0
TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRl
ci50eXBlKSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3Iu
Y3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFy
YW1ldGVyX2FyZ3MpCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgICAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJO
YW1lKXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoISElKHBhcmFt
ZXRlck5hbWUpcyknICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPiUoa2V5
ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsn
ICUgcGFyYW1ldGVyX2FyZ3MpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRN
ZXRob2QpcygiJShwYXJhbWV0ZXJOYW1lKXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBh
cmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJh
bWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCiAK
LSAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBmb3JtYWxfcGFyYW1l
dGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2ZW50X3Bh
cmFtZXRlcihfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQog
CiAgICAgICAgIGV2ZW50X2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFp
bi5kb21haW5fbmFtZSwKQEAgLTEyMCwxNSArMTM0LDE1IEBAIGNsYXNzIENwcEZyb250ZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzRnJvbnRlbmREaXNwYXRjaGVyOjolKGV2
ZW50TmFtZSlzKCUoZm9ybWFsUGFyYW1ldGVycylzKScgJSBldmVudF9hcmdzKQogICAgICAgICBs
aW5lcy5hcHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiJShkb21h
aW5OYW1lKXMuJShldmVudE5hbWUpcyJfcyk7JyAlIGV2ZW50X2FyZ3MpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiX3Mp
OycgJSBldmVudF9hcmdzKQogCiAgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMp
ID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsnKQogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9hc3NpZ25tZW50
cykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4i
LmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggMDAxOTI0ZGUwZWIwODI3Zjc0NWQz
ZDczNmMwYWI5MjAyMTI0ZGIzNi4uNzgxZDA2ZDk0MDU2NmIxNzJlYzU1YzJlZmJkMTAxYTAwNTBk
NzFhOCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CkBAIC04NSw5ICs4NSwxMCBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0
ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVk
ZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJKYXZh
U2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIikpLAotICAg
ICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9Bc3Nl
cnRpb25zLmgiKSkKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAo
IldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5oIikpLAorICAgICAgICAgICAg
KFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmlu
Zy5oIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVy
YXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV92ZXJzaW9ucyhzZWxmLCBkb21haW5zKToKQEAgLTIzMiw5ICsyMzMsNiBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKLSAgICAgICAg
aWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgotICAgICAgICAgICAg
cmV0dXJuICcnCi0KICAgICAgICAgZW51bV9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGlu
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzXQogICAgICAgICByZXF1aXJl
ZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9t
ZW1iZXJzIGlmIG5vdCBtZW1iZXIuaXNfb3B0aW9uYWxdCiAgICAgICAgIG9wdGlvbmFsX21lbWJl
cnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMg
aWYgbWVtYmVyLmlzX29wdGlvbmFsXQpAQCAtMjQ2LDExICsyNDQsMTIgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBiYXNlX2Ns
YXNzID0gJ0pTT046Ok9iamVjdCcKICAgICAgICAgaWYgbm90IEdlbmVyYXRvci50eXBlX2hhc19v
cGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgogICAgICAgICAgICAgYmFzZV9jbGFz
cyA9IGJhc2VfY2xhc3MgKyAnQmFzZScKLSAgICAgICAgbGluZXMuYXBwZW5kKCdjbGFzcyAlcyA6
IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9jbGFzcykpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnY2xhc3MgJXMgZmluYWwgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJh
c2VfY2xhc3MpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1YmxpYzonKQogICAgICAgICBmb3Ig
ZW51bV9tZW1iZXIgaW4gZW51bV9tZW1iZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJhdGluZyAl
cy4nICUgKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9t
ZW1iZXIoZW51bV9tZW1iZXIpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5cGVfZGVj
bGFyYXRpb24pKQogCiAgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUgPSBbXQpAQCAtMjc3LDcg
KzI3Niw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5vcGVuX2ZpZWxkcyh0
eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIG9wZW5fbWVt
YmVyczoKICAgICAgICAgICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0gICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1
Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0IGNoYXIqICVzS2V5OycgJSAoZXhwb3J0X21hY3Jv
LCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCd9Oycp
CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVf
ZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpAQCAtMzI4LDQ3ICszMjcs
NTYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9i
dWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAg
ICAgICBtZW1iZXJfbmFtZSA9ICdpbl8nICsgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUKKworICAg
ICAgICBtZW1iZXJfdmFsdWUgPSBtZW1iZXJfbmFtZQorICAgICAgICBpZiB0eXBlX21lbWJlci50
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgIG1lbWJlcl92YWx1ZSA9ICdQcm90b2NvbDo6JXM6
OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLCBt
ZW1iZXJfdmFsdWUpCisgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KHR5cGVfbWVtYmVyLnR5cGUsIEZhbHNlKToKKyAgICAgICAgICAgIG1lbWJlcl92YWx1ZSA9
ICdXVEZNb3ZlKCVzKScgJSBtZW1iZXJfdmFsdWUKKwogICAgICAgICBzZXR0ZXJfYXJncyA9IHsK
ICAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
KSwKLSAgICAgICAgICAgICdrZXllZFNldCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhv
ZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKLSAgICAgICAgICAgICduYW1lJzogdHlwZV9t
ZW1iZXIubWVtYmVyX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIpLAotICAgICAgICAgICAg
J2hlbHBlcnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAg
ICAnc2V0dGVyJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHR5cGVf
bWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KHR5cGVfbWVtYmVyLnR5cGUsIHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdtZW1iZXJLZXknOiB0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdtZW1iZXJOYW1lJzogbWVtYmVyX25hbWUsCisgICAg
ICAgICAgICAnbWVtYmVyVmFsdWUnOiBtZW1iZXJfdmFsdWUsCiAgICAgICAgIH0KIAogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlKGNhbWVsTmFtZSlzU2V0PiYgc2V0JShjYW1l
bE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5hbWUpc1NldD4m
IHNldCUoY2FtZWxOYW1lKXMoJShtZW1iZXJUeXBlKXMgJShtZW1iZXJOYW1lKXMpJyAlIHNldHRl
cl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgeycpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICUoY2FtZWxOYW1l
KXNTZXQpLCBwcm9wZXJ0eV8lKG5hbWUpc19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQot
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShrZXllZFNldClz
KCIlKG5hbWUpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6
OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShr
ZXllZFNldClzKCIlKG5hbWUpcyJfcywgdmFsdWUpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJShjYW1l
bE5hbWUpc1NldCksIHByb3BlcnR5XyUobWVtYmVyS2V5KXNfYWxyZWFkeV9zZXQpOycgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShz
ZXR0ZXIpcygiJShtZW1iZXJLZXkpcyJfcywgJShtZW1iZXJWYWx1ZSlzKTsnICUgc2V0dGVyX2Fy
Z3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwl
KGNhbWVsTmFtZSlzU2V0PigpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIH0nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIs
IGRvbWFpbik6CisgICAgICAgIG1lbWJlcl9uYW1lID0gJ2luX29wdF8nICsgdHlwZV9tZW1iZXIu
bWVtYmVyX25hbWUKKworICAgICAgICBtZW1iZXJfdmFsdWUgPSBtZW1iZXJfbmFtZQorICAgICAg
ICBpZiB0eXBlX21lbWJlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgIG1lbWJlcl92YWx1
ZSA9ICdQcm90b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxw
ZXJzX25hbWVzcGFjZSgpLCBtZW1iZXJfdmFsdWUpCisgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9y
LnNob3VsZF9tb3ZlX2FyZ3VtZW50KHR5cGVfbWVtYmVyLnR5cGUsIEZhbHNlKToKKyAgICAgICAg
ICAgIG1lbWJlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBtZW1iZXJfdmFsdWUKKwogICAgICAg
ICBzZXR0ZXJfYXJncyA9IHsKICAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVf
bWVtYmVyLm1lbWJlcl9uYW1lKSwKLSAgICAgICAgICAgICdrZXllZFNldCc6IENwcEdlbmVyYXRv
ci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKLSAgICAgICAg
ICAgICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCi0gICAgICAgICAgICAncGFyYW1l
dGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1i
ZXIpLAotICAgICAgICAgICAgJ2hlbHBlcnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNw
YWNlKCksCisgICAgICAgICAgICAnc2V0dGVyJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ21lbWJlcktleSc6
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJlck5hbWUnOiBtZW1i
ZXJfbmFtZSwKKyAgICAgICAgICAgICdtZW1iZXJWYWx1ZSc6IG1lbWJlcl92YWx1ZSwKKyAgICAg
ICAgICAgICdtZW1iZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJl
cl9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCiAg
ICAgICAgIH0KIAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdm9pZCBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1l
dGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgdm9pZCBzZXQlKGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVtYmVyTmFtZSlzKScg
JSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgeycpCi0gICAgICAgIGlm
IGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1l
KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUoaGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAgZWxpZiBDcHBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUp
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUo
a2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIFdURk1vdmUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6JShrZXllZFNldClzKCIlKG5hbWUpcyJfcywgdmFsdWUpOycgJSBzZXR0ZXJf
YXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUo
c2V0dGVyKXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFsdWUpcyk7JyAlIHNldHRlcl9h
cmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIApAQCAtMzgxLDEzICszODksMTMgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBl
c0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZGVjbGFyYXRpb25z
X3RvX2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2Vs
Zi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICAgICAg
Zm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgotICAgICAg
ICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
czoKLSAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBF
bnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQo
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25k
aXRpb24sIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlw
ZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKSwgRmFsc2UpKQotCiAgICAgICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAg
ICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5j
cHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSwgR2VuZXJh
dG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSkKIAor
ICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50
eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5h
cHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlv
bi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bSh0eXBlX21lbWJlci50
eXBlLCAnJXM6OiVzJyAlICh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSkpKSksIEZhbHNlKSkKKwogICAgICAgICBzdHJ1Y3Rfa2V5d29y
ZHMgPSBbJ3N0cnVjdCddCiAgICAgICAgIGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9p
ZCddCiAgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygnZXhwb3J0X21hY3JvJywgTm9uZSkKQEAgLTM5OSw3ICs0MDcsNyBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBhcmd1
bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxh
dGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMp
LCBhcmd1bWVudFswXSkpCiAgICAgICAgICAgICBpZiBhcmd1bWVudFsxXToKLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnc3RhdGljIFJlZjwlcz4gcnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYm
IHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7JyAlICcgJy5qb2luKGZ1bmN0
aW9uX2tleXdvcmRzKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpAQCAtNDM4LDEzICs0NDYsMTMgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZG9t
YWluX2xpbmVzID0gW10KICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEVudW1z
IGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBm
b3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICAgICAgY3BwX3Byb3RvY29s
X3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBl
KQorICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9lbnVtKGVudW1fdHlwZSwgZW51bV90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGVudW1fdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ3RlbXBsYXRlPD5cbiVzIHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlw
ZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBl
KSkpCiAKICAgICAgICAgICAgIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CiAgICAg
ICAgICAgICAgICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgICAgICBmb3IgZW51bV9t
ZW1iZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255bW91c19lbnVtX3R5cGUsIG9iamVj
dF90eXBlLm1lbWJlcnMpOgotICAgICAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9
IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1i
ZXIsIG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIGNwcF9w
cm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fbWVtYmVy
LnR5cGUsICclczo6JXMnICUgKG9iamVjdF90eXBlLnJhd19uYW1lKCksIHVjZmlyc3QoZW51bV9t
ZW1iZXIubWVtYmVyX25hbWUpKSkKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVzLmFw
cGVuZCgndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBT
dHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90
eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAgICAgICAgICAgIGlmIGxlbihvYmplY3Rf
bGluZXMpOgogICAgICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25k
aXRpb24sICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQppbmRleCA1ZGQ1MzQ2OTQ0ODU1MTU0OGQ2N2FhMGI0NTZjNmExYTY2NThkNTkzLi4x
M2U1ODk3MjZkNGNkYjdhNDUyYzY3MGM4MzI1ZWIxYTM5ZWU2MjIyIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVz
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC04MiwxMCArODIsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2Vu
ZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2lu
Y2x1ZGVzID0gWwotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgi
V1RGIiwgInd0Zi9PcHRpb25hbC5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L0NTdHJpbmcuaCIpKSwKKyAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvQXNzZXJ0aW9ucy5o
IikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRl
X2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9lbnVtX21hcHBpbmcoc2VsZik6CkBAIC0xNDQsMTQgKzE0MiwxNCBAQCBjbGFzcyBDcHBQ
cm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMn
IERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4g
ZW51bV90eXBlczoKLSAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlwZSkKKyAgICAgICAgICAgIGNwcF9w
cm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fdHlwZSwg
ZW51bV90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihl
bnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sIGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0
aG9kX2JvZHkoZW51bV90eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgIGZvciBv
YmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CiAgICAgICAgICAgICBvYmplY3RfbGluZXMgPSBb
XQogICAgICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19h
bm9ueW1vdXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAg
ICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkpCisgICAg
ICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2VudW0oZW51bV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAob2JqZWN0X3R5cGUucmF3X25hbWUo
KSwgdWNmaXJzdChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSkpKQogICAgICAgICAgICAgICAgIG9i
amVjdF9saW5lcy5hcHBlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX21l
bWJlci50eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCiAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0
X2xpbmVzKToKICAgICAgICAgICAgICAgICBpZiBsZW4obGluZXMpOgpAQCAtMTgzLDggKzE4MSw3
IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gW2RlY2wgZm9yIGRl
Y2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRz
KGRlY2wudHlwZSldOgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5v
cGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1l
bWJlcl9uYW1lKToKLSAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihb
J0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUp
XSkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnY29uc3QgY2hhciog
JXMgPSAiJXMiOycgJSAoZmllbGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorICAg
ICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiBQcm90b2Nv
bDo6JXM6OiVzOjolc0tleSA9ICIlcyI7JyAlIChkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3Qo
dHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUpLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwgdHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKQogICAgICAgICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcyk6
CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogCkBA
IC0yMjcsMzcgKzIyNCw1NCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmlu
ZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2
YWx1ZSknICUgKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShvYmplY3Rf
ZGVjbGFyYXRpb24udHlwZSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoIiIieworICAgIEFTU0VS
VF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9B
UkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAg
Ym9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJU
X1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIpCisgICAgYXV0byBvYmpl
Y3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQob2JqZWN0KTsiIiIpCiAgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbWVtYmVy
X3R5cGUgPSB0eXBlX21lbWJlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJl
cl90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBtZW1i
ZXJfdHlwZS5hbGlhc2VkX3R5cGUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJf
dHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl9lbnVtKG1lbWJlcl90eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfZGVj
bGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlcl90eXBlKQorCiAgICAgICAgICAg
ICBhcmdzID0gewogICAgICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVt
YmVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IENwcEdlbmVyYXRvci5j
cHBfYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9k
ZWNsYXJhdGlvbikKKyAgICAgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IG1lbWJlcl90eXBlCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgewogICAgICAg
ICBhdXRvICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKCIlKG1lbWJlck5hbWUpcyJf
cyk7CiAgICAgICAgIEFTU0VSVCglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsK
LSAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkp
OworICAgICAgICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9IiIiICUg
YXJncykKIAogICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGludCBmb3Vu
ZFByb3BlcnRpZXNDb3VudCA9ICVzOycgJSBsZW4ocmVxdWlyZWRfbWVtYmVycykpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBzaXplX3QgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsn
ICUgbGVuKHJlcXVpcmVkX21lbWJlcnMpKQogCiAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBv
cHRpb25hbF9tZW1iZXJzOgorICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSB0eXBlX21lbWJlci50
eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlcl90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBtZW1iZXJfdHlwZS5hbGlhc2VkX3R5cGUK
KworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgRW51bVR5cGUpOgorICAg
ICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVt
KG1lbWJlcl90eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1
Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKG1lbWJlcl90eXBlKQorCiAgICAgICAgICAgICBhcmdzID0gewogICAgICAgICAg
ICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCi0gICAgICAgICAg
ICAgICAgJ2Fzc2VydE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAg
ICAgICAgICAnbWVtYmVyVHlwZSc6IG1lbWJlcl90eXBlCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgewogICAgICAgICBhdXRvICUobWVtYmVyTmFtZSlz
UG9zID0gb2JqZWN0LT5maW5kKCIlKG1lbWJlck5hbWUpcyJfcyk7CiAgICAgICAgIGlmICglKG1l
bWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICAlKGFzc2VydE1l
dGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7IiIiICUgYXJncykKKyAgICAg
ICAgICAgIEJpbmRpbmdUcmFpdHM8JShtZW1iZXJUeXBlKXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZSglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUucHRyKCkpOyIiIiAlIGFyZ3MpCiAKICAg
ICAgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsnKQpAQCAtMjY3
LDI3ICsyODEsMjIgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9
IG9iamVjdC0+c2l6ZSgpKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgRkFU
QUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXFxuIiwgb2JqZWN0LT50b0pT
T05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQg
JXMoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9yLmNwcF90eXBl
X2Zvcl9lbnVtKGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9iamVjdF9kZWNsYXJhdGlv
bi50eXBlX25hbWUsIHVjZmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVF9VTlVT
RUQodmFsdWUsIHZhbHVlKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiBBU1NFUlRfRU5B
QkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVl
KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcgcmVzdWx0OycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhy
ZXN1bHQpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChjYXN0U3VjY2VlZGVk
KTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHJlc3VsdCA9IHZhbHVlLT5hc1N0
cmluZygpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChyZXN1bHQpOycpCiAK
ICAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcgfHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyIn
ICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFs
dWVzKCldKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRf
Y29uZGl0aW9uKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbHNlIC8vIEFTU0VSVF9FTkFCTEVE
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRCcpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnI2VuZGlmJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKIAogICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4
IDNlMTM5NzRhYjM2MjEzZGE3OGI3MmNhMjMyZTc3ZTFhOTk0YzU1ZjcuLjk2YjZiNjEyNmRjN2Vk
ODEzMmMzZjJlMjM1ZGUzZjcwMWRjZjg5MTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
QEAgLTMzLDEzICszMywxMyBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIHRyeToKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5nZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRnJhbWV3b3Jr
cworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdv
cmtzCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBm
cm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgT2JqQ1RlbXBsYXRlcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBjcHBfZ2Vu
ZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IEZyYW1ld29ya3MKKyAgICBmcm9tIG1vZGVs
cyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiAgICAgZnJvbSBvYmpj
X2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogICAgIGZyb20gb2JqY19nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMK
IApAQCAtMTAzLDkgKzEwMywxOSBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxl
cl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCi0gICAgICAgIGZv
ciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBwcm90b2NvbF9jYWxsSWQn
XQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAg
ICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAg
ICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFy
YW1ldGVyKHBhcmFtZXRlcl90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJf
bmFtZSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2NvbW1hbmRO
YW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CmluZGV4IGY1ZWU4ZTU4Mzk4ZDY5YmFlNGJlYjRjMTg2NzA2M2NjZDUyMjA5
ZWMuLjFiZDk2MzViZDMyNTE5OTE1MWNmZDk4MDEzYTUxMjcyODk4OGQxYjkgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC05MCw5ICs5MCwyMCBAQCBjbGFz
cyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29t
bWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IHBhcmFtZXRlcnMgPSBbJ2xvbmcgcmVxdWVzdElkJ10KKyAgICAgICAgcGFyYW1ldGVycyA9IFsn
bG9uZyBwcm90b2NvbF9jYWxsSWQnXQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQu
Y2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzIGluXyVz
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1l
dGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBw
YXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAn
b3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5f
JyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyAl
cycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0
ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAg
ICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLApAQCAtMTE1LDQ1ICsxMjYsNTQgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGlmIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBzdWNjZXNzX2Jsb2NrX3BhcmFt
ZXRlcnMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9w
YXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9u
YW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1f
bmFtZQogICAgICAgICAgICAgICAgIG9iamNfdHlwZSA9IHNlbGYub2JqY190eXBlX2Zvcl9wYXJh
bShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCi0gICAgICAgICAgICAg
ICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVy
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBzdWNjZXNzX2Jsb2Nr
X3BhcmFtZXRlcnMuYXBwZW5kKGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIHZhcl9uYW1l
KSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMuYXBwZW5kKGpvaW5f
dHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIG91dF9wYXJhbV9uYW1lKSkKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oJXMpIHsnICUgJywgJy5qb2lu
KHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycykpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeycpCiAKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgIGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotCiAgICAgICAgICAgICByZXF1aXJl
ZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVycyBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpD
R2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAg
ICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2Jq
Y19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAg
b3V0X3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJh
bV9uYW1lID0gJ29wdF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFy
YW1fbmFtZSA9ICdvdXRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKCVz
LCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFtZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkK
ICAgICAgICAgICAgICAgICBvYmpjX2FycmF5X2NsYXNzID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl9h
cnJheV90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlf
Y2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Muc3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkp
OgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwg
b2JqY19hcnJheV9jbGFzcykpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKCVzLCBbJXMgY2xhc3Nd
KTsnICUgKG91dF9wYXJhbV9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAg
b3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBP
YmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQog
ICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6
Ci0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9f
b2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorICAgICAgICAg
ICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAg
b3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKG91dF9wYXJhbV9uYW1lLCBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQogICAgICAgICAgICAgICAgIG9iamNfYXJyYXlfY2xhc3MgPSBzZWxmLm9iamNf
Y2xhc3NfZm9yX2FycmF5X3R5cGUocGFyYW1ldGVyLnR5cGUpCiAgICAgICAgICAgICAgICAgaWYg
b2JqY19hcnJheV9jbGFzcyBhbmQgb2JqY19hcnJheV9jbGFzcy5zdGFydHN3aXRoKHNlbGYub2Jq
Y19wcmVmaXgoKSk6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xh
c3NdKTsnICUgKHZhcl9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKKyAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5f
T1BUSU9OQUxfQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAob3V0X3BhcmFtX25hbWUsIG9iamNf
YXJyYXlfY2xhc3MpKQogCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ29wdF8nICsgb3V0X3Bh
cmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvdXRfJyArIG91dF9w
YXJhbV9uYW1lCiAgICAgICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhvZCA9IENwcEdlbmVyYXRv
ci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSkKLSAgICAgICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIHZhcl9leHByZXNz
aW9uID0gJyolcycgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJf
bmFtZQorICAgICAgICAgICAgICAgIHZhcl9leHByZXNzaW9uID0gJyolcycgJSBvdXRfcGFyYW1f
bmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBvdXRfcGFyYW1fbmFtZQogICAgICAg
ICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpjX3Byb3RvY29sX2V4cG9ydF9l
eHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgdmFyX2V4cHJlc3Npb24pCiAg
ICAgICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoIiVzIl9zLCAl
cyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9y
dF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRo
b2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQogICAgICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICBpZiAoJXMpJyAlIHZhcl9uYW1lKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRf
bWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsnKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsnKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgaWYg
KCEhJXMpJyAlIG91dF9wYXJhbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT4lcygiJXMiX3MsICVzKTsnICUg
KGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJl
c3Npb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKICAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKQEAgLTE2NiwxNyArMTg2LDI3IEBAIGNsYXNzIE9i
akNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogICAgICAgICBkZWYgaW5fcGFyYW1fZXhwcmVzc2lvbihwYXJhbV9uYW1lLCBwYXJhbWV0ZXIp
OgogICAgICAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQogICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgICAgIF90eXBlID0gX3R5
cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2ZS4KKyAg
ICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQogICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KLSAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgICAg
IGlmIF90eXBlLnJhd19uYW1lKCkgaW4gWydhcnJheScsICdhbnknLCAnb2JqZWN0J106Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAnJiVzJyAlIHBhcmFtX25hbWUgaWYgbm90IHBhcmFtZXRl
ci5pc19vcHRpb25hbCBlbHNlIHBhcmFtX25hbWUKLSAgICAgICAgICAgICAgICByZXR1cm4gJyol
cycgJSBwYXJhbV9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHBhcmFtX25hbWUK
LSAgICAgICAgICAgIHJldHVybiAnJiVzJyAlIHBhcmFtX25hbWUgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBlbHNlIHBhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBl
LnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtX25hbWUgPSAnKicgKyBwYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuICdQ
cm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIHBhcmFtX25hbWUK
KyAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVudChfdHlw
ZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1f
bmFtZSArICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgcmV0dXJuICcqJyArIHBhcmFtX25hbWUKKyAgICAgICAgICAgIGlm
IENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1dURk1vdmUoJXMpJyAlIHBhcmFtX25h
bWUKKyAgICAgICAgICAgIHJldHVybiBwYXJhbV9uYW1lCiAKICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGluX3BhcmFtX25hbWUg
PSAnaW5fJXMnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpbl9wYXJh
bV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdvcHRfJyAr
IGluX3BhcmFtX25hbWUKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJyArIGluX3Bh
cmFtX25hbWUKICAgICAgICAgICAgIG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVzJyAlIGluX3Bh
cmFtX25hbWUKICAgICAgICAgICAgIG9iamNfdHlwZSA9IHNlbGYub2JqY190eXBlX2Zvcl9wYXJh
bShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIsIEZhbHNlKQogICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgpAQCAtMTk0LDEx
ICsyMjQsOCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAlczsnICUgam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwg
b2JqY19pbl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBp
ZiAoJXMpJyAlIGluX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgaWYgKCEhJXMpJyAlIGluX3BhcmFtX25hbWUpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgICVzID0gJXM7JyAlIChvYmpjX2luX3BhcmFtX25hbWUsIGltcG9ydF9leHBy
ZXNzaW9uKSkKLQotICAgICAgICBpZiBsaW5lczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVf
aW52b2NhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgpAQCAtMjA2LDcg
KzIzMywxMCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgcGFpcnMuYXBwZW5kKCdXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrJykKICAgICAgICAgcGFpcnMuYXBwZW5kKCdzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrJykKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJXMnICUgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdvcHRfJyArIGluX3BhcmFtX25hbWUK
KyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJyArIGluX3BhcmFtX25hbWUKICAgICAg
ICAgICAgIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbiA9ICdvXyVzJyAlIGluX3BhcmFtX25hbWUK
ICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgpAQCAtMjE3LDYgKzI0
Nyw2IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9leHBy
ZXNzaW9uID0gJyVzLnZhbHVlKCknICUgb2JqY19pbl9wYXJhbV9leHByZXNzaW9uCiAKLSAgICAg
ICAgICAgICAgICBvcHRpb25hbF9leHByZXNzaW9uID0gJyglcyA/ICYlcyA6IG5pbCknICUgKGlu
X3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICBv
cHRpb25hbF9leHByZXNzaW9uID0gJyghISVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFt
ZSwgb2JqY19pbl9wYXJhbV9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVu
ZCgnJXM6JXMnICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgb3B0aW9uYWxfZXhwcmVzc2lv
bikpCiAgICAgICAgIHJldHVybiAnICAgIFttX2RlbGVnYXRlICVzJXNdOycgJSAoY29tbWFuZC5j
b21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQppbmRleCBkZGRiMjdhODhjMmJhZmY1ZmM2ZjI3YmM0M2EwMWUzMWVh
OWNkNDlkLi44ZDQxOTM4MTIzZjkwNmZiZjA5MWUyYWI3YjM2YTYwNzMzZGIzOTUyIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMjUsMTEgKzEyNSwx
MSBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyBv
ciBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCiAKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIiVzLiVzIl9zKTsnICUgKGRv
bWFpbi5kb21haW5fbmFtZSwgZXZlbnQuZXZlbnRfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIiVzLiVzIl9zKTsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZXZl
bnQuZXZlbnRfbmFtZSkpCiAgICAgICAgIGlmIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAg
ICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMo
ZG9tYWluLCBldmVudCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGlu
ZXMpKQogCkBAIC0xNDUsMTYgKzE0NSwxNiBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVy
YXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgogICAgICAgICBs
aW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoK
ICAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9t
ZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpCiAgICAgICAgICAgICB2YXJfbmFtZSA9IHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZQogICAgICAgICAgICAgc2FmZV92YXJfbmFtZSA9ICcoKiVz
KScgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJfbmFtZQogICAg
ICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24gPSBzZWxmLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4
cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBzYWZlX3Zhcl9uYW1lKQogICAg
ICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRf
c2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikp
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBwYXJhbXNPYmpl
Y3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3Qp
KTsnKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogICAgICAgICByZXR1cm4gbGluZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvci5weQppbmRleCA5NGQxOGQ5ZDY2MTk0ZDE1ODVjMGUxMGMwNDk0YmI0YjFh
MTNiOTU1Li4yOWEyZGVhNzI0ZjBiYmVjZmViYTZkYjkyMDYwODE3MDFlNTEwYzUxIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC03Myw5ICs3Myw2IEBAIF9UWVBFU19ORUVESU5HX1JVTlRJ
TUVfQ0FTVFMgPSBzZXQoWwogICAgICJSdW50aW1lLkNvbGxlY3Rpb25FbnRyeSIsCiAgICAgIkRl
YnVnZ2VyLkZ1bmN0aW9uRGV0YWlscyIsCiAgICAgIkRlYnVnZ2VyLkNhbGxGcmFtZSIsCi0gICAg
IkNhbnZhcy5UcmFjZUxvZyIsCi0gICAgIkNhbnZhcy5SZXNvdXJjZUluZm8iLAotICAgICJDYW52
YXMuUmVzb3VyY2VTdGF0ZSIsCiAgICAgIyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBoYWNr
LiBUaW1lbGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQSS4K
ICAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3Nl
cyBvbmx5LgpAQCAtODUsMTAgKzgyLDE5IEBAIF9UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFMg
PSBzZXQoWwogIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYSBwcm9wZXJ0
eSBpbiBKU09OLgogX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMgPSB7CiAgICAgIlRpbWVsaW5lLlRp
bWVsaW5lRXZlbnQiOiBbXSwKLSAgICAjIEluc3BlY3RvclN0eWxlU2hlZXQgbm90IG9ubHkgY3Jl
YXRlcyB0aGlzIHByb3BlcnR5IGJ1dCB3YW50cyB0byByZWFkIGl0IGFuZCBtb2RpZnkgaXQuCi0g
ICAgIkNTUy5DU1NQcm9wZXJ0eSI6IFtdLAotICAgICMgSW5zcGVjdG9yTmV0d29ya0FnZW50IG5l
ZWRzIHRvIHVwZGF0ZSBtaW1lLXR5cGUuCi0gICAgIk5ldHdvcmsuUmVzcG9uc2UiOiBbIm1pbWVU
eXBlIl0sCisgICAgIkNTUy5DU1NQcm9wZXJ0eSI6IFsicHJpb3JpdHkiLCAicGFyc2VkT2siLCAi
c3RhdHVzIl0sCisgICAgIkRPTS5IaWdobGlnaHRDb25maWciOiBbXSwKKyAgICAiRE9NLlJHQkFD
b2xvciI6IFtdLAorICAgICJET01TdG9yYWdlLlN0b3JhZ2VJZCI6IFtdLAorICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50QWN0aW9uIjogW10sCisgICAgIkRlYnVnZ2VyLkJyZWFrcG9pbnRPcHRpb25z
IjogW10sCisgICAgIkRlYnVnZ2VyLkxvY2F0aW9uIjogW10sCisgICAgIkluZGV4ZWREQi5LZXki
OiBbXSwKKyAgICAiSW5kZXhlZERCLktleVJhbmdlIjogW10sCisgICAgIk5ldHdvcmsuUmVzcG9u
c2UiOiBbInN0YXR1cyIsICJzdGF0dXNUZXh0IiwgIm1pbWVUeXBlIiwgInNvdXJjZSJdLAorICAg
ICJQYWdlLkNvb2tpZSI6IFtdLAorICAgICJSdW50aW1lLkNhbGxBcmd1bWVudCI6IFsib2JqZWN0
SWQiXSwKKyAgICAiUnVudGltZS5UeXBlTG9jYXRpb24iOiBbXSwKICAgICAjIEZvciB0ZXN0aW5n
IHB1cnBvc2VzIG9ubHkuCiAgICAgIlRlc3QuT3BlblBhcmFtZXRlcnMiOiBbImFscGhhIl0sCiB9
CkBAIC0xMzQsNyArMTQwLDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgaWYgc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5uYW1lIG5vdCBpbiBhbGxvd2VkX2ZyYW1ld29ya3M6CiAgICAg
ICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUgPT0g
IldURiI6CisgICAgICAgICAgICBpZiBmcmFtZXdvcmtfbmFtZSA9PSAiV1RGIiBvciBmcmFtZXdv
cmtfbmFtZSA9PSAic3RkIjoKICAgICAgICAgICAgICAgICBpbmNsdWRlcy5hZGQoIiNpbmNsdWRl
IDwlcz4iICUgaGVhZGVyX3BhdGgpCiAgICAgICAgICAgICBlbGlmIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsubmFtZSAhPSBmcmFtZXdvcmtfbmFtZToKICAgICAgICAgICAgICAgICBpbmNsdWRlcy5h
ZGQoIiNpbmNsdWRlIDwlcy8lcz4iICUgKGZyYW1ld29ya19uYW1lLCBvcy5wYXRoLmJhc2VuYW1l
KGhlYWRlcl9wYXRoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CmluZGV4IDcz
MTUzYjk1NDY2NzJiOTkwNGU3ZjVlYjkxODg2NWZjOGE1MTY4YjYuLmEyZDM3NmRmM2I5NDNkZGM5
MTY3OGJiYmE1YTJlZDNmMDJlMzcwYzAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9y
LnB5CkBAIC0yNjMsNyArMjYzLDcgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihHZW5lcmF0b3IpOgog
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKICAgICAgICAgICAgIHJl
dHVybiBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZl
X3R5cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAg
ICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFt
ZSwgX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSkpOgogICAgICAgICAgICAgc3ViX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5
cGVfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQogICAgICAgICAgICAgcmV0dXJuICdKU09O
OjpBcnJheU9mPCVzPicgJSBzdWJfdHlwZQpAQCAtMzUzLDggKzM1Myw2IEBAIGNsYXNzIE9iakNH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfdHlwZV9mb3JfcmF3X25h
bWUoX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRl
cihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQogICAgICAgICAgICAg
cmV0dXJuIHNlbGYub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShfdHlwZSkK
ICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAg
IHJldHVybiBzZWxmLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkgKyAnIConCkBAIC0zOTgsOCAr
Mzk2LDYgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgZGVmIG9iamNf
cHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcihzZWxmLCBuYW1lLCBkb21h
aW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKICAgICAgICAgaWYgaXNpbnN0
YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29s
U3RyaW5nPCVzPiglcyknICUgKHNlbGYub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVt
X3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgbmFt
ZSkKICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKHNl
bGYub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShwYXJhbWV0ZXIudHlwZSks
IG5hbWUpCiAgICAgICAgIHJldHVybiBzZWxmLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Np
b25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBuYW1lKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5kZXggMzI2YzI2MjVlYTM0ZjA2
NmIyZDRjYzk4NDZlMTRhMjM0MWI4MTg4MS4uYjU2ZDE0ODE5NWM0YjY1ZmZkMjQzYTk5MTBhYWQz
NjMzM2EwODUyZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weQpAQCAtMTE0LDEzICsxMTQsMTMgQEAgcHJpdmF0ZToKICAgICAiIiJ2b2lkIE9i
akNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiR7Y29tbWFuZE5hbWV9
KCR7cGFyYW1ldGVyc30pCiB7CiAgICAgaWYgKCEke3Jlc3BvbmRzVG9TZWxlY3Rvcn0pIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiR7Y29t
bWFuZE5hbWV9JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiR7Y29tbWFuZE5hbWV9JyB3YXMgbm90
IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZW51bS12YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCmluZGV4IGNkYWQ2MWRmN2M5ZjljNzZlNjky
ODk3YzNkZmUwYjA4MjNmOTBlNGQuLjI4MTU2MWI5NDhlMTlhNDFmYTBhMmM4MGVjZjJlMDlhZjNh
OGJjNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCkBAIC0zLDkgKzMsOSBAQAogICAg
ICJkb21haW4iOiAiVHlwZURvbWFpbiIsCiAgICAgInR5cGVzIjogWwogICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAorICAgICAgICAgICAgImlkIjogIkVudW0i
LAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJz
aGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICAgICAgImVudW0iOiBbInNo
YXJlZCIsICIxIiwgIjIiXQogICAgICAgICB9CiAgICAgXQogfSwKQEAgLTEzLDEwICsxMywxOCBA
QAogICAgICJkb21haW4iOiAiQ29tbWFuZERvbWFpbiIsCiAgICAgImNvbW1hbmRzIjogWwogICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIs
Ci0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFtdLAorICAgICAgICAgICAgIm5hbWUiOiAiY29t
bWFuZCIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVudW1SZXF1aXJlZCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4u
RW51bSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
cmFtZXRlclJlcXVpcmVkIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJz
aGFyZWRSZXF1aXJlZCIsICJibGFjayJdIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXJhbWV0ZXJPcHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAi
c2hhcmVkT3B0aW9uYWwiLCAicmVkIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVt
UmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5SZXF1aXJl
ZCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVxdWlyZWQi
LCAid2hpdGUiXSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuT3B0aW9uYWwi
LCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwg
ImJsdWUiXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0KICAg
ICBdCkBAIC0yNSw5ICszMywxMiBAQAogICAgICJkb21haW4iOiAiRXZlbnREb21haW4iLAogICAg
ICJldmVudHMiOiBbCiAgICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXIiLAorICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnQiLAogICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURv
bWFpbi5FbnVtIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwg
IiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZFJlcXVpcmVkIiwgImdyZXkiXSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgImdyZWVuIl0sICJvcHRpb25hbCI6
IHRydWUgfQogICAgICAgICAgICAgXQogICAgICAgICB9CiAgICAgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdAppbmRleCBlOWMxOGJmYWU1YjMyYzk1N2JiZWFkNGUwZWI5ZDA2YjYzOThiMDYzLi4zMmQ0
YThlODExNDYwMWVmZDY2ZWY5ODc5YmRjYTZjZmZlNzBiYzg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJE
b21haW4iLCBbInBhZ2UiXSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6
CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgot
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0x
NTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9j
YWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9p
ZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBA
QCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9z
LCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3Rv
Y29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
czsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAg
YXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJw
YXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29t
bWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJv
cik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBE
b21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wg
ewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
IAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIp
IHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7
CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2Nv
bF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6
Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzcz
LDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwor
ICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQKaW5kZXggZDFjNjliMDMxY2RiNDcxZDE4YTJlNDk3OGYyMTI3YjBlY2Q0N2M1Mi4uNGNl
NmZjM2QyMTM2YTRlYjRhYjIyNDY1MWE5YmZiMTY1ZTQ1MzBmNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtNzMsNyArNzMsNyBAQCBJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTkxLDEwICs5MSwxMCBAQCBwcml2
YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTEzNiwxMSArMTM2LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3Mg
QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0OCwyNyArMTUxLDIwIEBA
IGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRl
ciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgotICAgIGVudW0gY2xhc3MgUHJpbnRD
b2xvciB7Ci0gICAgICAgIEN5YW4gPSAzLAotICAgICAgICBNYWdlbnRhID0gNCwKLSAgICAgICAg
WWVsbG93ID0gNSwKLSAgICAgICAgQmxhY2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xhc3MgUHJp
bnRDb2xvcgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBP
cHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0
X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlv
bmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikg
PSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBvcHRfY29sdW1uTmFtZXMgKi8sIFN0cmluZyAv
KiBvcHRfbm90ZXMgKi8sIE9wdGlvbmFsPGRvdWJsZT4gLyogb3B0X3RpbWVzdGFtcCAqLywgUmVm
UHRyPEpTT046Ok9iamVjdD4gLyogb3B0X3ZhbHVlcyAqLywgUmVmUHRyPEpTT046OlZhbHVlPiAv
KiBvcHRfcGF5bG9hZCAqLywgT3B0aW9uYWw8aW50PiAvKiBvcHRfZGF0YWJhc2VJZCAqLywgUmVm
UHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIG9wdF9zcWxFcnJvciAqLywgT3B0aW9u
YWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiAvKiBvcHRfc2NyZWVuQ29sb3Ig
Ki8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gLyogb3B0X2FsdGVybmF0
ZUNvbG9ycyAqLywgU3RyaW5nIC8qIG9wdF9wcmludENvbG9yICovPj4gZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkg
PSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxT
dHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09O
OjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9u
YWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAg
ICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIG9w
dF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4m
JiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0
cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFz
ZUlkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRfc3FsRXJyb3IsIE9w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4mJiBvcHRfc2NyZWVuQ29s
b3IsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBvcHRfYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKTsKICAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5O
YW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2Jq
ZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRf
c3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBkYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjaz4mJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3Rk
Ojp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBjb2x1bW5OYW1lcyAqLywgU3Ry
aW5nIC8qIG5vdGVzICovLCBkb3VibGUgLyogdGltZXN0YW1wICovLCBSZWY8SlNPTjo6T2JqZWN0
PiAvKiB2YWx1ZXMgKi8sIFJlZjxKU09OOjpWYWx1ZT4gLyogcGF5bG9hZCAqLywgaW50IC8qIGRh
dGFiYXNlSWQgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBzcWxFcnJvciAq
LywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBhbHRlcm5hdGVDb2xvcnMg
Ki8sIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyAvKiBzY3JlZW5Db2xvciAqLywg
U3RyaW5nIC8qIHByaW50Q29sb3IgKi8+PiBleGVjdXRlU1FMU3luYyhpbnQgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAgIHB1Ymxp
YzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVy
PiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYm
IHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBz
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UHJpbnRDb2xvciBwcmludENvbG9yKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWY8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBk
b3VibGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZh
bHVlPiYmIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVl
bkNvbG9yLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmKSA9IDA7CiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0x
NzYsMTIgKzE3MiwxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAg
dm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9p
ZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY2xfY2FsbElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQg
ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHBy
b3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
OwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgog
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIzMCw5ICsyMjYsNyBAQCBwcml2YXRlOgogI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
ICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNTQsMzcg
KzI0OCwzNiBAQCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOwogfQog
Ci12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHBy
b3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzIikgewotICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAi
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9j
b2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikgewotICAgICAgICBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIikgeworICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5j
IikgewotICAgICAgICBleGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikgeworICAg
ICAgICBleGVjdXRlU1FMU3luYyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFy
YW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVTUUxBc3luYyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNR
TEFzeW5jIikgeworICAgICAgICBleGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykK
IHsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVn
ZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmlu
ZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdl
dCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRh
dGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVl
KTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewog
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRh
YmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0yOTIsODUgKzI4NSw3NiBAQCB2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyByZXF1ZXN0SQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElk
LCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90b2NvbF9jYWxsSWQsICpp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5O
YW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3Vi
bGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVz
OwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxp
bnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0g
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50
Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhl
cnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVz
LCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQs
IG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRf
cHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChv
dXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsK
LSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYg
KG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxv
YWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAg
ICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRl
cm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29s
b3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlmICghcmVzdWx0KSB7
CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICBhdXRvIFtvdXRf
b3B0X2NvbHVtbk5hbWVzLCBvdXRfb3B0X25vdGVzLCBvdXRfb3B0X3RpbWVzdGFtcCwgb3V0X29w
dF92YWx1ZXMsIG91dF9vcHRfcGF5bG9hZCwgb3V0X29wdF9kYXRhYmFzZUlkLCBvdXRfb3B0X3Nx
bEVycm9yLCBvdXRfb3B0X3NjcmVlbkNvbG9yLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X29wdF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEh
b3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X29wdF9ub3Rlcyk7CisgICAgaWYgKCEhb3V0X29w
dF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvdXRfb3B0X3ZhbHVl
cykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBv
dXRfb3B0X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X3BheWxv
YWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
b3V0X29wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfZGF0
YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFi
YXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOworICAgIGlmICghIW91dF9vcHRfc3FsRXJy
b3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRf
c2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG91dF9vcHRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90
b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlv
bmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
JiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6
c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFs
dWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQot
ICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1l
cyk7Ci0gICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkK
LSAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1w
KTsKLSAgICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkK
LSAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0g
ICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0g
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0g
ICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVD
b2xvcnMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAg
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsK
LSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKKyAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBpZiAoISFvcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG9wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm5vdGVzIl9zLCBvcHRfbm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXAp
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
Km9wdF90aW1lc3RhbXApOworICAgIGlmICghIW9wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3B0X3ZhbHVlcy5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfcGF5bG9hZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvcHRfZGF0YWJhc2VJZCk7CisgICAgaWYg
KCEhb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICgh
IW9wdF9zY3JlZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygic2NyZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoKm9wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xvcnMp
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBvcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9w
dF9wcmludENvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCBvcHRfcHJpbnRDb2xvcik7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3Vj
Y2VzcyhXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycykKIHsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIp
OwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJh
c2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVy
cy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1
ZXJ5Il9zLCB0cnVlKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xF
cnJvcnMoKSkgewogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzc4LDIwICszNjIsMTgg
QEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3QKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90
b2NvbF9jYWxsSWQsICppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5l
dyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVx
dWVzdElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7Ci0KKyAgICBt
X2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcygqaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnksIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5k
RGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpKTsKIH0KIAotdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGludCBpbl9kYXRhYmFzZUlk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0
YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7
CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAg
YXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNw
YXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
ICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyBjYW4n
dCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0zOTksNjUgKzM4MSw1NiBA
QCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1
dGVTUUxTeW5jKHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7
Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7
Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxF
cnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1u
TmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxv
YWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAm
b3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90
ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0
YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJu
YXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0
X3NjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
b3V0X3ByaW50Q29sb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1dGVTUUxT
eW5jKCppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9jb2x1bW5O
YW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwg
b3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0X3Nj
cmVlbkNvbG9yLCBvdXRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKKwor
ICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1v
dmUob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUob3V0X3ZhbHVlcykpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShvdXRfcGF5
bG9hZCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlk
Il9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFdURk1vdmUob3V0X3NxbEVycm9yKSk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUob3V0X2FsdGVy
bmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91
dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIG91dF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAotdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2
YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmludENvbG9yKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s6OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1u
TmFtZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOwotICAgIENhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29sdW1uTmFtZXMp
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGlt
ZXN0YW1wKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3Ms
IFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFdURk1vdmUoc3FsRXJyb3IpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOworICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZN
b3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1
Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwogfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFi
YXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwor
ICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1
dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFy
YW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIGNhbid0
IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxNCArNDM4LDEyIEBA
IHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1
dGVTUUxBc3luYyhwcm90b2NvbF9jYWxsSWQsICppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1f
YmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5l
eGVjdXRlU1FMQXN5bmMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYo
KSk7Ci0KKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoKmluX2RhdGFiYXNlSWQsIGluX3F1
ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcHJvdG9j
b2xfY2FsbElkKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTUxMyw2ICs0
ODQsNyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewpAQCAtNTU2LDcgKzUyOCw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU5Nyw3ICs1NjgsOSBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKQEAgLTYxOSw3ICs1OTIsNyBAQCBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7CiBuYW1lc3Bh
Y2UgRGF0YWJhc2UgewogLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAq
LwogdXNpbmcgRGF0YWJhc2VJZCA9IGludDsKLXVzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+OwordXNpbmcg
Q29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+OwogfSAvLyBEYXRhYmFzZQogLy8gRW5kIG9mIHR5cGVkZWZzLgogCkBAIC02NDMsNyArNjE2
LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKIH07IC8vIGVudW0gY2xhc3MgUHJpbWFy
eUNvbG9ycwogCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAg
LTY3MCwxNyArNjQzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwog
ICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1l
c3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCkBAIC03MTksNyArNjkyLDcg
QEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KIHRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKIApAQCAtNzcxLDggKzc0NCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gOiBJbnRIYXNoPElu
c3BlCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC03OTcsMTYgKzc2OSwxNiBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogCiB0ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAgICAgICAgKHNpemVfdClQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAorICAgICAgICAoc2l6ZV90KVBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKICAgICB9OwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0
dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KQEAgLTg2MywxMCArODM1LDEwIEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFjCiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9u
ZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBm
aW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxT
eW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9jYWxs
SWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1f
ZGVsZWdhdGU7CiB9OwpAQCAtOTE0LDE4MyArODg2LDE3OSBAQCBwcml2YXRlOgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit2b2lkIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRv
dWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3Rlcywg
QCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJv
ciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1u
TmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsK
LSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJy
b3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
Zygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3Rv
Y29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9j
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipvdXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqb3V0X29wdF9wYXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqb3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
KGFub255bW91cykgKm91dF9vcHRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKG91dF9vcHRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0
X29wdF9wYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRf
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRf
b3B0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFt
ZXMpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAg
ICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3ZhbHVlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRf
b3B0X2RhdGFiYXNlSWQpOworICAgICAgICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0
X29wdF9zcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7Cisg
ICAgICAgIGlmICghIW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KCpvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0
X3ByaW50Q29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAg
aW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5f
cXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19p
bl9xdWVyeV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90
ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3Fs
RXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNv
bHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAobm90
ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rl
cyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVz
IHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
LSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9y
KQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNx
bEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29sb3Ip
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Q
cm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsK
KyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9v
cHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRfb3B0
X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5hbWVz
LCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2YWx1
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9yIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRf
b3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2NvbHVt
bk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMpOwor
ICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09OT2Jq
ZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxvYWQg
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAgICAg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAq
b3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
Km91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRf
c2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xvcikp
OworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05T
dHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEhb3V0
X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENvbG9y
KSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAog
ICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpv
X2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVy
eTpvX2luX3F1ZXJ5XTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY1dpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMn
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0
cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5D
b2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRD
b2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQs
IEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05T
dHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRv
SlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29s
b3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCks
IGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqb3V0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0X3RpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKm91dF9zcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9yKSB7Cisg
ICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfY29s
dW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9wYXlsb2Fk
LCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIob3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRl
Q29sb3JzIik7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9jb2x1bW5OYW1lcykpOworICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRf
dGltZXN0YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09OT2JqZWN0
XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlk
Il9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9K
U09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhv
dXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQg
b19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVy
eSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit2
b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5
bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0
ZVNRTEFzeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNT
dHJpbmcgKm91dF9ub3RlcywgZG91YmxlIG91dF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqb3V0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50
IG91dF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2UoYW5vbnltb3VzKSBvdXRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9u
b3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfdmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJz
cWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihvdXRfYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgW291dF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOwor
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291
dF9zcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNv
bG9yKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJv
dG9jb2xTdHJpbmcob3V0X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2Rh
dGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFtt
X2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJ
ZCBxdWVyeTpvX2luX3F1ZXJ5XTsKIH0KIApAQCAtMTM0NiwxMCArMTMxNCwxMCBAQCBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogQHByb3RvY29sIFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKLS0gKHZvaWQpZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRv
dWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJh
c2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFt
cCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipz
cWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwg
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRD
b2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihO
U1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1
Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcg
KilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVy
eTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3Ip
KXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJp
bmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7
CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwg
TlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFi
YXNlKGFub255bW91cykgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGlu
dClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwogQGVuZAogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDFmMmY0NWQ3NGMzOTM5MTExMjM2YTg2N2Q3ZmZmZDI0MGU2ZDk5YzUuLjNlNDQy
NzQ4OTRjMmVkMDY0ZWU4ZDE5OWUxYTBlNGMxMTQ0YWJmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAt
NzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIs
IG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CiAKQEAgLTg4LDggKzg4LDggQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcq
IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0
KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFt
cCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVm
UHRyPEpTT046OkFycmF5PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90
ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9u
YWw8aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF9zcWxF
cnJvciwgY29uc3QgU3RyaW5nJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4m
JiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmPEpTT046OkFycmF5PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVm
PEpTT046OlZhbHVlPiYmIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMxLDExICsxMzEsMTQgQEAgcHVibGljOgog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5j
bHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OwpAQCAtMTQzLDE1ICsxNDYsOCBAQCBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5l
cmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycy4KLSAgICBl
bnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50
YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAv
LyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUqIG9wdF9p
bl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3QgSlNP
Tjo6VmFsdWUqIG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9kYXRhYmFzZUlkLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBvcHRfaW5f
c2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcqIG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3Rl
cywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9i
amVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5
bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291
dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1w
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0
X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3Bh
eWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIG9wdF9jb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8q
IG9wdF9ub3RlcyAqLywgT3B0aW9uYWw8ZG91YmxlPiAvKiBvcHRfdGltZXN0YW1wICovLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiAvKiBvcHRfdmFsdWVzICovLCBSZWZQdHI8SlNPTjo6VmFsdWU+IC8q
IG9wdF9wYXlsb2FkICovLCBPcHRpb25hbDxpbnQ+IC8qIG9wdF9kYXRhYmFzZUlkICovLCBSZWZQ
dHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gLyogb3B0X3NxbEVycm9yICovLCBPcHRpb25h
bDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IC8qIG9wdF9zY3JlZW5Db2xvciAq
LywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBvcHRfYWx0ZXJuYXRl
Q29sb3JzICovLCBTdHJpbmcgLyogb3B0X3ByaW50Q29sb3IgKi8+PiBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0
X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvcHRfc3FsRXJyb3IsIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4mJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfYWx0
ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKSA9IDA7CisgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IC8qIGNvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogbm90ZXMgKi8sIGRvdWJsZSAv
KiB0aW1lc3RhbXAgKi8sIFJlZjxKU09OOjpPYmplY3Q+IC8qIHZhbHVlcyAqLywgUmVmPEpTT046
OlZhbHVlPiAvKiBwYXlsb2FkICovLCBpbnQgLyogZGF0YWJhc2VJZCAqLywgUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IC8qIHNxbEVycm9yICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMgLyogc2NyZWVuQ29sb3IgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4gLyogYWx0ZXJuYXRlQ29sb3JzICovLCBTdHJpbmcgLyogcHJpbnRDb2xvciAqLz4+
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBwcmludENvbG9yKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTksMTAgKzE1NSwx
MCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIxMSw5ICsy
MDcsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMzUsNDcgKzIyOSwzNiBAQCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAog
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0
YWJhc2UiX3MsIHRoaXMpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdl
LT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzIikgewotICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xf
cGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0g
ImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKLSAgICAgICAgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHBy
b3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikgeworICAgICAg
ICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHBy
b3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIHByb3RvY29sX21ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBib29sIG9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJh
bWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0
cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgZG91YmxlIG9wdF9p
bl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5n
ZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7Ci0gICAg
Ym9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBh
cmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOwot
ICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1
ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91
bmQpOwotICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1
ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9z
cWxFcnJvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZv
dW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZv
cHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9p
bl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0
ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kKTsKKyAgICBhdXRvIGluX29wdF9jb2x1bW5OYW1lcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5O
YW1lcyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X25vdGVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgZmFs
c2UpOworICAgIGF1dG8gaW5fb3B0X3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dERvdWJsZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBmYWxzZSk7
CisgICAgYXV0byBpbl9vcHRfdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRv
IGluX29wdF9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3Nx
bEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHByb3RvY29sX3BhcmFtZXRl
cnMuZ2V0KCksICJzcWxFcnJvciJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3NjcmVlbkNv
bG9yX2pzb24gPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1l
dGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfYWx0
ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocHJvdG9jb2xfcGFy
YW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5f
b3B0X3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIGZhbHNlKTsKICAgICBpZiAobV9iYWNr
ZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47
CkBAIC0yODMsNjUgKzI2Niw1OCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1
ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZv
dW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlk
X3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJy
b3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9z
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9w
dF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9w
cmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUoaW5fb3B0
X2NvbHVtbk5hbWVzKSwgaW5fb3B0X25vdGVzLCBXVEZNb3ZlKGluX29wdF90aW1lc3RhbXApLCBX
VEZNb3ZlKGluX29wdF92YWx1ZXMpLCBXVEZNb3ZlKGluX29wdF9wYXlsb2FkKSwgV1RGTW92ZShp
bl9vcHRfZGF0YWJhc2VJZCksIFdURk1vdmUoaW5fb3B0X3NxbEVycm9yKSwgaW5fb3B0X3NjcmVl
bkNvbG9yX2pzb24sIFdURk1vdmUoaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyksIGluX29wdF9wcmlu
dENvbG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlv
bmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFt
cDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8
SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNl
SWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0
X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2Fn
ZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFt
ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1l
c3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9w
YXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBv
cHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxw
dHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6
IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRl
cm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5k
ID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90
ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJ
ZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91
dF9wcmludENvbG9yKTsKKyAgICBhdXRvIGluX29wdF9zY3JlZW5Db2xvciA9IFByb3RvY29sOjpU
ZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4oaW5fb3B0X3NjcmVlbkNvbG9yX2pzb24pOwogCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAg
ICAgIGlmIChvdXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhh
c1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAq
b3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAg
ICAgIGlmIChvdXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFz
ZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNl
SWQiX3MsICpvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0g
ICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAg
IGlmIChvdXRfYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91
dF9wcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdl
bnQtPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoV1RGTW92ZShpbl9vcHRfY29sdW1uTmFt
ZXMpLCBpbl9vcHRfbm90ZXMsIFdURk1vdmUoaW5fb3B0X3RpbWVzdGFtcCksIFdURk1vdmUoaW5f
b3B0X3ZhbHVlcyksIFdURk1vdmUoaW5fb3B0X3BheWxvYWQpLCBXVEZNb3ZlKGluX29wdF9kYXRh
YmFzZUlkKSwgV1RGTW92ZShpbl9vcHRfc3FsRXJyb3IpLCBXVEZNb3ZlKGluX29wdF9zY3JlZW5D
b2xvciksIFdURk1vdmUoaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyksIGluX29wdF9wcmludENvbG9y
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworCisgICAgYXV0byBbb3V0X29wdF9jb2x1bW5OYW1lcywgb3V0X29wdF9ub3Rlcywgb3V0
X29wdF90aW1lc3RhbXAsIG91dF9vcHRfdmFsdWVzLCBvdXRfb3B0X3BheWxvYWQsIG91dF9vcHRf
ZGF0YWJhc2VJZCwgb3V0X29wdF9zcWxFcnJvciwgb3V0X29wdF9zY3JlZW5Db2xvciwgb3V0X29w
dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9vcHRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52
YWx1ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9vcHRfY29sdW1u
TmFtZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9vcHRfbm90
ZXMpOworICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7Cisg
ICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgaWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAg
ICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICgh
IW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfb3B0X3By
aW50Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMi
X3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAibm90ZXMiX3MsIG51bGxwdHIpOwotICAgIGRv
dWJsZSBpbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1l
dGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRl
cnMuZ2V0KCksICJ2YWx1ZXMiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
aW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0
KCksICJwYXlsb2FkIl9zLCBudWxscHRyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQi
X3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3NxbEVycm9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJf
cywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgbnVsbHB0
cik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgbnVsbHB0
cik7CisgICAgYXV0byBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFy
cmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgdHJ1ZSk7Cisg
ICAgYXV0byBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAibm90ZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fdGltZXN0
YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHByb3RvY29sX3BhcmFtZXRlcnMu
Z2V0KCksICJ0aW1lc3RhbXAiX3MsIHRydWUpOworICAgIGF1dG8gaW5fdmFsdWVzID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJ2YWx1
ZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFZhbHVlKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2Vy
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBh
dXRvIGluX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHByb3RvY29s
X3BhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9zY3Jl
ZW5Db2xvcl9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9hbHRl
cm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3By
aW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1l
dGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNw
YXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
ICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzQ5
LDQxICszMjUsMzggQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlAKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3Rh
bXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3Is
IGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
cHJvdG9jb2xfY2FsbElkLCBpbl9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9ub3Rl
cywgKmluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLnJlbGVhc2VOb25OdWxsKCksIGluX3BheWxvYWQu
cmVsZWFzZU5vbk51bGwoKSwgKmluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLnJlbGVhc2VOb25O
dWxsKCksIGluX3NjcmVlbkNvbG9yX2pzb24sIGluX2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9u
TnVsbCgpLCBpbl9wcmludENvbG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5h
bWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0g
ICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7
Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xv
cnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0
X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVy
cm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMs
ICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9y
LCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZv
dXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRf
ZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRl
Q29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewot
ICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVz
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOwotICAg
ICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNv
bG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50
Q29sb3IpKTsKKyAgICBhdXRvIGluX3NjcmVlbkNvbG9yID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPihpbl9zY3JlZW5Db2xvcl9qc29uKTsKKyAgICBpZiAoIWluX3NjcmVlbkNvbG9yKSB7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIHNjcmVlbkNvbG9yOiAi
X3MsIGluX3NjcmVlbkNvbG9yX2pzb24pKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhpbl9jb2x1bW5OYW1lcy5yZWxl
YXNlTm9uTnVsbCgpLCBpbl9ub3RlcywgKmluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLnJlbGVhc2VO
b25OdWxsKCksIGluX3BheWxvYWQucmVsZWFzZU5vbk51bGwoKSwgKmluX2RhdGFiYXNlSWQsIGlu
X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCksICppbl9zY3JlZW5Db2xvciwgaW5fYWx0ZXJuYXRl
Q29sb3JzLnJlbGVhc2VOb25OdWxsKCksIGluX3ByaW50Q29sb3IpOworICAgIGlmICghcmVzdWx0
KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGF1dG8gW291dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBv
dXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcl0gPSBXVEZN
b3ZlKHJlc3VsdC52YWx1ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1w
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1v
dmUob3V0X3ZhbHVlcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgV1RGTW92ZShvdXRfcGF5bG9hZCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFdURk1vdmUob3V0X3NxbEVy
cm9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVl
bkNvbG9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIFdURk1vdmUob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG91dF9wcmludENvbG9yKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTQyNCw2ICszOTcsNyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUAogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNDY3LDcgKzQ0MSw2IEBAIGNsYXNz
IEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTUwOCw3ICs0ODEsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUzMCw3ICs1MDUsNyBAQCBlbnVtIGNsYXNzIFBy
aW1hcnlDb2xvcnM7CiBuYW1lc3BhY2UgRGF0YWJhc2UgewogLyogVW5pcXVlIGlkZW50aWZpZXIg
b2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwogdXNpbmcgRGF0YWJhc2VJZCA9IGludDsKLXVzaW5nIENv
bG9yTGlzdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+OwordXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+OwogfSAvLyBEYXRhYmFzZQogLy8gRW5kIG9mIHR5cGVk
ZWZzLgogCkBAIC01NTQsNyArNTI5LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKIH07
IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwogCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNs
YXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgZmluYWwg
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKQEAgLTU4MSwxNyArNTU2LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5f
bWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9j
b2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAg
fQogCkBAIC02MzAsNyArNjA1LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0Rh
dGFiYXNlJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwor
T3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJp
bmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNjgyLDggKzY1Nyw3IEBA
IHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4gOiBJbnRIYXNoPEluc3BlCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC03MDgsMTYgKzY4MiwxNiBAQCBTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVu
LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1
ZSwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KQEAgLTc3NCw4ICs3NDgsOCBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
YXRhYmFzZUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3Qg
SlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25z
dCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNv
bnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNv
bnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyog
aW5fcHJpbnRDb2xvcikgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIGluX3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBv
cHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFzZUlk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBvcHRf
c2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmPEpTT046OkFycmF5PiYm
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNj
cmVlbkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIHByaW50Q29sb3IpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC04MjMsMTM3
ICs3OTcsMTM1IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBj
b25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxv
YWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGlu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQordm9pZCBPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046OkFycmF5PiYmIGluX29w
dF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9vcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJs
ZT4mJiBpbl9vcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGluX29wdF92YWx1
ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBpbl9vcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYm
IGluX29wdF9kYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGluX29wdF9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBpbl9vcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4m
JiBpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX29wdF9wcmludENvbG9y
KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlk
OnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50
Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29s
b3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYg
KHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7
Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0
YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJ
ZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFs
dGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpw
cmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9jb2x1bW5OYW1lcywg
TlNTdHJpbmcgKipvdXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqb3V0X29wdF9wYXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyAqb3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
b3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykg
Km91dF9vcHRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91
dF9vcHRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9wYXlsb2Fk
LCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKG91dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfYWx0ZXJuYXRlQ29s
b3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5h
bWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFtZXMpKTsKKyAgICAg
ICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAgICAgIGlmICghIW91
dF9vcHRfdGltZXN0YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAgICAgICBpZiAoISFv
dXRfb3B0X3ZhbHVlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAg
aWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNl
SWQpOworICAgICAgICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0X29wdF9zcWxFcnJv
ciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmICgh
IW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRf
b3B0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0X3ByaW50Q29sb3Ip
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCi0gICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzOwotICAgIGlmIChpbl9jb2x1bW5OYW1lcykKLSAg
ICAgICAgb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVz
KTsKLSAgICBOU1N0cmluZyAqb19pbl9ub3RlczsKLSAgICBpZiAoaW5fbm90ZXMpCi0gICAgICAg
IG9faW5fbm90ZXMgPSAqaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wOwotICAg
IGlmIChpbl90aW1lc3RhbXApCi0gICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFt
cDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOwotICAgIGlmIChpbl92
YWx1ZXMpCi0gICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFs
bG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQ7Ci0gICAgaWYgKGluX3BheWxvYWQpCi0g
ICAgICAgIG9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKLSAgICBpbnQgb19pbl9k
YXRhYmFzZUlkOwotICAgIGlmIChpbl9kYXRhYmFzZUlkKQotICAgICAgICBvX2luX2RhdGFiYXNl
SWQgPSAqaW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X3NxbEVycm9yOwotICAgIGlmIChpbl9zcWxFcnJvcikKLSAgICAgICAgb19pbl9zcWxFcnJvciA9
IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvcjsKLSAgICBpZiAoaW5fc2NyZWVuQ29s
b3IpCi0gICAgICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgaWYgKGluX2FsdGVy
bmF0ZUNvbG9ycykKLSAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9hbHRlcm5hdGVDb2xvcnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xv
cjsKLSAgICBpZiAoaW5fcHJpbnRDb2xvcikKLSAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5h
bWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25v
dGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5p
bCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3Bh
eWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8g
Jm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3Fs
RXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNv
bG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8g
Jm9faW5fYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8g
Jm9faW5fcHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07CisgICAgTlNBcnJheS8qPE5TU3RyaW5n
PiovICpvX2luX29wdF9jb2x1bW5OYW1lczsKKyAgICBpZiAoISFpbl9vcHRfY29sdW1uTmFtZXMp
CisgICAgICAgIG9faW5fb3B0X2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fb3B0
X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIE5TU3RyaW5nICpvX2luX29wdF9u
b3RlczsKKyAgICBpZiAoISFpbl9vcHRfbm90ZXMpCisgICAgICAgIG9faW5fb3B0X25vdGVzID0g
aW5fb3B0X25vdGVzOworICAgIGRvdWJsZSBvX2luX29wdF90aW1lc3RhbXA7CisgICAgaWYgKCEh
aW5fb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgb19pbl9vcHRfdGltZXN0YW1wID0gKmluX29wdF90
aW1lc3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX29wdF92YWx1ZXM7Cisg
ICAgaWYgKCEhaW5fb3B0X3ZhbHVlcykKKyAgICAgICAgb19pbl9vcHRfdmFsdWVzID0gW1tbUldJ
UHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fb3B0X3ZhbHVl
cy5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX29wdF9wYXlsb2FkOworICAgIGlmICghIWluX29wdF9wYXlsb2FkKQorICAgICAg
ICBvX2luX29wdF9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6aW5fb3B0X3BheWxvYWQucmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVh
c2VdOworICAgIGludCBvX2luX29wdF9kYXRhYmFzZUlkOworICAgIGlmICghIWluX29wdF9kYXRh
YmFzZUlkKQorICAgICAgICBvX2luX29wdF9kYXRhYmFzZUlkID0gKmluX29wdF9kYXRhYmFzZUlk
OworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fb3B0X3NxbEVycm9yOworICAg
IGlmICghIWluX29wdF9zcWxFcnJvcikKKyAgICAgICAgb19pbl9vcHRfc3FsRXJyb3IgPSBbW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fb3B0
X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fb3B0X3NjcmVlbkNvbG9yOwor
ICAgIGlmICghIWluX29wdF9zY3JlZW5Db2xvcikKKyAgICAgICAgb19pbl9vcHRfc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Pihpbl9vcHRfc2NyZWVuQ29sb3IpOworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9v
cHRfYWx0ZXJuYXRlQ29sb3JzOworICAgIGlmICghIWluX29wdF9hbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgIG9faW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX29w
dF9hbHRlcm5hdGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4gb19pbl9vcHRfcHJpbnRDb2xvcjsKKyAgICBpZiAo
ISFpbl9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgb19pbl9vcHRfcHJpbnRDb2xvciA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPihpbl9vcHRfcHJp
bnRDb2xvcik7CisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjayBjb2x1bW5OYW1lczooISFpbl9vcHRfY29sdW1uTmFtZXMgPyAmb19pbl9vcHRfY29sdW1u
TmFtZXMgOiBuaWwpIG5vdGVzOighIWluX29wdF9ub3RlcyA/ICZvX2luX29wdF9ub3RlcyA6IG5p
bCkgdGltZXN0YW1wOighIWluX29wdF90aW1lc3RhbXAgPyAmb19pbl9vcHRfdGltZXN0YW1wIDog
bmlsKSB2YWx1ZXM6KCEhaW5fb3B0X3ZhbHVlcyA/ICZvX2luX29wdF92YWx1ZXMgOiBuaWwpIHBh
eWxvYWQ6KCEhaW5fb3B0X3BheWxvYWQgPyAmb19pbl9vcHRfcGF5bG9hZCA6IG5pbCkgZGF0YWJh
c2VJZDooISFpbl9vcHRfZGF0YWJhc2VJZCA/ICZvX2luX29wdF9kYXRhYmFzZUlkIDogbmlsKSBz
cWxFcnJvcjooISFpbl9vcHRfc3FsRXJyb3IgPyAmb19pbl9vcHRfc3FsRXJyb3IgOiBuaWwpIHNj
cmVlbkNvbG9yOighIWluX29wdF9zY3JlZW5Db2xvciA/ICZvX2luX29wdF9zY3JlZW5Db2xvci52
YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KCEhaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA/
ICZvX2luX29wdF9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KCEhaW5fb3B0X3By
aW50Q29sb3IgPyAmb19pbl9vcHRfcHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmPEpTT046OkFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGlu
X3ZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlk
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVl
bkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIGluX3ByaW50Q29sb3IpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBh
eWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJp
bnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xf
Y2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
IHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHBy
aW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVl
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXls
b2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9y
cyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJv
ciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXko
YWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3RlcywgZG91YmxlIG91dF90
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVlcywgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBvdXRfc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0X2FsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBvdXRfcHJpbnRDb2xvcikg
eworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFsdWVzLCBAInZhbHVlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfcGF5
bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9wYXlsb2FkIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJh
c2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRv
UHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShv
dXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X3ByaW50Q29sb3IpKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCi0gICAg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJy
YXkoJmluX2NvbHVtbk5hbWVzKTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29s
dW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheShXVEZNb3ZlKGluX2NvbHVtbk5hbWVzKSk7CiAg
ICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9ub3RlczsKICAgICBkb3VibGUgb19pbl90aW1l
c3RhbXAgPSBpbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Zh
bHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0
OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9f
aW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OldURk1vdmUoaW5fdmFsdWVzKV0gYXV0b3JlbGVhc2VdOworICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0
IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl9wYXlsb2FkKV0gYXV0b3JlbGVh
c2VdOwogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3NxbEVycm9yXSBhdXRvcmVs
ZWFzZV07CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpXVEZN
b3ZlKGluX3NxbEVycm9yKV0gYXV0b3JlbGVhc2VdOwogICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsK
ICAgICBpZiAoIW9faW5fc2NyZWVuQ29sb3IpIHsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlBhcmFtZXRlciAnc2NyZWVuQ29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3Jz
ID0gdG9PYmpDU3RyaW5nQXJyYXkoJmluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
PiBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPihpbl9wcmludENvbG9yKTsK
KyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpD
U3RyaW5nQXJyYXkoV1RGTW92ZShpbl9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPiBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4oaW5fcHJpbnRDb2xv
cik7CiAgICAgaWYgKCFvX2luX3ByaW50Q29sb3IpIHsKICAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgIlBhcmFtZXRlciAncHJpbnRDb2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29sdW1uTmFtZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1l
c3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVzOm9faW5fdmFsdWVzIHBheWxvYWQ6b19pbl9wYXls
b2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHNxbEVycm9yOm9faW5fc3FsRXJyb3Igc2Ny
ZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIGFsdGVybmF0ZUNvbG9yczpvX2luX2Fs
dGVybmF0ZUNvbG9ycyBwcmludENvbG9yOm9faW5fcHJpbnRDb2xvci52YWx1ZSgpXTsKIH0KIApA
QCAtMTIxMyw4ICsxMTg1LDggQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCiAKIEBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2Jq
ZWN0PgogQG9wdGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1u
TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICopcHJpbnRD
b2xvcjsKLS0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
IHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihk
b3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50KWRh
dGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBz
Y3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9y
IGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3Jz
IHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwg
aW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnlt
b3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVz
dGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
KXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFz
ZUlkOihpbnQgKilkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnlt
b3VzKSAqKXByaW50Q29sb3I7CistICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJpbnRDb2xvcikp
c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29s
b3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSlwcmludENvbG9yOwogQGVuZAogCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAppbmRleCBkMDJiZWQ3YjhkNmUyZmUw
MmE1MjQyZWQxMjJmNGEyODRmOTBjOWI5Li5iMzBkZjE3MGFhYmE1OTdiMzYxOTYyNGJhZDY3OTM1
MTUzM2U0NDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBAIC03
Niw3ICs3Niw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsiLCBu
dWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgogCkBAIC05Niw3ICs5Niw3IEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9CiAjaWYgQ09N
TUFORC1NQUMKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAw
OwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiB9OwogI2VuZGlmIC8vIERPTUFJTi1NQUMKQEAgLTE0
MCwxMSArMTQwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2lmIERPTUFJTi1NQUMK
QEAgLTE1Niw3ICsxNTksNyBAQCBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI7CiBjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKICNp
ZiBDT01NQU5ELU1BQwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcm
KSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVz
b3VyY2UoKSA9IDA7CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CkBAIC0xNjcsMTAgKzE3MCwx
MCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgogI2lmIENPTU1BTkQtTUFDCi0gICAgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNlbmRpZiAvLyBDT01NQU5E
LU1BQwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGlj
OgpAQCAtMjIxLDkgKzIyNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI0OCw0MSArMjQ5LDQxIEBAIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
X21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJl
ZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9j
b2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCiAjaWYgQ09NTUFORC1NQUMKLSAg
ICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZShy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2Qg
PT0gImxvYWRSZXNvdXJjZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9
CiAKICNpZiBDT01NQU5ELU1BQwotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShwcm90b2NvbF9jYWxsSWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291
cmNlKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3Io
KS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAjZW5k
aWYgLy8gQ09NTUFORC1NQUMKICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC0zMjUsNiArMzI2LDcg
QEAgdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4KIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTM4MSw3ICszODMsNiBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTM4OSwxMCArMzkwLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogI2lmIEVWRU5ULU1BQwogdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJj
ZUxvYWRlZCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwogCi0gICAg
bV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
KyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogfQogI2VuZGlmIC8vIEVWRU5ULU1BQwogI2VuZGlmIC8vIERPTUFJTi1N
QUMKQEAgLTQzNCw3ICs0MzUsOSBAQCB2b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJl
c291cmNlTG9hZGVkKCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTQ2MSw3ICs0NjQsNyBAQCBjbGFzcyBOZXR3b3JrRXJyb3I7CiBuYW1lc3BhY2UgTmV0d29y
ayB7CiAKICNpZiBUWVBFLU1BQwotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgeworY2xhc3MgTmV0d29ya0Vycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBA
IC00ODgsMTcgKzQ5MSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3Jr
RXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCks
IHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29k
ZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTU3MCw4
ICs1NzMsNyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC02MzEsNyArNjMzLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3Jr
QmFja2UKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdh
dGUgPSBoYW5kbGVyOyB9CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2Nv
bF9jYWxsSWQpIGZpbmFsOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBwcml2YXRlOgogICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7
CkBAIC02ODMsMjEgKzY4NSwyMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2lmIERPTUFJ
Ti1NQUMKICNpZiBDT01NQU5ELU1BQwotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0
b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2Nh
bGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5sb2FkUmVzb3Vy
Y2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBh
dXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVs
ZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTkxMSw5ICs5MTQsOSBAQCB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBf
Y29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRl
ZCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwogfQogI2VuZGlmIC8vIEVWRU5ULU1BQwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVz
dWx0CmluZGV4IGE0OGY2ZjliNWExOTc5ODJhZDY5MTAyOWFlYWFkYzY3NTJmODEzMmEuLmM4NzUx
NDhmM2RhZjA1ZWQzMWFjZWQ5N2MzMmViM2JiNzU0N2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24t
cmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRvbWFpbiIsIFsid2ViLXBhZ2UiXSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBw
dWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBs
ZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZp
cnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07
CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90
b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsy
MDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQog
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9t
YWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAg
ICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90
b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9j
b2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFu
ZChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYg
KCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOwor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRl
OgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRl
bmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAg
dm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJv
dG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhh
bmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkg
ZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRl
OgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5k
Il9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihw
cm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9i
amVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3Nh
Z2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpA
QCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29u
c3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigp
OwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRv
bWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAppbmRleCBh
NzdmZTM1ODk3ODg1MzQ3NTA1NjIyM2UwMTlhMWIwZmIxZDQ3ZTY4Li45NDJkY2NhOGYyNjAxZWM2
OTcyYmJjNjA5ODRiZGM3NTU3NDFjM2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcg
KzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdl
Il0pOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4
cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsx
NDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3Mg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBA
IHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25n
IHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRl
cnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGlj
OgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
PSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4
ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAK
LXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAot
ICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21t
YW5kIikgeworICAgICAgICBDb21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2Nv
bF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5Db21tYW5kKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8g
cmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAg
IEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNz
YWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsy
OTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQo
KQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2
ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1
MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAg
ICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3Qg
Zm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihw
cm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07
CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9j
b2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07
CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiBy
b3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAg
IHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
IH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21h
aW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKaW5kZXggMGFkNmQwNDQ2MDFjMmVhNDA4Mzg4YmNm
MjU0ZmM2NjU0NWY3Y2QwNC4uODQ5ZjNiNzI5Y2FjZDhiOWYxMTRjOGI5YmZiMjE3MTkxZDI3Mjkx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRh
cmdldFR5cGVzLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToK
IGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcg
Y2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxs
SWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAs
MTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsK
KyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9p
ZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0y
MDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFt
ZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2Ut
PmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7
Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiAr
IHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsK
KyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2NhbGxJZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOwor
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0
eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xf
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBt
X2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwor
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5
OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNw
YWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5k
KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9j
YWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAg
cHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9j
YWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pz
b25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewog
ICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRS
b3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAppbmRleCA0NzViODdiZDBjOGRhODUyYjVmOTkw
Y2IyMWNiM2MyZTA3NjA5OTg0Li40MTlmOTJlZGExM2FlYzIyZDhmNGFmMmFmMTdmMDVmNzVkMjQx
YTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApA
QCAtNzksNyArNzksNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3Jr
MyIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CiAKQEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQp
ID0gMDsKIH07CiAKIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwg
fkFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UyKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTMobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25n
IGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElk
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBwcm90b2NvbF9jYWxsSWQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElk
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE1MSwxMSArMTUxLDE0
IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjsKQEAgLTE2NCwyMCArMTY3LDIwIEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxv
YWRSZXNvdXJjZTEoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CiAKIGNsYXNzIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShF
cnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTEoKSA9IDA7CisgICAgdmlydHVh
bCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UyKCkgPSAwOworICAg
IHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlMygpID0g
MDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJj
ZTQoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2Fk
UmVzb3VyY2U1KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gbG9hZFJlc291cmNlNigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGxvYWRSZXNvdXJjZTcoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xODUsOSArMTg4LDkg
QEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQs
IGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3Rv
Y29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAyLDE1
ICsyMDUsMTUgQEAgcHJpdmF0ZToKIGNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMihs
b25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFt
ZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlNChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3Rv
Y29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZv
aWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHBy
b3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
OwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgog
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTI1OSw5ICsyNjIsNyBAQCBwcml2YXRlOgogI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
ICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yODQsMzgg
KzI4NSwzOCBAQCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwogfQog
Ci12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9p
ZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHBy
b3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikgewotICAgICAgICBsb2Fk
UmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3Rv
Y29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlMSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlMShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3
b3JrMS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2UxKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3Ip
OworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlMSgpOworICAgIGlmICgh
cmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBh
dXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiBSZWY8TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcj4gTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQpAQCAtMzMwLDE0ICszMzEsMTMgQEAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5l
dHdvcmszIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lk
IChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKTsKKyAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpOwogICAgIHVzaW5nIERpc3BhdGNoTWFw
ID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5p
c0VtcHR5KCkpIHsKQEAgLTM1OCwxNDYgKzM1OCwxNTMgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFIKICAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBj
b21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNw
YXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0
Y2hNYXAuZ2V0KCkuZmluZChwcm90b2NvbF9tZXRob2QpOwogICAgIGlmIChmaW5kUmVzdWx0ID09
IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmszLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qZmluZFJl
c3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgKCgqdGhp
cykuKmZpbmRSZXN1bHQtPnZhbHVlKShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xf
cGFyYW1ldGVycykpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHByb3RvY29sX2NhbGxJ
ZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdl
bnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9h
ZFJlc291cmNlMSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0
LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJv
cigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwog
fQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTIoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlMigpOwor
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0
eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxv
YWRSZXNvdXJjZTMocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5s
b2FkUmVzb3VyY2UzKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3IpOworICAg
IGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlMygpOworICAgIGlmICghcmVzdWx0
KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHBy
b3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocmVx
dWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHBy
b3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0g
bV9hZ2VudC0+bG9hZFJlc291cmNlNCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1KHByb3RvY29sX2NhbGxJZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTUoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJl
c291cmNlNSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVy
cm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
Ci12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTYocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYo
ZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlNigpOworICAg
IGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTcocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2U3KHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOworICAgIGF1
dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlNygpOworICAgIGlmICghcmVzdWx0KSB7
CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29s
X2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAg
LTUzOCw2ICs1NDUsNyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplYwogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTgxLDcgKzU4OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91
dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTYyMiw3ICs2Mjks
OSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTY4MSw4ICs2OTAsNyBAQCB1c2luZyBMb2FkZXJJZCA9IFN0cmluZzsK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAK
LSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTczOSw3ICs3NDcsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhYwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xf
Y2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNzQ4LDEzICs3NTYsMTMg
QEAgY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlTmV0d29yazNCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OwotICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZTQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25n
IHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAg
dm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZTMobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9h
ZFJlc291cmNlNChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2U1KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTYobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTgw
MiwxNjEgKzgxMCwxNjkgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azEubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UyJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UyJyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTQnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U1JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U1JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTcnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTcnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAppbmRleCA3OTUzY2JmMjE4Mzg4Zjg0Nzc3
MmJkNDEzZDE4MDI2MjlhN2I4MDViLi45OTNmOWFhMjhjNzEzNjZkZGVlN2FkYTFmMWM2MTBjNjcx
YzFmYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVz
Lmpzb24tcmVzdWx0CkBAIC0zMCwxOCArMzAsMTkgQEAKIAogLy8gVHlwZURvbWFpbgogSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVk
OiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uRW51bSIsIHtTaGFyZWQ6
ICJzaGFyZWQiLCAxOiAiMSIsIDI6ICIyIn0pOwogSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwogCiAvLyBDb21tYW5kRG9tYWluCiBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4uY29tbWFuZCIsIG51bGwsIFt7Im5hbWUiOiAi
ZW51bVJlcXVpcmVkIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJlbnVtT3B0aW9uYWwi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBhcmFtZXRl
clJlcXVpcmVkIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJwYXJhbWV0ZXJPcHRpb25h
bCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJlbnVtUmVxdWlyZWQi
LCAiZW51bU9wdGlvbmFsIiwgInJldHVyblJlcXVpcmVkIiwgInJldHVybk9wdGlvbmFsIl0pOwog
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOwog
CiAvLyBFdmVudERvbWFpbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnRE
b21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFp
bi5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJs
YWNrOiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJh
bWV0ZXIiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnREb21haW4uRXZl
bnRQYXJhbWV0ZXJSZXF1aXJlZCIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBTaGFyZWRSZXF1aXJlZDog
InNoYXJlZFJlcXVpcmVkIiwgR3JleTogImdyZXkifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRQYXJhbWV0ZXJPcHRpb25hbCIsIHtTaGFyZWQ6ICJz
aGFyZWQiLCBTaGFyZWRPcHRpb25hbDogInNoYXJlZE9wdGlvbmFsIiwgR3JlZW46ICJncmVlbiJ9
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnQiLCBu
dWxsLCBbImVudW1SZXF1aXJlZCIsICJlbnVtT3B0aW9uYWwiLCAicGFyYW1ldGVyUmVxdWlyZWQi
LCAicGFyYW1ldGVyT3B0aW9uYWwiXSk7CiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnRE
b21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsKIEluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7CiAjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcy5pbgpAQCAtODAsNyArODEsNyBAQCBJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTk4LDcgKzk5LDcgQEAgcHJp
dmF0ZToKIGNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1
YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
ZW51bVJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFs
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE0MCwxMSArMTQxLDE0
IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTUyLDE0ICsxNTYsNyBAQCBjbGFzcyBBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFt
ZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZS4KLSAgICBlbnVtIGNsYXNzIFJldHVyblZhbHVlIHsKLSAgICAg
ICAgU2hhcmVkID0gMCwKLSAgICAgICAgQ3lhbiA9IDYsCi0gICAgICAgIE1hZ2VudGEgPSA3LAot
ICAgICAgICBZZWxsb3cgPSA4LAotICAgIH07IC8vIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSogb3V0X3Jl
dHVyblZhbHVlKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtIC8qIGVudW1SZXF1aXJlZCAqLywgT3B0
aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+IC8qIG9wdF9lbnVtT3B0aW9uYWwgKi8s
IFN0cmluZyAvKiByZXR1cm5SZXF1aXJlZCAqLywgU3RyaW5nIC8qIG9wdF9yZXR1cm5PcHRpb25h
bCAqLz4+IGNvbW1hbmQoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gZW51bVJlcXVpcmVkLCBP
cHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4mJiBvcHRfZW51bU9wdGlvbmFsLCBj
b25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0
ZXJPcHRpb25hbCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNjcsOSArMTY0LDkgQEAgcHJvdGVj
dGVkOgogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9j
YWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgY29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRl
RGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVy
bmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0
Y2hlcjsgfQpAQCAtMjE4LDkgKzIxNSw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI0Miw0MiArMjM3LDYzIEBAIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJDb21tYW5kRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90
b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
LSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0
byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUi
KSB7Ci0gICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiY29tbWFuZCIpIHsK
KyAgICAgICAgY29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1l
dGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICIn
IHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQordm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycykKIHsKKyAgICBhdXRvIGluX2VudW1SZXF1aXJlZF9qc29uID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJlbnVtUmVx
dWlyZWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fb3B0X2VudW1PcHRpb25hbF9qc29uID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJl
bnVtT3B0aW9uYWwiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX3BhcmFtZXRlclJlcXVpcmVkID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCks
ICJwYXJhbWV0ZXJSZXF1aXJlZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9vcHRfcGFyYW1ldGVy
T3B0aW9uYWwgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1l
dGVycy5nZXQoKSwgInBhcmFtZXRlck9wdGlvbmFsIl9zLCBmYWxzZSk7CisgICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5k
JyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+Y29tbWFuZChwcm90b2NvbF9jYWxsSWQsIGluX2VudW1SZXF1aXJlZF9qc29uLCBpbl9v
cHRfZW51bU9wdGlvbmFsX2pzb24sIGluX3BhcmFtZXRlclJlcXVpcmVkLCBpbl9vcHRfcGFyYW1l
dGVyT3B0aW9uYWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSBv
dXRfcmV0dXJuVmFsdWU7Ci0gICAgbV9hZ2VudC0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
ZXJyb3IsICZvdXRfcmV0dXJuVmFsdWUpOworICAgIGF1dG8gaW5fZW51bVJlcXVpcmVkID0gUHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlR5
cGVEb21haW46OkVudW0+KGluX2VudW1SZXF1aXJlZF9qc29uKTsKKyAgICBpZiAoIWluX2VudW1S
ZXF1aXJlZCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBl
bnVtUmVxdWlyZWQ6ICJfcywgaW5fZW51bVJlcXVpcmVkX2pzb24pKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOworICAgIGF1dG8gaW5fb3B0
X2VudW1PcHRpb25hbCA9IFByb3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihpbl9vcHRfZW51bU9wdGlvbmFsX2pz
b24pOwogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1
dG8gcmVzdWx0ID0gbV9hZ2VudC0+Y29tbWFuZCgqaW5fZW51bVJlcXVpcmVkLCBXVEZNb3ZlKGlu
X29wdF9lbnVtT3B0aW9uYWwpLCBpbl9wYXJhbWV0ZXJSZXF1aXJlZCwgaW5fb3B0X3BhcmFtZXRl
ck9wdGlvbmFsKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5l
cnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3Io
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtvdXRfZW51bVJlcXVpcmVk
LCBvdXRfb3B0X2VudW1PcHRpb25hbCwgb3V0X3JldHVyblJlcXVpcmVkLCBvdXRfb3B0X3JldHVy
bk9wdGlvbmFsXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2Nv
bF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9lbnVtUmVxdWlyZWQpKTsKKyAgICBpZiAoISFv
dXRfb3B0X2VudW1PcHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygiZW51bU9wdGlvbmFsIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKCpvdXRfb3B0X2VudW1PcHRpb25hbCkpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInJldHVyblJlcXVpcmVkIl9zLCBvdXRfcmV0dXJuUmVxdWlyZWQpOwor
ICAgIGlmICghIW91dF9vcHRfcmV0dXJuT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInJldHVybk9wdGlvbmFsIl9zLCBvdXRfb3B0X3JldHVybk9wdGlv
bmFsKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTMxOCw2ICszMzQsNyBAQCB2b2lkIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0
SWQsCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMjgsMTMgKzM0NSwx
OSBAQCBjbGFzcyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJv
bnRlbmRSb3V0ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFt
ZXRlcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIuCi0gICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKKyAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXJSZXF1aXJlZCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5k
L2V2ZW50IGV2ZW50LgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkIHsKICAg
ICAgICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAg
ICBXaGl0ZSA9IDUsCi0gICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9p
ZCBldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpOworICAgICAgICAg
ICAgU2hhcmVkUmVxdWlyZWQgPSAzLAorICAgICAgICAgICAgR3JleSA9IDQsCisgICAgICAgIH07
IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyUmVxdWlyZWQKKyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIg
cGFyYW1ldGVyICdwYXJhbWV0ZXJPcHRpb25hbCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50IGV2ZW50LgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsIHsKKyAgICAg
ICAgICAgIFNoYXJlZCA9IDAsCisgICAgICAgICAgICBTaGFyZWRPcHRpb25hbCA9IDUsCisgICAg
ICAgICAgICBHcmVlbiA9IDYsCisgICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyT3B0
aW9uYWwKKyAgICB2b2lkIGV2ZW50KFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtIGVudW1SZXF1
aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYgb3B0X2VudW1PcHRp
b25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRf
cGFyYW1ldGVyT3B0aW9uYWwpOwogcHJpdmF0ZToKICAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9u
dGVuZFJvdXRlcjsKIH07CkBAIC0zNzYsMTkgKzM5OSwyMyBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgRXZlbnREb21haW5Gcm9udGVuZERpc3Bh
dGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKK3ZvaWQg
RXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50KFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
JiYgb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29u
c3QgU3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBh
cmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX3BhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoZW51bVJlcXVpcmVkKSk7CisgICAgaWYgKCEhb3B0X2VudW1P
cHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1P
cHRpb25hbCJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgq
b3B0X2VudW1PcHRpb25hbCkpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJwYXJhbWV0ZXJSZXF1aXJlZCJfcywgcGFyYW1ldGVyUmVxdWlyZWQpOworICAgIGlmICghIW9w
dF9wYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoInBhcmFtZXRlck9wdGlvbmFsIl9zLCBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpOworICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90
b2NvbF9wYXJhbXNPYmplY3QpKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC00MjgsNyArNDU1LDkgQEAgdm9pZCBFdmVudERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVy
KQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQwLDcgKzQ2
OSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgog
bmFtZXNwYWNlIFR5cGVEb21haW4gewotZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bTsKK2VudW0g
Y2xhc3MgRW51bTsKIH0gLy8gVHlwZURvbWFpbgogLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRp
b25zLgogCkBAIC00NjAsMTIgKzQ4OSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVzcGFjZSBUeXBlRG9tYWlu
IHsKIAotZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bSB7CitlbnVtIGNsYXNzIEVudW0gewogICAg
IFNoYXJlZCA9IDAsCi0gICAgUmVkID0gMSwKLSAgICBHcmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMs
Ci19OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCisgICAgMSA9IDEsCisgICAgMiA9IDIs
Cit9OyAvLyBlbnVtIGNsYXNzIEVudW0KIAogfSAvLyBUeXBlRG9tYWluCiAKQEAgLTQ3OCw3ICs1
MDYsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWlu
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpU
eXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFs
PFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJv
dG9jb2w6OlR5cGVEb21haW46OkVudW0+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwogCkBAIC00OTIsNyArNTIwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwogCiAvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVE
b21haW4nIERvbWFpbgogdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiA6IEludEhhc2g8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHsgfTsKK3N0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiA6IEludEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4geyB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCkBAIC01MzAsOCAr
NTU4LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtPiA6IEludEhhc2g8SW4KICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU0MSwxNCArNTY4LDE2IEBAIG5h
bWVzcGFjZSBUZXN0SGVscGVycyB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tdID0gewogICAgICJzaGFyZWQiLAotICAgICJyZWQiLAorICAgICIxIiwK
KyAgICAiMiIsCisgICAgInNoYXJlZFJlcXVpcmVkIiwKKyAgICAiZ3JleSIsCisgICAgInNoYXJl
ZE9wdGlvbmFsIiwKICAgICAiZ3JlZW4iLAotICAgICJibHVlIiwKICAgICAiYmxhY2siLAorICAg
ICJyZWQiLAogICAgICJ3aGl0ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAi
eWVsbG93IiwKKyAgICAiYmx1ZSIsCiB9OwogCiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpIHsKQEAgLTU1OCwxNyArNTg3LDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIAog
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK09wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
ewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtOjpTaGFyZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06
OkJsdWUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06OlNoYXJl
ZCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6MSwKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6MiwKICAgICB9OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
MzsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1
ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKKyAg
ICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0pY29uc3RhbnRWYWx1
ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtNjI1LDcgKzY1Myw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlQ29tbWFuCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgY29tbWFuZChsb25nIHByb3RvY29sX2Nh
bGxJZCwgY29uc3QgU3RyaW5nJiBlbnVtUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X2VudW1P
cHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBv
cHRfcGFyYW1ldGVyT3B0aW9uYWwpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTY3MywyNiArNzAxLDQ3IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci12b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9y
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIGluX2VudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRf
ZW51bU9wdGlvbmFsLCBjb25zdCBTdHJpbmcmIGluX3BhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBT
dHJpbmcmIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCkKIHsKLSAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazplbnVtUmVxdWlyZWQ6ZW51bU9wdGlvbmFsOnBhcmFtZXRlclJlcXVpcmVkOnBhcmFtZXRl
ck9wdGlvbmFsOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInQ29tbWFuZERvbWFpbi5jb21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJu
VmFsdWUpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSBvdXRfZW51bVJlcXVpcmVkLCBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqb3V0X29wdF9lbnVtT3B0aW9uYWwsIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW4oYW5vbnltb3VzKSBvdXRfcmV0dXJuUmVxdWlyZWQsIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW4oYW5vbnltb3VzKSAqb3V0X29wdF9yZXR1cm5PcHRpb25hbCkgeworICAg
ICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9z
LCB0b1Byb3RvY29sU3RyaW5nKG91dF9lbnVtUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0
X29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfZW51bU9w
dGlvbmFsKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVy
blJlcXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9yZXR1cm5SZXF1aXJlZCkpOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFN0cmluZygicmV0dXJuT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJp
bmcoKm91dF9vcHRfcmV0dXJuT3B0aW9uYWwpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKICAgICB9OwogCi0gICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPiBvX2luX2VudW1SZXF1aXJlZCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bT4oaW5fZW51bVJlcXVpcmVkKTsKKyAgICBpZiAoIW9faW5fZW51bVJlcXVp
cmVkKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ2VudW1SZXF1aXJl
ZCcgb2YgbWV0aG9kICdDb21tYW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQi
X3MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtPiBvX2luX29wdF9lbnVtT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X2Vu
dW1PcHRpb25hbCkKKyAgICAgICAgb19pbl9vcHRfZW51bU9wdGlvbmFsID0gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihpbl9vcHRfZW51bU9wdGlvbmFsKTsK
KyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+IG9faW5f
cGFyYW1ldGVyUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbihhbm9ueW1vdXMpPihpbl9wYXJhbWV0ZXJSZXF1aXJlZCk7CisgICAgaWYgKCFvX2lu
X3BhcmFtZXRlclJlcXVpcmVkKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0
ZXIgJ3BhcmFtZXRlclJlcXVpcmVkJyBvZiBtZXRob2QgJ0NvbW1hbmREb21haW4uY29tbWFuZCcg
Y2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpPiBvX2luX29wdF9wYXJh
bWV0ZXJPcHRpb25hbDsKKyAgICBpZiAoISFpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAg
ICAgIG9faW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFs
KTsKKyAgICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGVudW1SZXF1aXJlZDpvX2luX2VudW1S
ZXF1aXJlZC52YWx1ZSgpIGVudW1PcHRpb25hbDooISFpbl9vcHRfZW51bU9wdGlvbmFsID8gJm9f
aW5fb3B0X2VudW1PcHRpb25hbC52YWx1ZSgpIDogbmlsKSBwYXJhbWV0ZXJSZXF1aXJlZDpvX2lu
X3BhcmFtZXRlclJlcXVpcmVkLnZhbHVlKCkgcGFyYW1ldGVyT3B0aW9uYWw6KCEhaW5fb3B0X3Bh
cmFtZXRlck9wdGlvbmFsID8gJm9faW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsLnZhbHVlKCkgOiBu
aWwpXTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC04ODcsMTYgKzkzNiwyMSBA
QCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIHJldHVybiBzZWxmOwogfQogCi0tICh2
b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVu
dERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCistICh2b2lk
KWV2ZW50V2l0aEVudW1SZXF1aXJlZDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pZW51bVJl
cXVpcmVkIGVudW1PcHRpb25hbDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKillbnVtT3B0
aW9uYWwgcGFyYW1ldGVyUmVxdWlyZWQ6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluKGFub255bW91
cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbEV2ZW50
RG9tYWluKGFub255bW91cykgKilwYXJhbWV0ZXJPcHRpb25hbAogewogICAgIGNvbnN0IEZyb250
ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVu
dFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJwYXJhbWV0ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAg
IHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVu
dCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlbnVtUmVxdWly
ZWQiX3MsIHRvUHJvdG9jb2xTdHJpbmcoZW51bVJlcXVpcmVkKSk7CisgICAgaWYgKGVudW1PcHRp
b25hbCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1PcHRp
b25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygoKmVudW1PcHRpb25hbCkpKTsKKyAgICBwcm90b2Nv
bF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRvUHJvdG9j
b2xTdHJpbmcocGFyYW1ldGVyUmVxdWlyZWQpKTsKKyAgICBpZiAocGFyYW1ldGVyT3B0aW9uYWwp
CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRp
b25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygoKnBhcmFtZXRlck9wdGlvbmFsKSkpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2Nv
bF9wYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKQEAgLTk0MywyMSArOTk3LDIwIEBAIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtKSB7CiAgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW1TaGFyZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCi0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1HcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bUJsdWUsCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0xLAorICAgIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtMiwKIH07CiAKIAogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9wdGlvbmFsCi0tICh2b2lkKWNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1
cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZCljb21tYW5kV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSBlbnVtUmVxdWlyZWQsIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtICplbnVtT3B0aW9uYWwsIFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW4oYW5vbnltb3VzKSByZXR1cm5SZXF1aXJlZCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpICpyZXR1cm5PcHRpb25hbCkpc3VjY2Vzc0NhbGxiYWNrIGVudW1SZXF1aXJl
ZDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pZW51bVJlcXVpcmVkIGVudW1PcHRpb25hbDoo
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKillbnVtT3B0aW9uYWwgcGFyYW1ldGVyUmVxdWly
ZWQ6KFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSlwYXJhbWV0ZXJSZXF1aXJl
ZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMp
ICopcGFyYW1ldGVyT3B0aW9uYWw7CiBAZW5kCiAKIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQogQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJX
aXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihU
ZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFt
ZXRlck9wdGlvbmFsOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1l
dGVyT3B0aW9uYWw7CiBAZW5kCiAKIApAQCAtMTA1MCwxMiArMTEwMywxMCBAQCBpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCiAg
ICAgc3dpdGNoKHZhbHVlKSB7CiAgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNo
YXJlZDoKICAgICAgICAgcmV0dXJuICJzaGFyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bVJlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgotICAgICAgICByZXR1cm4g
ImJsdWUiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTE6CisgICAgICAg
IHJldHVybiAiMSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMjoKKyAg
ICAgICAgcmV0dXJuICIyIl9zOwogICAgIH0KIH0KIApAQCAtMTA2NCwxMiArMTExNSwxMCBAQCBp
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbAogewogICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKICAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwotICAgIGlmICh2
YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
UmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1HcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOworICAgIGlmICh2YWx1ZSA9
PSAiMSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTE7CisgICAg
aWYgKHZhbHVlID09ICIyIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtMjsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCkBAIC0xMTE3LDE3ICsxMTY2LDE3
IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQogCi0rICh2b2lkKV9wYXJzZVR5cGVE
b21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKIAotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51
bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKKysgKHZvaWQp
X3BhcnNlRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
IHsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOwogICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQg
PSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bT4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1
bHQsIEAiVHlwZURvbWFpbkVudW0iKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVN
X1ZBTFVFKHJlc3VsdCwgQCJFbnVtIik7CiAgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAppbmRleCBlMmVkOWY4ODk0Y2U3NzZiMjcyZDYxMTNl
NTM2Y2FhNzQ2ZWJjYjg1Li5iZTk0YjM1OTQwMDMyYjNlOWEzMzZkNTQxMzQ0NzdiOTY1Y2QzYTU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZh
dGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChs
b25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xf
Y2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSAr
MTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9
IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRj
aChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3Bh
dGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpA
QCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBw
YXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5k
IikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWlu
LiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJ
ZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxs
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1
IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBE
b21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0g
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3
ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5h
bWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5z
cGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29t
bWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIy
IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQg
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9j
b2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2Nv
bF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFu
ZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29s
X2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggOTBlMTRlOGM3YmI0ZjA1MTUxM2NiZDdj
M2M2ZGM3Yjk2ZmNjMWE3NC4uODQ3YjQ5M2Y3MWM1N2U0MjczZDg0OTYyYmFlOWY2YzkyMGZkYzlk
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTcwLDcg
KzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxs
KTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgog
CkBAIC0xMjYsMTEgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KwogCiAKIApAQCAtMTcxLDkgKzE3NCw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjEs
NiArMjIyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CkBAIC0yMzEsOCArMjMzLDggQEAgY2xhc3MgRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIERh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIGRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcik7
Ci0gICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBwcmludENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxv
YWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENv
bG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWY8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3Vi
bGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVl
PiYmIHBheWxvYWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwogcHJpdmF0
ZToKICAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKIH07CkBAIC0yNzQsNTUg
KzI3Niw1NCBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBh
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VG
cm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0
X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIFJl
ZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKQog
ewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5k
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1l
cykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVt
bk5hbWVzKTsKLSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGltZXN0YW1wKQotICAgICAgICBwYXJhbXNP
YmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICBpZiAodmFs
dWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMp
OwotICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVuQ29s
b3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNj
cmVlbkNvbG9yKTsKLSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCAqcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRl
cnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBpZiAoISFvcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvcHRfY29sdW1uTmFtZXMucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X25vdGVzKQorICAgICAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG9wdF9ub3Rlcyk7CisgICAgaWYgKCEh
b3B0X3RpbWVzdGFtcCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgKm9wdF90aW1lc3RhbXApOworICAgIGlmICghIW9wdF92YWx1ZXMpCisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG9wdF92
YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3BheWxvYWQpCisgICAgICAg
IHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG9wdF9wYXlsb2Fk
LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zcWxFcnJvcikKKyAgICAgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvcHRfc3FsRXJyb3Iu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIG9wdF9zY3Jl
ZW5Db2xvcik7CisgICAgaWYgKCEhb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJvdG9j
b2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvcHRfYWx0ZXJu
YXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9wcmludENvbG9yKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
b3B0X3ByaW50Q29sb3IpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsKIAotICAgIG1fZnJvbnRl
bmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3ZvaWQgRGF0
YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpT
T046OlZhbHVlPiYmIHBheWxvYWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNx
bEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3Ip
CiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNl
LmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIHNxbEVycm9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29s
b3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5h
dGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShjb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZSh2YWx1ZXMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZN
b3ZlKHBheWxvYWQpKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFdURk1vdmUoc3FsRXJyb3IpKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKKyAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUoYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsKIAotICAgIG1f
ZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cisg
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zNjIsNyArMzYz
LDkgQEAgdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnIKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTM5MSw3ICszOTQsNyBAQCB1c2luZyBDb2xvckxpc3QgPSBKU09O
OjpBcnJheU9mPFN0cmluZz47CiBuYW1lc3BhY2UgRGF0YWJhc2UgewogCiAvKiBEYXRhYmFzZSBl
cnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3Mg
RXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51
bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQxOCwxNyArNDIxLDE3IEBAIHB1Ymxp
YzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0
IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHBy
b3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJj
b2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4o
KTsKICAgICAgICAgfQogCkBAIC00OTgsOCArNTAxLDcgQEAgcHVibGljOgogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzc4LDI5ICs3
ODAsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNv
bG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihw
cmludENvbG9yLCBAInByaW50Q29sb3IiKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9z
KTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJv
dG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoY29s
dW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVzKSkpOworICAgICAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXko
KCpjb2x1bW5OYW1lcykpKTsKICAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKICAgICBpZiAodGltZXN0YW1w
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAoKnRpbWVz
dGFtcCkpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCAoKnRpbWVzdGFtcCkpOwogICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZhbHVlcykgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZh
bHVlcykgdG9KU09OT2JqZWN0XSk7CiAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsoKnBheWxvYWQpIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpw
YXlsb2FkKSB0b0pTT05PYmplY3RdKTsKICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3FsRXJyb3IpIHRvSlNPTk9iamVj
dF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKICAgICBpZiAoc2NyZWVuQ29sb3IpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKCpzY3JlZW5D
b2xvcikpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgq
YWx0ZXJuYXRlQ29sb3JzKSkpOwogICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKCpwcmludENvbG9yKSk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwot
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJp
bnRDb2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJf
cywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50
KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIC0gKHZvaWQpZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6
KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMg
cGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNj
cmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJu
YXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgpAQCAtODE2LDIwICs4
MTgsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xv
ciwgQCJwcmludENvbG9yIik7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJp
bmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
IHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3Zh
bHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFs
dGVybmF0ZUNvbG9ycykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsK
KyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9h
ZCB0b0pTT05PYmplY3RdKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVjdCgi
c3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1z
T2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uLXJlc3VsdAppbmRleCAyOTRiYTkwODEyMThhMzUwMmQ5NmQ0NTVkNGQ2M2Qy
YjNmNWFhZTlhLi4zOWMzNjYzYWZmMmY2ZmI5YzBlYTdiODQ5Y2YzOTBhZmRhM2JmYmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTc0
LDcgKzc0LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBu
dWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgogCkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTM0LDExICsxMzQsMTQgQEAgcHVibGlj
OgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+Cisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOwpAQCAtMTQ2LDcgKzE0OSw3IEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI7CiAKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOwor
ICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlKCkg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTU0LDkgKzE1Nyw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2Ns
X2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2
b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRl
cm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDUsOSArMjA4LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI5LDM4ICsyMzAs
MzggQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKIH0KIAotdm9p
ZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2Nv
bF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwog
Ci0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgewotICAgICAgICBsb2FkUmVzb3Vy
Y2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0
aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICIn
IHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsg
cHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2UocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25N
ZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTMwMSw2
ICszMDIsNyBAQCB2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdAogCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMzUzLDE2ICszNTUsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVy
OjpyZXNvdXJjZUxvYWRlZCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtNDAyLDcgKzQwMyw5IEBAIHZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291
cmNlTG9hZGVkKCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQyMyw3ICs0MjYsNyBAQCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAKIG5hbWVzcGFjZSBOZXR3b3Jr
MiB7CiAKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2Ns
YXNzIE5ldHdvcmtFcnJvciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1Ymxp
YzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDUwLDE3ICs0NTMs
MTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwogICAgIHB1
YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+
JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2Ui
X3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRD
b2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCkBAIC01MzAsOCArNTMzLDcgQEAgcHVi
bGljOgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTg3LDcgKzU4OSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFjCiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2Uo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNjM1LDIxICs2Mzcs
MjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJ
ZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2Un
IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2Up
OwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtODUx
LDkgKzg1NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291
cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CmluZGV4IDQ1M2VmNmU0OTQ4ZWFiMDI1YWI1NjEz
NzhkMmI4YWE5NGY1NWM4OGQuLjU2ZWY2MzRkZTk4MDY4NTg2ZGJkY2QwODgxYjkxZDg0OWUyZmJh
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYz
LDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0y
MTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBA
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtMzYyLDggKzM2NSw3IEBAIHVzaW5nIFJlbW90ZU9iamVjdElkID0gU3RyaW5n
OwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
IAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggNWYyY2Q3OTMz
MDQyNDdlNzY1NWYzZTk4MWVhNzAwZjU3Yzc3MGZkOS4uOGVjZWNjNzAxMDM0MDRkYTdkYzI3OGNh
OTc1MTlhMmRlYmZjMDA1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNz
IEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMzMSw3ICszMzQsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiBuYW1lc3Bh
Y2UgUnVudGltZSB7CiAKIC8qIEtleSBwYXRoLiAqLwotY2xhc3MgS2V5UGF0aCA6IHB1YmxpYyBK
U09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEtleVBhdGggZmluYWwgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlw
ZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgogICAgIGVudW0gY2xhc3MgVHlwZSB7CkBAIC0z
MzksNiArMzQyLDcgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgPSAxLAogICAgICAgICBBcnJh
eSA9IDIsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCisKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLApAQCAtMzYzLDEwICsz
NjcsMTAgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKICAgICBwdWJs
aWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIGluX3R5
cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBl
U2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInR5cGUiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fdHlwZSkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAg
ICAgICB9CiAKQEAgLTM5MiwxNCArMzk2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAotICAg
IHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgdm9pZCBzZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBpbl9vcHRfc3RyaW5nKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0U3RyaW5nKCJzdHJpbmciX3MsIGluX29wdF9zdHJpbmcpOwogICAgIH0KIAotICAg
IHZvaWQgc2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAg
dm9pZCBzZXRBcnJheShSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGluX29wdF9hcnJheSkK
ICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXki
X3MsIFdURk1vdmUoaW5fb3B0X2FycmF5KSk7CiAgICAgfQogfTsKIApAQCAtNDE0LDcgKzQxOCw3
IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIHRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5
cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1
bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycwogCkBAIC00NTYsOCArNDYwLDcgQEAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEkK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAK
LSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTQ3OCwxNiArNDgxLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgewogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6
UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQog
ewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxs
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGU6OlN0cmluZywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSlj
b25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uLXJlc3VsdAppbmRleCAzNDhhY2U5M2JhYjA5NDdkYWY4NWI0NWY1OWM5ZmNhYTY3MDJk
ZTAwLi4wMGFhMzZmYTNkMDI0OTEzYzViOGQyNzM4MTFkYTVhMDE1NDgzMTI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2
YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBA
IHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5
LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzUyLDggKzM1NSw3IEBAIG5h
bWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAppbmRleCA3OWNiOTg1NDU5Zjg4MjQ1Njc3YzVlM2MyNjA1Zjcz
NDRlMTE2YmZjLi4zNGIxYWNiYmNhZWM4MTJkODRkMTY5ZmUzYjJiODI3MjU2N2FiZDQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQK
QEAgLTYzLDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4
LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzU3LDggKzM2MCw3IEBAIHVzaW5nIFJlbW90ZU9iamVj
dElkID0gaW50OwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggZDg4ODBj
NjNlMzM3OGM1Y2ZlMzA4Y2FmZGY4NGNjOTg3NDkyYmJmYy4uOTQwZjE1ODBiZGMxZDliY2E0NDAx
NDc0MTUyYTIzYmIyNTRiMTkwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0
CkBAIC02OCw3ICs2OCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRlYnVn
Z2VyIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KIApAQCAtMTI0LDExICsxMjQsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBl
Y3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKIAogCiAKQEAgLTE2OSw5ICsxNzIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgpAQCAtMjE5LDYgKzIyMCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjYyLDcgKzI2NCw2IEBAIGNsYXNzIEZyb250ZW5k
Um91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwMyw3ICsz
MDQsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTMzMSw3ICszMzQsNyBAQCB1c2luZyBMdWNreU51bWJlcnMgPSBK
U09OOjpBcnJheU9mPGludD47CiB1c2luZyBCYWJ5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz47CiB1c2luZyBOZXdPYmplY3RzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwogdXNpbmcgT2xkT2Jq
ZWN0cyA9IEpTT046OkFycmF5T2Y8aW50PjsKLXVzaW5nIFN0b3BSZWFzb25zID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPjsKK3VzaW5nIFN0b3BS
ZWFzb25zID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj47CiB9IC8v
IFJ1bnRpbWUKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtMzY1LDcgKzM2OCw3IEBAIE9wdGlv
bmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29u
c3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJp
bmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDE3LDggKzQyMCw3IEBA
IHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29u
PiA6IEludEhhc2g8SW5zcGVjdG9yOjpQCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00MzksMTYgKzQ0MSwxNiBAQCBTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnRGVidWdnZXIn
IERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlv
bmFsPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
CiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkRpZWQsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RmFp
bnRlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uOjpIdW5ncnksCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246
OkRpZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50
ZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwK
ICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGVi
dWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggM2EyYzIwNTI4MzA0
NGUwMDA2YjMzMWVlMzE1YjA0MzdhNGZhNWJmOS4uOTUxMTZiYzUwYWJmMjc5NDA2NDU5MDcxMGZj
ZDNlMjQ2YmYwYzU4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24t
cmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtNjks
NyArNjksNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVs
bCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
IApAQCAtMTI1LDExICsxMjUsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogCiAKQEAgLTE3MCw5ICsxNzMsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
ICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjIw
LDYgKzIyMSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMjYzLDcgKzI2NSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwog
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwNCw3ICszMDUsOSBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTM2Miw5ICszNjUsOSBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAn
UnVudGltZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK09wdGlv
bmFsPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CiB0ZW1w
bGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIAogfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDE4LDggKzQyMSw3IEBAIHN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiA6
IEludEhhc2g8SW5zCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC00NDQsMzMgKzQ0NiwzMyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCiAKIHRl
bXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1Bbmlt
YWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQ
aWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpDb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1
bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFsczo6SGVucywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgNDsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92
YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAg
ICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFs
dWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PFByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdn
ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZs
YW1pbmdvcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5p
bWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dl
ZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tp
XTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdAppbmRleCAzMjhmZWQyM2RjNGNhN2YxODg1
OTBiNjM0NGQ1YmY3ZTQ3M2RkYzAzLi5iYTlmMTdjNjI1MGRjZTA2OGNmOTQ2NTU5NDcwZGQ0NWI2
MTc3NDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyAr
NzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwp
OwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAK
QEAgLTEyNiwxMSArMTI2LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKIAogCkBAIC0xNzEsOSArMTc0LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAj
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMSw2
ICsyMjIsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTI2NCw3ICsyNjYsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMDUsNyArMzA2LDkgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC0zMzMsNyArMzM2LDcgQEAgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogCiAvLyBUeXBl
ZGVmcy4KIG5hbWVzcGFjZSBEYXRhYmFzZSB7Ci11c2luZyBFcnJvckxpc3QgPSBKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj47Cit1c2luZyBFcnJvckxp
c3QgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+OwogfSAvLyBEYXRh
YmFzZQogLy8gRW5kIG9mIHR5cGVkZWZzLgogCkBAIC0zNTEsNyArMzU0LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogbmFt
ZXNwYWNlIERhdGFiYXNlIHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC0zNzgsMTcgKzM4MSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VT
ZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0
KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDI0
LDEzICs0MjcsMTQgQEAgZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7CiAgICAgUmlnaHQgPSAzLAog
fTsgLy8gZW51bSBjbGFzcyBNb3VzZUJ1dHRvbgogCi1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0
aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxp
dHkgewogICAgICAgICBMVFIgPSA0LAogICAgICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0g
Y2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCiAgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKQEAgLTQ3NSw1OSArNDc5LDYwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhSZWY8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIGluX29wdF9jb2x1bW5OYW1lcykKICAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2YWx1ZSkp
OworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdU
Rk1vdmUoaW5fb3B0X2NvbHVtbk5hbWVzKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRCdXR0b25z
KFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbj4+IHZhbHVlKQorICAgIHZvaWQgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9vcHRfYnV0dG9ucykKICAgICB7
Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3Zl
KHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9z
LCBXVEZNb3ZlKGluX29wdF9idXR0b25zKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXREaXJlY3Rp
b25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICB2b2lkIHNldERpcmVjdGlvbmFsaXR5
KERpcmVjdGlvbmFsaXR5IGluX29wdF9kaXJlY3Rpb25hbGl0eSkKICAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGluX29wdF9kaXJlY3Rpb25h
bGl0eSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgaW5fb3B0X25vdGVzKQogICAgIHsKLSAg
ICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOworICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCBpbl9vcHRfbm90ZXMp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICB2b2lk
IHNldFRpbWVzdGFtcChkb3VibGUgaW5fb3B0X3RpbWVzdGFtcCkKICAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBpbl9vcHRfdGltZXN0
YW1wKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2
YWx1ZSkKKyAgICB2b2lkIHNldFZhbHVlcyhSZWY8SlNPTjo6T2JqZWN0PiYmIGluX29wdF92YWx1
ZXMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoInZhbHVlcyJf
cywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3Qo
InZhbHVlcyJfcywgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRQYXlsb2Fk
KFJlZjxKU09OOjpWYWx1ZT4mJiBpbl9vcHRfcGF5bG9hZCkKICAgICB7Ci0gICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKGluX29w
dF9wYXlsb2FkKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9yKFJl
ZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIGluX29wdF9lcnJvcikKICAgICB7Ci0gICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUp
KTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92
ZShpbl9vcHRfZXJyb3IpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUpCisgICAgdm9p
ZCBzZXRFcnJvckxpc3QoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiYmIGluX29w
dF9lcnJvckxpc3QpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
ZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUoaW5fb3B0X2Vycm9yTGlzdCkpOwogICAg
IH0KIH07CiAKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBE
aXJlY3Rpb25hbGl0eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAg
fTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCkBAIC01NjAs
NjYgKzU2NSw2NiBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5k
bGU7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1Nl
dD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGluX2NvbHVtbk5hbWVzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9w
ZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX2NvbHVtbk5hbWVzKSk7CiAgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVm
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5fYnV0
dG9ucykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1
dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKGluX2J1dHRvbnMpKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERp
cmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxp
dHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSBpbl9kaXJlY3Rpb25hbGl0
eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVj
dGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIFByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoaW5fZGlyZWN0aW9uYWxpdHkp
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBz
ZXROb3Rlcyhjb25zdCBTdHJpbmcmIGluX25vdGVzKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIGluX25vdGVzKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJs
ZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVz
dGFtcChkb3VibGUgaW5fdGltZXN0YW1wKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
dmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBp
bl90aW1lc3RhbXApOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0
VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0
KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKGluX3ZhbHVlcykpOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZjxKU09O
OjpWYWx1ZT4mJiBpbl9wYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fcGF5
bG9hZCkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZjxQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYmIGluX2Vycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fZXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4mIHNldEVycm9yTGlzdChSZWY8UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+JiYgaW5fZXJyb3JMaXN0KQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVydHlf
ZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgi
ZXJyb3JMaXN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImVy
cm9yTGlzdCJfcywgV1RGTW92ZShpbl9lcnJvckxpc3QpKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RXJyb3JMaXN0U2V0PigpOwogICAgICAgICB9CiAKQEAgLTY1NSw3ICs2NjAsNyBA
QCBwdWJsaWM6CiB9OwogCiAvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQg
Z2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1l
dGhvZHMuICovCi1jbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0
cyBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNjg1LDM4ICs2OTAsMzggQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKICAg
ICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJbnRl
Z2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2Vy
U2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIGluX2ludGVnZXIpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlf
aW50ZWdlcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJp
bnRlZ2VyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpbnRl
Z2VyIl9zLCBpbl9pbnRlZ2VyKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdl
clNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4m
IHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
cnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYgaW5fYXJyYXkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2Fy
cmF5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhcnJheSJfcywg
aW5fYXJyYXkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4m
IHNldFN0cmluZyhjb25zdCBTdHJpbmcmIGluX3N0cmluZykKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgaW5f
c3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBpbl92YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIl9zLCBpbl92YWx1ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNv
bnN0IFN0cmluZyYgaW5fb2JqZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCBpbl9vYmplY3QpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
NzQ3LDE3ICs3NTIsNjYgQEAgcHVibGljOgogICAgIH0KIH07CiAKKy8qIEFuIG9wZW4gb2JqZWN0
IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZpZWxkcy4gKi8KK2NsYXNzIER1bW15
T2JqZWN0IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVu
dW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAK
KyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgewor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIo
UmVmPC8qRHVtbXlPYmplY3QqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIER1bW15T2JqZWN0Owor
ICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8RHVtbXlPYmplY3Q+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKER1
bW15T2JqZWN0KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8RHVtbXlPYmplY3Q+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmPER1bW15T2JqZWN0PiByZXN1bHQgPSBEdW1teU9iamVj
dDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCiB9
IC8vIERhdGFiYXNlCiAKIG5hbWVzcGFjZSBUZXN0IHsKIAotY2xhc3MgUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIGZpbmFs
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRl
ckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0g
NCwKICAgICAgICAgUlRMID0gNSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
CisKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBEaXJlY3Rp
b25hbGl0eVNldCA9IDEgPDwgMCwKQEAgLTc4OSw1OSArODQzLDU5IEBAIHB1YmxpYzoKICAgICAg
ICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGly
ZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0
eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IGluX2RpcmVjdGlvbmFsaXR5
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0
aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgUHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbl9kaXJlY3Rpb25hbGl0eSkp
OwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9u
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBz
ZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b24+PiYmIGluX2J1dHRvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9idXR0b25z
KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmPEpTT046OkFycmF5
T2Y8U3RyaW5nPj4mJiBpbl9jb2x1bW5OYW1lcykKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFt
ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgV1RGTW92ZShpbl9jb2x1bW5OYW1lcykpOwogICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rl
c1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgaW5fbm90ZXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOb3Rlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSBpbl90aW1lc3RhbXApCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBT
ZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1
bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIGluX3RpbWVzdGFtcCk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4g
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5f
dmFsdWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9h
ZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYmIGluX3BheWxvYWQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwg
cHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShpbl9wYXlsb2FkKSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYg
c2V0RXJyb3IoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgaW5fZXJyb3IpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHBy
b3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoImVycm9yIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJl
cnJvciJfcywgV1RGTW92ZShpbl9lcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxFcnJvclNldD4oKTsKICAgICAgICAgfQogCkBAIC04ODYsMTUgKzk0MCwxNSBAQCBPcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0
dG9uPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VC
dXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
KTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmlu
ZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0
IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgogdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwor
T3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCiAKQEAgLTk0Niw4ICsxMDAwLDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gOiBJbnRIYXNoPEluc3BlY3QKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTk3MSw0NSArMTAyNCw0NSBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGF0
YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6
TGVmdCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b246Ok1pZGRsZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0
YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0YW50VmFsdWVzW2ldOwor
ICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0
YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQog
ewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9j
b2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJU
TCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQogICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitP
cHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMjsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSlj
b25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNl
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwogCiAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KQEAgLTEwMTcsMTUgKzEwNzAsMTUgQEAgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+IHBhcnNlRW4KIC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiAKIHRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90
b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10g
PSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFu
dFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAppbmRl
eCAyNmI3NTBjNjZiMjAxYjBkNGVjYmYyZjM3NDhhYjlmNDAzMDlhOWVjLi40ZGUwNGFiNGI2ZDkx
ZGM5N2YwMDYzNTlhOGQ2Yzc2ODBkOTJmMzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uLXJlc3VsdApAQCAtNjksNyArNjksNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJUZXN0IiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI1LDExICsxMjUsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MCw5ICsxNzMsNyBAQCB0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjIwLDYgKzIyMSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjYzLDcgKzI2NSw2IEBAIGNsYXNzIEZy
b250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMw
NCw3ICszMDUsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM0Niw3ICszNDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiBuYW1lc3BhY2Ug
VGVzdCB7CiAKIC8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFu
ZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50
aW1lIGNhc3QgaGVscGVycy4gKi8KLWNsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCBmaW5hbCA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLApAQCAtMzc2LDM4ICszNzksMzggQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3Mg
VHlwZU5lZWRpbmdDYXN0OwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbl9zdHJpbmcp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdT
ZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJzdHJpbmciX3MsIGluX3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFN0cmluZ1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBO
dW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCBpbl9udW1iZXIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoIm51bWJlciJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoIm51bWJlciJfcywg
aW5fbnVtYmVyKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmlt
YWxzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscyBpbl9hbmltYWxzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYW5pbWFscyJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGluX2FuaW1hbHMpKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IGluX2lkKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgaW5faWQpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUcmVlU2V0PiYgc2V0VHJlZShSZWY8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
JiYgaW5fdHJlZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoInRyZWUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoInRyZWUiX3MsIFdURk1vdmUoaW5fdHJlZSkpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTQ1Miw3ICs0NTUsNyBA
QCBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgewogICAgIEZsYW1pbmdvcyA9IDMsCiB9OyAvLyBl
bnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgZmluYWwgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKQEAgLTQ5OCwxMyArNTAxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QyPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWY8UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDI+JiYgaW5fb3B0X29iaikKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKGluX29wdF9vYmopKTsKICAg
ICB9CiB9OwogCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RC
YXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAt
NTUwLDI1ICs1NTMsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRPYmoo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVl
KQorICAgIHZvaWQgc2V0T2JqKFJlZjxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4m
JiBpbl9vcHRfb2JqKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0
KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0
T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUoaW5fb3B0X29iaikpOwogICAgIH0KIH07CiAKIH0gLy8g
VGVzdAogCi10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFJlZjxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpOwogc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqKTsKIH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gewotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09O
OjpWYWx1ZT4mJiB2YWx1ZSk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3Rv
Y29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gewordGVt
cGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0MT4gewogc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqKTsKIH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRp
bmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKIHN0YXRpYyB2b2lk
IGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwogCkBAIC01Nzks
OSArNTgyLDkgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgog
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihj
b25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC02MzUsOCAr
NjM4LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNh
c3RlZEFuaW1hbHM+IDogSW50SGFzaDxJbnNwZWN0b3IKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTY2MSwzMyArNjYzLDMzIEBAIFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdU
ZXN0JyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q2F0cywKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAogICAg
IH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0g
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5p
bWFscyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVf
dClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RmxhbWluZ29zLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
QEAgLTY5NiwxMTUgKzY5OCwxMDEgQEAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3AKIAogCiAKLXZv
aWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQordm9pZCBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9VTlVTRUQo
dmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUs
IHZhbHVlKTsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc1N0cmluZyhyZXN1bHQpOwotICAgIEFTU0VSVChjYXN0U3VjY2VlZGVkKTsKKyAgICBh
dXRvIHJlc3VsdCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIEFTU0VSVChyZXN1bHQpOwogICAg
IEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9
PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWluZ29zIik7Ci0jZWxzZSAvLyBBU1NFUlRfRU5B
QkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQK
KyNlbmRpZgogfQogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7
CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1
dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CiAgICAg
ewogICAgICAgICBhdXRvIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZCgic3RyaW5nIl9zKTsKICAg
ICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZh
bHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAgewogICAg
ICAgICBhdXRvIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZCgibnVtYmVyIl9zKTsKICAgICAgICAg
QVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0
czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShudW1iZXJQb3MtPnZhbHVlLmdldCgp
KTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShudW1iZXJQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAgewogICAgICAgICBhdXRvIGFu
aW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoImFuaW1hbHMiX3MpOwogICAgICAgICBBU1NFUlQoYW5p
bWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPFBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
YW5pbWFsc1Bvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gaWRQ
b3MgPSBvYmplY3QtPmZpbmQoImlkIl9zKTsKICAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVj
dC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9
CiAgICAgewogICAgICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOwog
ICAgICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KIAotICAgIGlu
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CisgICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0Nv
dW50ID0gNTsKICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKKyNlbmRpZgogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK1Jl
ZjxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShyZXN1bHQuZ2V0KCkpOwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmpl
Y3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09O
OjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+
YXNPYmplY3QoKTsKKyAgICBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOworICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+KHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpPYmplY3RCYXNlPihyZXN1bHQucmVsZWFzZU5vbk51
bGwoKSkpOwogfQogCiAKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6
VmFsdWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVl
KQogeworICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAg
ICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFTU0VSVChvYmplY3QpOwog
Ci0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICBzaXplX3QgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSAwOwogICAgIHsKICAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZp
bmQoIm9iaiJfcyk7CiAgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQo
KSk7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKICAgICAgICAg
RkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRv
SlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlm
CiB9CiAKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZh
bHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qy
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogeworICAg
IEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFT
U0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAg
QVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIG9i
amVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFTU0VSVChvYmplY3QpOwogCi0gICAgaW50
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICBzaXplX3QgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSAwOwogICAgIHsKICAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJf
cyk7CiAgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAgICAg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qx
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAg
ICAgICAgICBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgICAg
ICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChm
b3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKICAgICAgICAgRkFUQUwoIlVu
ZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4
IDdkNTc3NjJhOGZmOGJlNGE5YWU0OWRjOWVmNTQ3YjlkMzIxM2RjN2IuLmI5ODRjYjA3YzJiMzc1
NTFhMWY3N2MyM2IwOTQwNjIyOTE2ZWU1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNz
IEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMyMCw3ICszMjMsNyBAQCBjbGFzcyBPcGVuUGFy
YW1ldGVyczsKIAogbmFtZXNwYWNlIFRlc3QgewogCi1jbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgTm9PcGVuUGFyYW1ldGVycyBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtMzQ3LDE3ICszNTAsMTcgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE9uZVNldD4mIHNldE9uZShkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIGluX29uZSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgaW5fb25lKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28oZG91YmxlIGluX3R3bykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR3b1NldCksIHByb3Bl
cnR5X3R3b19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0
d28iX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInR3byJfcywg
aW5fdHdvKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHdvU2V0PigpOwogICAgICAg
ICB9CiAKQEAgLTM4NSw3ICszODgsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotY2xhc3MgT3Bl
blBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKK2NsYXNzIE9wZW5QYXJhbWV0ZXJz
IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdCB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQxMiwxNyArNDE1LDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgZnJpZW5kIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwogICAgIHB1YmxpYzoKIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShkb3VibGUgdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJsZSBpbl9hbHBoYSkKICAg
ICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFscGhhU2V0KSwg
cHJvcGVydHlfYWxwaGFfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERv
dWJsZSgiYWxwaGEiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUo
ImFscGhhIl9zLCBpbl9hbHBoYSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFscGhh
U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJldGFTZXQ+JiBz
ZXRCZXRhKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJldGFTZXQ+JiBz
ZXRCZXRhKGRvdWJsZSBpbl9iZXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgQmV0YVNldCksIHByb3BlcnR5X2JldGFfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYmV0YSJfcywgdmFsdWUpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYmV0YSJfcywgaW5fYmV0YSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDUwLDcgKzQ1Myw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5l
cmF0ZWQgYXMgb3Blbi4KLSAgICBOb25lIHN0YXRpYyBjb25zdCBjaGFyKiBBbHBoYTsKKyAgICBO
b25lIHN0YXRpYyBjb25zdCBjaGFyKiBhbHBoYUtleTsKIH07CiAKIH0gLy8gVGVzdApAQCAtNDk1
LDE0ICs0OTgsMTMgQEAgcHVibGljOgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogbmFtZXNwYWNlIFByb3RvY29sIHsKIAotY29uc3QgY2hh
ciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhhID0gImFs
cGhhIjsKK2NvbnN0IGNoYXIqIFByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6YWxwaGFL
ZXkgPSAiYWxwaGEiOwogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVy
c2lvbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CmluZGV4IGVmNzc4YTA2YzdmMjUx
MWY2YzIzNDE4NjcyNTUwNTY4MzdmYmZhM2YuLmMwNGFiNTk3M2U3NjYxMjFlNmJlODY5OTk4NTQx
ZDVhNzEyNzJlOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpz
b24tcmVzdWx0CkBAIC02OCw3ICs2OCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjQsMTEgKzEyNCwxNCBAQCBwcml2YXRlOgog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5j
bHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY5LDkgKzE3Miw3IEBAIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCkBAIC0yMTksNiArMjIwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjIsNyArMjY0LDYgQEAg
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApAQCAtMzAzLDcgKzMwNCw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzYyLDggKzM2NSw3IEBAIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9IDQyOwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlU2V0LmNwcAppbmRleCBkOTlmZjMxMWRiNzU1NGEyYjAxMzBkMjcyMjQ5YzdiMDRk
MDViOGE1Li42NWVhMzU0NTljNDQ5Nzg0MmI1OGFhM2I0ZDJjMTZhYmNjOWZlMTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcApAQCAtNTAxLDE0ICs1MDEsMTQg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9u
PiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG8KICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmaWVs
ZCA6IGN1cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcykKICAgICAgICAgICAgIG9wdGlvbmFs
RmllbGRzLT5hZGRJdGVtKGZpZWxkLmdldCgpKTsKIAotICAgICAgICBjdXJyZW50T2JqZWN0LT5z
ZXRGaWVsZHMoJmZpZWxkcy5nZXQoKSk7Ci0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldE9wdGlv
bmFsRmllbGRzKCZvcHRpb25hbEZpZWxkcy5nZXQoKSk7CisgICAgICAgIGN1cnJlbnRPYmplY3Qt
PnNldEZpZWxkcyhXVEZNb3ZlKGZpZWxkcykpOworICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRP
cHRpb25hbEZpZWxkcyhXVEZNb3ZlKG9wdGlvbmFsRmllbGRzKSk7CiAgICAgICAgIGN1cnJlbnRP
YmplY3QtPnNldENvbnN0cnVjdG9yTmFtZShjdXJyZW50U2hhcGUtPm1fY29uc3RydWN0b3JOYW1l
KTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0SXNJbXByZWNpc2UoY3VycmVudFNoYXBlLT5t
X2lzSW5EaWN0aW9uYXJ5TW9kZSk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRTaGFwZS0+bV9wcm90
bykgewogICAgICAgICAgICAgYXV0byBuZXh0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpLnJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIGN1cnJlbnRPYmplY3QtPnNldFByb3RvdHlwZVN0cnVjdHVyZSgmbmV4dE9iamVjdC5n
ZXQoKSk7CisgICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1Y3R1cmUo
bmV4dE9iamVjdC5jb3B5UmVmKCkpOwogICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IFdURk1v
dmUobmV4dE9iamVjdCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SlNPTlZhbHVlcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcAppbmRleCA0MDUy
MDc4ZjNmOTdjMmU5MGZhY2QwNTFkYzE5MmVjNjUyNjE0YzM0Li40OWIzZjBjYTJmZjFmOGU2OWQw
YzRmNDNhYWFjZmNjNmFiZGE2YjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFs
dWVzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcApAQCAtNTcsOSArNTcs
OSBAQCBlbnVtIGNsYXNzIFRva2VuIHsKICAgICBJbnZhbGlkLAogfTsKIAotY29uc3QgY2hhciog
Y29uc3QgbnVsbFN0cmluZyA9ICJudWxsIjsKLWNvbnN0IGNoYXIqIGNvbnN0IHRydWVTdHJpbmcg
PSAidHJ1ZSI7Ci1jb25zdCBjaGFyKiBjb25zdCBmYWxzZVN0cmluZyA9ICJmYWxzZSI7Citjb25z
dCBjaGFyKiBjb25zdCBudWxsVG9rZW4gPSAibnVsbCI7Citjb25zdCBjaGFyKiBjb25zdCB0cnVl
VG9rZW4gPSAidHJ1ZSI7Citjb25zdCBjaGFyKiBjb25zdCBmYWxzZVRva2VuID0gImZhbHNlIjsK
IAogYm9vbCBwYXJzZUNvbnN0VG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciog
ZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKQEAgLTIw
OSwxNSArMjA5LDE1IEBAIFRva2VuIHBhcnNlVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25z
dCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuU3RhcnQsCiAKICAgICBzd2l0Y2ggKCpz
dGFydCkgewogICAgIGNhc2UgJ24nOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0
LCBlbmQsIHRva2VuRW5kLCBudWxsU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tl
bihzdGFydCwgZW5kLCB0b2tlbkVuZCwgbnVsbFRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBU
b2tlbjo6TnVsbDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAndCc6Ci0gICAgICAgIGlmIChw
YXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIHRydWVTdHJpbmcpKQorICAgICAg
ICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0cnVlVG9rZW4pKQog
ICAgICAgICAgICAgcmV0dXJuIFRva2VuOjpCb29sVHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAnZic6Ci0gICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5F
bmQsIGZhbHNlU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5k
LCB0b2tlbkVuZCwgZmFsc2VUb2tlbikpCiAgICAgICAgICAgICByZXR1cm4gVG9rZW46OkJvb2xG
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAnWyc6CkBAIC0zODAsNyArMzgwLDcgQEAg
UmVmUHRyPEpTT046OlZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3Qg
VUNoYXIqIGVuZCwgY29uc3QgVUNoYXIKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
YXJyYXlOb2RlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIGRlcHRoICsgMSk7
CiAgICAgICAgICAgICBpZiAoIWFycmF5Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUoV1RGTW92ZShhcnJheU5vZGUpKTsK
KyAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUoYXJyYXlOb2RlLnJlbGVhc2VOb25OdWxsKCkp
OwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGxpc3QgdmFsdWUsIHdlIGV4cGVjdCBhIGNvbW1h
IG9yIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwpA
QCAtNDIwLDcgKzQyMCw3IEBAIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyCiAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5F
bmQsIGRlcHRoICsgMSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIFdURk1v
dmUodmFsdWUpKTsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0VmFsdWUoa2V5LCB2YWx1ZS5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CiAKICAgICAgICAg
ICAgIC8vIEFmdGVyIGEga2V5L3ZhbHVlIHBhaXIsIHdlIGV4cGVjdCBhIGNvbW1hIG9yIHRoZSBl
bmQgb2YgdGhlCkBAIC00ODksNDAgKzQ4OSwzOCBAQCBSZWY8VmFsdWU+IFZhbHVlOjpjcmVhdGUo
Y29uc3QgY2hhciogdmFsdWUpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmFsdWUodmFsdWUp
KTsKIH0KIAotYm9vbCBWYWx1ZTo6YXNWYWx1ZShSZWZQdHI8VmFsdWU+JiB2YWx1ZSkKK1JlZlB0
cjxWYWx1ZT4gVmFsdWU6OmFzVmFsdWUoKQogewotICAgIHZhbHVlID0gdGhpczsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gdGhpczsKIH0KIAotYm9vbCBWYWx1ZTo6YXNPYmplY3QoUmVm
UHRyPE9iamVjdD4mKQorUmVmUHRyPE9iamVjdD4gVmFsdWU6OmFzT2JqZWN0KCkKIHsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wgVmFsdWU6OmFzQXJy
YXkoUmVmUHRyPEFycmF5PiYpCitSZWZQdHI8QXJyYXk+IFZhbHVlOjphc0FycmF5KCkKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wgVmFsdWU6OnBh
cnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KQor
UmVmUHRyPFZhbHVlPiBWYWx1ZTo6cGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbikKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyB3aG9sZSBmaWxlIHNob3VsZCBqdXN0IHVzZSBTdHJpbmdWaWV3IGlu
c3RlYWQgb2YgVUNoYXIvbGVuZ3RoIGFuZCBhdm9pZCB1cGNvbnZlcnRpbmcuCi0gICAgYXV0byBj
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyhqc29uSW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygp
OworICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbikudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gY2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gc3RhcnQgKyBqc29uSW5wdXQubGVuZ3RoKCk7CisgICAgY29uc3QgVUNo
YXIqIGVuZCA9IHN0YXJ0ICsganNvbi5sZW5ndGgoKTsKICAgICBjb25zdCBVQ2hhciogdG9rZW5F
bmQ7CiAgICAgYXV0byByZXN1bHQgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwg
MCk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKGNvbnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHRva2VuRW5k
OyB2YWx1ZUVuZCA8IGVuZDsgKyt2YWx1ZUVuZCkgewogICAgICAgICBpZiAoIWlzU3BhY2VPck5l
d2xpbmUoKnZhbHVlRW5kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIG91dHB1dCA9IFdURk1vdmUocmVzdWx0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFZhbHVlOjpl
c2NhcGVTdHJpbmcoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgU3RyaW5nVmlldyBzdHJpbmcpCkBA
IC01NzMsOTQgKzU3MSwzMiBAQCBTdHJpbmcgVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1ib29sIFZhbHVlOjphc0Jvb2xlYW4o
Ym9vbCYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8Ym9vbD4gVmFsdWU6OmFzQm9vbGVhbigpIGNv
bnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpCb29sZWFuKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLmJvb2xlYW47Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIG1fdmFsdWUuYm9vbGVh
bjsKIH0KIAotYm9vbCBWYWx1ZTo6YXNEb3VibGUoZG91YmxlJiBvdXRwdXQpIGNvbnN0CitPcHRp
b25hbDxkb3VibGU+IFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IG1f
dmFsdWUubnVtYmVyOwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
RG91YmxlICYmIHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHJldHVybiBtX3ZhbHVlLm51bWJlcjsKIH0KIAotYm9vbCBWYWx1ZTo6YXNE
b3VibGUoZmxvYXQmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGludD4gVmFsdWU6OmFzSW50ZWdl
cigpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlLm51
bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUg
JiYgdHlwZSgpICE9IFR5cGU6OkludGVnZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV92YWx1ZS5udW1iZXIpOwogfQogCi1ib29s
IFZhbHVlOjphc0ludGVnZXIoaW50JiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGludD4obV92YWx1ZS5udW1iZXIp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVnZXIodW5zaWduZWQm
IG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlw
ZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAg
ICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0lu
dGVnZXIobG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBl
OjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV92YWx1ZS5udW1iZXIp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVnZXIodW5zaWduZWQg
bG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAm
JiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBv
dXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nIGxv
bmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYg
dHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0
cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzU3RyaW5nKFN0cmluZyYgb3V0cHV0
KSBjb25zdAorU3RyaW5nIFZhbHVlOjphc1N0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUo
KSAhPSBUeXBlOjpTdHJpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9
IG1fdmFsdWUuc3RyaW5nOwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbnVsbFN0
cmluZygpOworICAgIHJldHVybiBtX3ZhbHVlLnN0cmluZzsKIH0KIAogdm9pZCBWYWx1ZTo6d3Jp
dGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKQEAgLTcwMyw3NiArNjM5LDc0IEBA
IE9iamVjdEJhc2U6On5PYmplY3RCYXNlKCkKIHsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjphc09i
amVjdChSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KQorUmVmUHRyPE9iamVjdD4gT2JqZWN0QmFzZTo6
YXNPYmplY3QoKQogewogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3QpID09IHNpemVv
ZihPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8
T2JqZWN0Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLU9iamVjdCogT2JqZWN0QmFz
ZTo6b3BlbkFjY2Vzc29ycygpCi17Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdCkg
PT0gc2l6ZW9mKE9iamVjdEJhc2UpLCBjYW5ub3RfY2FzdCk7Ci0KICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8T2JqZWN0Kj4odGhpcyk7CiB9CiAKIHNpemVfdCBPYmplY3RCYXNlOjptZW1vcnlDb3N0
KCkgY29uc3QKIHsKICAgICBzaXplX3QgbWVtb3J5Q29zdCA9IFZhbHVlOjptZW1vcnlDb3N0KCk7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fbWFwKSB7Ci0gICAgICAgIG1lbW9yeUNv
c3QgKz0gZW50cnkua2V5LnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSkK
LSAgICAgICAgICAgIG1lbW9yeUNvc3QgKz0gZW50cnkudmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAg
ICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fbWFwKQorICAgICAgICBtZW1vcnlD
b3N0ICs9IGVudHJ5LmtleS5zaXplSW5CeXRlcygpICsgZW50cnkudmFsdWUtPm1lbW9yeUNvc3Qo
KTsKICAgICByZXR1cm4gbWVtb3J5Q29zdDsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRCb29s
ZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8Ym9v
bD4gT2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVlLT5hc0Jvb2xlYW4ob3V0
cHV0KTsKKyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzQm9vbGVh
bigpOwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUs
IFN0cmluZyYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8ZG91YmxlPiBPYmplY3RCYXNlOjpnZXRE
b3VibGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFs
dWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNTdHJpbmcob3V0cHV0KTsKKyAgICBhdXRvIHZhbHVl
ID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzRG91YmxlKCk7CiB9CiAKLWJvb2wgT2JqZWN0
QmFzZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdD4mIG91dHB1
dCkgY29uc3QKK09wdGlvbmFsPGludD4gT2JqZWN0QmFzZTo6Z2V0SW50ZWdlcihjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdl
dFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHZhbHVlLT5hc09iamVjdChvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1l
KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiB2YWx1ZS0+YXNJbnRlZ2VyKCk7CiB9CiAKLWJvb2wgT2JqZWN0QmFzZTo6Z2V0QXJyYXko
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXk+JiBvdXRwdXQpIGNvbnN0CitTdHJpbmcg
T2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBS
ZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzQXJyYXkob3V0cHV0KTsK
KyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKCk7CiB9
CiAKLWJvb2wgT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8
VmFsdWU+JiBvdXRwdXQpIGNvbnN0CitSZWZQdHI8T2JqZWN0PiBPYmplY3RCYXNlOjpnZXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0
ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKG5hbWUpOworICAgIGF1dG8gdmFsdWUgPSBn
ZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7Cit9CisKK1JlZlB0cjxBcnJheT4gT2JqZWN0
QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGF1dG8gdmFs
dWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gdmFsdWUtPmFzQXJyYXkoKTsKK30KKworUmVmUHRyPFZhbHVlPiBP
YmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgYXV0
byBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsKICAgICBpZiAoZmluZFJlc3VsdCA9PSBt
X21hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gZmluZFJl
c3VsdC0+dmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZS5jb3B5UmVmKCk7CiB9CiAKIHZvaWQgT2JqZWN0
QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTc5OCw4ICs3MzIsNiBAQCB2b2lk
IE9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CiAKIE9i
amVjdEJhc2U6Ok9iamVjdEJhc2UoKQogICAgIDogVmFsdWUoVHlwZTo6T2JqZWN0KQotICAgICwg
bV9tYXAoKQotICAgICwgbV9vcmRlcigpCiB7CiB9CiAKQEAgLTgwNywxNyArNzM5LDE2IEBAIEFy
cmF5QmFzZTo6fkFycmF5QmFzZSgpCiB7CiB9CiAKLWJvb2wgQXJyYXlCYXNlOjphc0FycmF5KFJl
ZlB0cjxBcnJheT4mIG91dHB1dCkKK1JlZlB0cjxBcnJheT4gQXJyYXlCYXNlOjphc0FycmF5KCkK
IHsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXlCYXNlKSA9PSBzaXplb2YoQXJyYXkp
LCBjYW5ub3RfY2FzdCk7Ci0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8QXJyYXkqPih0aGlzKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXkqPih0aGlzKTsK
IH0KIAogdm9pZCBBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNv
bnN0CiB7CiAgICAgb3V0cHV0LmFwcGVuZCgnWycpOwotICAgIGZvciAoVmVjdG9yPFJlZlB0cjxW
YWx1ZT4+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVu
ZCgpOyArK2l0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gbV9t
YXAuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKGl0ICE9IG1fbWFwLmJlZ2luKCkpCiAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKCcsJyk7CiAgICAgICAgICgqaXQpLT53cml0ZUpTT04ob3V0
cHV0KTsKQEAgLTgyNywxMSArNzU4LDEwIEBAIHZvaWQgQXJyYXlCYXNlOjp3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAogCiBBcnJheUJhc2U6OkFycmF5QmFzZSgpCiAgICAg
OiBWYWx1ZShUeXBlOjpBcnJheSkKLSAgICAsIG1fbWFwKCkKIHsKIH0KIAotUmVmUHRyPFZhbHVl
PiBBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpIGNvbnN0CitSZWY8VmFsdWU+IEFycmF5QmFz
ZTo6Z2V0KHNpemVfdCBpbmRleCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbV9tYXAuc2l6ZSgpKTsKICAgICByZXR1cm4gbV9t
YXBbaW5kZXhdOwpAQCAtODUwLDEwICs3ODAsOCBAQCBSZWY8QXJyYXk+IEFycmF5OjpjcmVhdGUo
KQogc2l6ZV90IEFycmF5QmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IG1l
bW9yeUNvc3QgPSBWYWx1ZTo6bWVtb3J5Q29zdCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgaXRl
bSA6IG1fbWFwKSB7Ci0gICAgICAgIGlmIChpdGVtKQotICAgICAgICAgICAgbWVtb3J5Q29zdCAr
PSBpdGVtLT5tZW1vcnlDb3N0KCk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6
IG1fbWFwKQorICAgICAgICBtZW1vcnlDb3N0ICs9IGl0ZW0tPm1lbW9yeUNvc3QoKTsKICAgICBy
ZXR1cm4gbWVtb3J5Q29zdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSlNPTlZh
bHVlcy5oIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCmluZGV4IGViYWJjNDQ5Zjg4MGIz
OWQzZmFkZTc4Y2Q2MWIxYzRkNWUwZTY4NjMuLjQzMDc0NTNkOWNjOGY4OGNjMTY5OWNkODg1NzIx
Njg3N2ZkYzliMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmgKQEAgLTkyLDIyICs5MiwxNSBAQCBwdWJsaWM6
CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBpc051
bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6TnVsbDsgfQogCi0gICAgYm9vbCBh
c0Jvb2xlYW4oYm9vbCYpIGNvbnN0OwotICAgIGJvb2wgYXNJbnRlZ2VyKGludCYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIo
bG9uZyYpIGNvbnN0OwotICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcgbG9uZyYpIGNvbnN0OwotICAg
IGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdl
cih1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGRvdWJsZSYp
IGNvbnN0OwotICAgIGJvb2wgYXNEb3VibGUoZmxvYXQmKSBjb25zdDsKLSAgICBib29sIGFzU3Ry
aW5nKFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgYXNWYWx1ZShSZWZQdHI8VmFsdWU+Jik7Cisg
ICAgT3B0aW9uYWw8Ym9vbD4gYXNCb29sZWFuKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8aW50PiBh
c0ludGVnZXIoKSBjb25zdDsKKyAgICBPcHRpb25hbDxkb3VibGU+IGFzRG91YmxlKCkgY29uc3Q7
CisgICAgU3RyaW5nIGFzU3RyaW5nKCkgY29uc3Q7CisgICAgUmVmUHRyPFZhbHVlPiBhc1ZhbHVl
KCk7CisgICAgdmlydHVhbCBSZWZQdHI8T2JqZWN0PiBhc09iamVjdCgpOworICAgIHZpcnR1YWwg
UmVmUHRyPEFycmF5PiBhc0FycmF5KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXNPYmplY3QoUmVm
UHRyPE9iamVjdD4mKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXNBcnJheShSZWZQdHI8QXJyYXk+Jik7
Ci0KLSAgICBzdGF0aWMgYm9vbCBwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uSW5wdXQsIFJl
ZlB0cjxWYWx1ZT4mIG91dHB1dCk7CisgICAgc3RhdGljIFJlZlB0cjxWYWx1ZT4gcGFyc2VKU09O
KGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2b2lkIGVzY2FwZVN0cmluZyhTdHJpbmdCdWls
ZGVyJiwgU3RyaW5nVmlldyk7CiAKICAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CkBA
IC0xNzIsOTUgKzE2NSw2MyBAQCBwcml2YXRlOgogCiBjbGFzcyBXVEZfRVhQT1JUX1BSSVZBVEUg
T2JqZWN0QmFzZSA6IHB1YmxpYyBWYWx1ZSB7CiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxWYWx1ZT4+IERpY3Rpb25hcnk7CisgICAgdXNpbmcgRGF0YVN0b3Jh
Z2UgPSBIYXNoTWFwPFN0cmluZywgUmVmPFZhbHVlPj47CisgICAgdXNpbmcgT3JkZXJTdG9yYWdl
ID0gVmVjdG9yPFN0cmluZz47CiAKIHB1YmxpYzoKLSAgICB0eXBlZGVmIERpY3Rpb25hcnk6Oml0
ZXJhdG9yIGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3Ig
Y29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBEYXRhU3RvcmFnZTo6aXRlcmF0
b3I7CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBEYXRhU3RvcmFnZTo6Y29uc3RfaXRlcmF0
b3I7CiAKLSAgICBPYmplY3QqIG9wZW5BY2Nlc3NvcnMoKTsKKyAgICBSZWZQdHI8T2JqZWN0PiBh
c09iamVjdCgpIGZpbmFsOwogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBmaW5hbDsK
IAogcHJvdGVjdGVkOgogICAgIH5PYmplY3RCYXNlKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFz
T2JqZWN0KFJlZlB0cjxPYmplY3Q+JiBvdXRwdXQpIG92ZXJyaWRlOwotCiAgICAgLy8gRklYTUU6
IHVzZSB0ZW1wbGF0ZXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBzZXQqKCkg
bWV0aG9kcy4KICAgICB2b2lkIHNldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKTsK
ICAgICB2b2lkIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQpOwogICAgIHZvaWQg
c2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKICAgICB2b2lkIHNldFN0cmlu
Zyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFsdWU+JiYpOwotICAgIHZvaWQgc2V0T2JqZWN0
KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdEJhc2U+JiYpOwotICAgIHZvaWQgc2V0
QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXlCYXNlPiYmKTsKKyAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPFZhbHVlPiYmKTsKKyAgICB2b2lkIHNl
dE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxPYmplY3RCYXNlPiYmKTsKKyAgICB2b2lk
IHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEFycmF5QmFzZT4mJik7CiAKICAgICBp
dGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IHVzZSB0ZW1wbGF0
ZXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBnZXQqKCkgbWV0aG9kcy4KLSAg
ICBib29sIGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgVCYgb3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsK
LSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZShvdXRwdXQpOwotICAgIH0K
LSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBUJiBvdXRwdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwot
ICAgICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcihvdXRwdXQpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IE9wdGlvbmFsPFQ+IGdldE51bWJlcihjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAg
ICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzRG91
YmxlKHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgYm9vbCBnZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3Q7Ci0gICAgYm9vbCBnZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0PiYpIGNvbnN0OwotICAgIGJvb2wgZ2V0QXJyYXko
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXk+JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRW
YWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mKSBjb25zdDsKKyAgICBPcHRp
b25hbDxib29sPiBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgT3B0
aW9uYWw8ZG91YmxlPiBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBP
cHRpb25hbDxpbnQ+IGdldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBT
dHJpbmcgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPE9i
amVjdD4gZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPEFy
cmF5PiBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFJlZlB0cjxWYWx1
ZT4gZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVy
JiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXImIG91dHB1dCkgY29uc3QgZmluYWw7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IG1fbWFwLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQo
KTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVn
aW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVu
ZCgpOyB9CiAKLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQor
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KIAogcHJv
dGVjdGVkOgogICAgIE9iamVjdEJhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBEaWN0aW9uYXJ5IG1f
bWFwOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fb3JkZXI7CisgICAgRGF0YVN0b3JhZ2UgbV9tYXA7
CisgICAgT3JkZXJTdG9yYWdlIG1fb3JkZXI7CiB9OwogCiBjbGFzcyBPYmplY3QgOiBwdWJsaWMg
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8
T2JqZWN0PiBjcmVhdGUoKTsKIAotICAgIHVzaW5nIE9iamVjdEJhc2U6OmFzT2JqZWN0OwotCiAg
ICAgLy8gVGhpcyBjbGFzcyBleHBlY3RlZCBub24tY3ljbGljIHZhbHVlcywgYXMgd2UgY2Fubm90
IHNlcmlhbGl6ZSBjeWNsZXMgaW4gSlNPTi4KICAgICB1c2luZyBPYmplY3RCYXNlOjpzZXRCb29s
ZWFuOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OnNldEludGVnZXI7CkBAIC0yNzQsNyArMjM1LDYg
QEAgcHVibGljOgogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEJvb2xlYW47CiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6Z2V0SW50ZWdlcjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXREb3VibGU7
Ci0gICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0TnVtYmVyOwogICAgIHVzaW5nIE9iamVjdEJhc2U6
OmdldFN0cmluZzsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRPYmplY3Q7CiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6Z2V0QXJyYXk7CkBAIC0yOTAsNDkgKzI1MCw0OSBAQCBwdWJsaWM6CiAKIAog
Y2xhc3MgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QmFzZSA6IHB1YmxpYyBWYWx1ZSB7Citwcml2
YXRlOgorICAgIHVzaW5nIERhdGFTdG9yYWdlID0gVmVjdG9yPFJlZjxWYWx1ZT4+OworCiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFZhbHVlPj46Oml0ZXJhdG9yIGl0ZXJhdG9y
OwotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxWYWx1ZT4+Ojpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKKyAgICB1c2luZyBpdGVyYXRvciA9IERhdGFTdG9yYWdlOjppdGVyYXRvcjsK
KyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IERhdGFTdG9yYWdlOjpjb25zdF9pdGVyYXRvcjsK
IAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX21hcC5zaXplKCkpOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLnNpemUoKTsgfQogCi0gICAgUmVmUHRyPFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KSBj
b25zdDsKKyAgICBSZWY8VmFsdWU+IGdldChzaXplX3QgaW5kZXgpIGNvbnN0OwogCiAgICAgc2l6
ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBmaW5hbDsKIAorICAgIFJlZlB0cjxBcnJheT4gYXNBcnJh
eSgpIGZpbmFsOworCiBwcm90ZWN0ZWQ6CiAgICAgfkFycmF5QmFzZSgpIG92ZXJyaWRlOwogCi0g
ICAgYm9vbCBhc0FycmF5KFJlZlB0cjxBcnJheT4mKSBvdmVycmlkZTsKLQogICAgIHZvaWQgcHVz
aEJvb2xlYW4oYm9vbCk7CiAgICAgdm9pZCBwdXNoSW50ZWdlcihpbnQpOwogICAgIHZvaWQgcHVz
aERvdWJsZShkb3VibGUpOwogICAgIHZvaWQgcHVzaFN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAg
ICB2b2lkIHB1c2hWYWx1ZShSZWZQdHI8VmFsdWU+JiYpOwotICAgIHZvaWQgcHVzaE9iamVjdChS
ZWZQdHI8T2JqZWN0QmFzZT4mJik7Ci0gICAgdm9pZCBwdXNoQXJyYXkoUmVmUHRyPEFycmF5QmFz
ZT4mJik7Ci0KLSAgICB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgcHVzaFZhbHVlKFJlZjxWYWx1ZT4mJik7CisgICAgdm9pZCBw
dXNoT2JqZWN0KFJlZjxPYmplY3RCYXNlPiYmKTsKKyAgICB2b2lkIHB1c2hBcnJheShSZWY8QXJy
YXlCYXNlPiYmKTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4o
KTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAgICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICB2
b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IGZpbmFsOwogCiBwcm90
ZWN0ZWQ6CiAgICAgQXJyYXlCYXNlKCk7CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlZlB0cjxW
YWx1ZT4+IG1fbWFwOworICAgIERhdGFTdG9yYWdlIG1fbWFwOwogfTsKIAotY2xhc3MgQXJyYXkg
OiBwdWJsaWMgQXJyYXlCYXNlIHsKK2NsYXNzIEFycmF5IGZpbmFsIDogcHVibGljIEFycmF5QmFz
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8QXJyYXk+IGNy
ZWF0ZSgpOwogCi0gICAgdXNpbmcgQXJyYXlCYXNlOjphc0FycmF5OwotCiAgICAgLy8gVGhpcyBj
bGFzcyBleHBlY3RlZCBub24tY3ljbGljIHZhbHVlcywgYXMgd2UgY2Fubm90IHNlcmlhbGl6ZSBj
eWNsZXMgaW4gSlNPTi4KICAgICB1c2luZyBBcnJheUJhc2U6OnB1c2hCb29sZWFuOwogICAgIHVz
aW5nIEFycmF5QmFzZTo6cHVzaEludGVnZXI7CkBAIC0zNDgsNyArMzA4LDYgQEAgcHVibGljOgog
ICAgIHVzaW5nIEFycmF5QmFzZTo6ZW5kOwogfTsKIAotCiBpbmxpbmUgT2JqZWN0QmFzZTo6aXRl
cmF0b3IgT2JqZWN0QmFzZTo6ZmluZChjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJu
IG1fbWFwLmZpbmQobmFtZSk7CkBAIC0zNzksMjMgKzMzOCwyMCBAQCBpbmxpbmUgdm9pZCBPYmpl
Y3RCYXNlOjpzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgIHNldFZhbHVlKG5hbWUsIFZhbHVlOjpjcmVhdGUodmFsdWUpKTsKIH0KIAotaW5saW5l
IHZvaWQgT2JqZWN0QmFzZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFs
dWU+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZjxWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAg
IGlmIChtX21hcC5zZXQobmFtZSwgV1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCiAgICAgICAg
IG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKK2lu
bGluZSB2b2lkIE9iamVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxP
YmplY3RCYXNlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFw
LnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5h
cHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0
IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIE9i
amVjdEJhc2U6OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEFycmF5QmFzZT4mJiB2
YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIGlmIChtX21hcC5zZXQobmFtZSwgV1RG
TW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwog
fQpAQCAtNDIwLDI2ICszNzYsMjMgQEAgaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgbV9tYXAuYXBwZW5kKFZhbHVlOjpjcmVhdGUodmFs
dWUpKTsKIH0KIAotaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoVmFsdWUoUmVmUHRyPFZhbHVl
PiYmIHZhbHVlKQoraW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoVmFsdWUoUmVmPFZhbHVlPiYm
IHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAuYXBwZW5kKFdURk1vdmUo
dmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFJlZlB0cjxP
YmplY3RCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFJl
ZjxPYmplY3RCYXNlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAu
YXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNo
QXJyYXkoUmVmUHRyPEFycmF5QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5QmFzZTo6
cHVzaEFycmF5KFJlZjxBcnJheUJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsK
ICAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotY2xhc3MgQXJyYXlPZiA6IHB1YmxpYyBBcnJheUJhc2UgeworY2xhc3MgQXJyYXlPZiBm
aW5hbCA6IHB1YmxpYyBBcnJheUJhc2UgewogcHJpdmF0ZToKICAgICBBcnJheU9mKCkgeyB9CiAK
QEAgLTQ1MCw3ICs0MDMsNyBAQCBwcml2YXRlOgogICAgIH0KIAogcHVibGljOgotICAgIHZvaWQg
YWRkSXRlbShSZWZQdHI8VD4mJiB2YWx1ZSkKKyAgICB2b2lkIGFkZEl0ZW0oUmVmPFQ+JiYgdmFs
dWUpCiAgICAgewogICAgICAgICBjYXN0ZWRBcnJheSgpLnB1c2hWYWx1ZShXVEZNb3ZlKHZhbHVl
KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlv
bm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3Bw
CmluZGV4IDhkYzc2ZmEyZTU5ZWE2N2UwMjE3MzhjMzExYTM1NzdmNGQzNmU2OTEuLmY4OGNhZGE2
NjBmMzlhZGVmYTAwNmQwOTVlYzU4N2ZiMjkzNDYyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKQEAgLTU0LDE0ICs1NCwxNCBAQCBBcHBsaWNhdGlv
bk1hbmlmZXN0IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QoY29uc3Qg
U3RyaW5nJiB0ZXh0LAogewogICAgIG1fbWFuaWZlc3RVUkwgPSBtYW5pZmVzdFVSTDsKIAotICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4ganNvblZhbHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih0ZXh0LCBqc29uVmFsdWUpKSB7CisgICAgYXV0byBqc29uVmFsdWUgPSBKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKHRleHQpOworICAgIGlmICghanNvblZhbHVlKSB7CiAgICAgICAgIGxv
Z0RldmVsb3Blcldhcm5pbmcoIlRoZSBtYW5pZmVzdCBpcyBub3QgdmFsaWQgSlNPTiBkYXRhLiJf
cyk7CiAgICAgICAgIGpzb25WYWx1ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgfQog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWFuaWZlc3Q7Ci0gICAgaWYgKCFqc29uVmFsdWUt
PmFzT2JqZWN0KG1hbmlmZXN0KSkgeworICAgIGF1dG8gbWFuaWZlc3QgPSBqc29uVmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgaWYgKCFtYW5pZmVzdCkgewogICAgICAgICBsb2dEZXZlbG9wZXJXYXJu
aW5nKCJUaGUgbWFuaWZlc3QgaXMgbm90IGEgSlNPTiB2YWx1ZSBvZiB0eXBlIFwib2JqZWN0XCIu
Il9zKTsKICAgICAgICAgbWFuaWZlc3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIH0K
QEAgLTk2LDEyICs5NiwxMiBAQCB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OmxvZ0Rl
dmVsb3Blcldhcm5pbmcoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogCiBVUkwgQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlcjo6cGFyc2VTdGFydFVSTChjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0
LCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWU7Ci0gICAgaWYgKCFtYW5pZmVzdC5nZXRWYWx1ZSgic3RhcnRfdXJsIiwgdmFsdWUpKQorICAg
IGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZSgic3RhcnRfdXJsIl9zKTsKKyAgICBpZiAo
IXZhbHVlKQogICAgICAgICByZXR1cm4gZG9jdW1lbnRVUkw7CiAKLSAgICBTdHJpbmcgc3RyaW5n
VmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFsdWUp
IHsKICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoInN0YXJ0X3VybCJfcyk7
CiAgICAgICAgIHJldHVybiBkb2N1bWVudFVSTDsKICAgICB9CkBAIC0xMjcsMTIgKzEyNywxMiBA
QCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VTdGFydFVSTChjb25zdCBKU09O
OjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdAogCiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5
IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlRGlzcGxheShjb25zdCBKU09OOjpPYmpl
Y3QmIG1hbmlmZXN0KQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYg
KCFtYW5pZmVzdC5nZXRWYWx1ZSgiZGlzcGxheSJfcywgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUg
PSBtYW5pZmVzdC5nZXRWYWx1ZSgiZGlzcGxheSJfcyk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXk6OkJyb3dzZXI7CiAKLSAgICBT
dHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUp
KSB7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIGlmICgh
c3RyaW5nVmFsdWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoImRp
c3BsYXkiX3MpOwogICAgICAgICByZXR1cm4gQXBwbGljYXRpb25NYW5pZmVzdDo6RGlzcGxheTo6
QnJvd3NlcjsKICAgICB9CkBAIC0xOTUsMTIgKzE5NSwxMiBAQCBVUkwgQXBwbGljYXRpb25NYW5p
ZmVzdFBhcnNlcjo6cGFyc2VTY29wZShjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25z
dCBVUgogewogICAgIFVSTCBkZWZhdWx0U2NvcGUgeyBzdGFydFVSTCwgIi4vIiB9OwogCi0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZhbHVlKCJz
Y29wZSIsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoInNjb3Bl
Iik7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRTY29wZTsKIAotICAg
IFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1
ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYg
KCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygi
c2NvcGUiX3MpOwogICAgICAgICByZXR1cm4gZGVmYXVsdFNjb3BlOwogICAgIH0KQEAgLTIzMSwx
MiArMjMxLDEyIEBAIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVNjb3BlKGNv
bnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSCiAKIFN0cmluZyBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZUdlbmVyaWNTdHJpbmcoY29uc3QgSlNPTjo6T2JqZWN0JiBt
YW5pZmVzdCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZhbHVlKHByb3BlcnR5TmFtZSwg
dmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZShwcm9wZXJ0eU5hbWUp
OworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAg
YXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFs
dWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcocHJvcGVydHlOYW1l
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAppbmRleCAz
YjI1ZDA2YjEyM2ExYTUxYTBhMmFjZmI0ZjY1NmY4ZDk0YWRiM2ZjLi42YWIyZjg3OGEzZjhjYTk4
ZTgyYjBlNDJlNWYwYmFhYTIyOGIxYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKQEAgLTYyLDIy
ICs2MiwyMiBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gZXh0
cmFjdEtleUlEc0tleWlkcyhjb25zdCBTaGFyZWRCdWZmZQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGJ1ZmZlci5zaXplKCkpIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
OwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCisgICAgYXV0
byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorICAgIGF1dG8gb2Jq
ZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGtpZHNBcnJheTsKLSAg
ICBpZiAoIW9iamVjdC0+Z2V0QXJyYXkoImtpZHMiLCBraWRzQXJyYXkpKQorICAgIGF1dG8ga2lk
c0FycmF5ID0gb2JqZWN0LT5nZXRBcnJheSgia2lkcyJfcyk7CisgICAgaWYgKCFraWRzQXJyYXkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8UmVmPFNoYXJlZEJ1
ZmZlcj4+IGtleUlEczsKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKmtpZHNBcnJheSkgewotICAg
ICAgICBTdHJpbmcga2V5SUQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGtleUlEKSkK
KyAgICAgICAgYXV0byBrZXlJRCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWtl
eUlEKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmVjdG9yPGNoYXI+IGtleUlE
RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQ
SUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5j
cHAKaW5kZXggZGNlMzU5ZTc2OGVmOWExM2E2YzZkZTE2ZDFmOGQzYzhiYmZmN2E5Ny4uOTRkMDNk
ODVkNmRhOWY0Zjg4ZjhjZDEyZTRiZmZiZDMzYjRkYzU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9p
ZCBDb21tYW5kTGluZUFQSUhvc3Q6OmRpc2Nvbm5lY3QoKQogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IG51bGxwdHI7CiB9CiAKLXZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1
ZVRvSW5zcGVjdCwgSlNDOjpKU1ZhbHVlIGhpbnRzVmFsdWUpCit2b2lkIENvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgb2JqZWN0LCBKU0M6OkpTVmFsdWUgaGludHMpCiB7CiAgICAgaWYgKCFtX2lu
c3RydW1lbnRpbmdBZ2VudHMpCiAgICAgICAgIHJldHVybjsKQEAgLTgyLDEyICs4MiwyMCBAQCB2
b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OgogICAgIGlmICghaW5zcGVjdG9yQWdlbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGhpbnRzT2JqZWN0OwotICAgIGlm
ICghSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBoaW50
c1ZhbHVlKS0+YXNPYmplY3QoaGludHNPYmplY3QpKQorICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBJ
bnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCk7
CisgICAgaWYgKCFvYmplY3RWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZW1v
dGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KEluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWVUb0luc3BlY3QpKTsKLSAgICBpbnNwZWN0b3JBZ2VudC0+
aW5zcGVjdChXVEZNb3ZlKHJlbW90ZU9iamVjdCksIFdURk1vdmUoaGludHNPYmplY3QpKTsKKyAg
ICBhdXRvIGhpbnRzVmFsdWUgPSBJbnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxH
bG9iYWxPYmplY3QsIGhpbnRzKTsKKyAgICBpZiAoIWhpbnRzVmFsdWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gaGludHNPYmplY3QgPSBoaW50c1ZhbHVlLT5hc09iamVjdCgpOworICAg
IGlmICghaGludHNPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVtb3RlT2Jq
ZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KG9iamVjdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlu
c3BlY3RvckFnZW50LT5pbnNwZWN0KFdURk1vdmUocmVtb3RlT2JqZWN0KSwgaGludHNPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIENvbW1hbmRMaW5lQVBJSG9zdDo6RXZlbnRMaXN0ZW5l
cnNSZWNvcmQgQ29tbWFuZExpbmVBUElIb3N0OjpnZXRFdmVudExpc3RlbmVycyhKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRXZlbnRUYXJnZXQmIHRhcmdldCkKQEAgLTEzNiw4
ICsxNDQsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMo
KQogICAgIGlmICghY29uc29sZUFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwotICAgIGNvbnNvbGVBZ2VudC0+Y2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsK
KyAgICBjb25zb2xlQWdlbnQtPmNsZWFyTWVzc2FnZXMoKTsKIH0KIAogdm9pZCBDb21tYW5kTGlu
ZUFQSUhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3QuY3Bw
CmluZGV4IDAwMTQ4ZTBmZjQ5NDRhYmQwOTBiODM2ZWE5MzA1ZWNmNzQ4YzZmYTQuLmI3ZmYwZTEw
NGE1NTA2OTE2Y2NmYTlkMjMwYzhiMmJiYjM2M2RmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmNwcApA
QCAtMTA1LDcgKzEwNSw3IEBAIEV4Y2VwdGlvbk9yPEluc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2Jq
ZWN0OjpSZXNvdXJjZUNvbnRlbnQ+IEluc3BlY3RvckF1ZGl0UmVzb3VyCiAgICAgaWYgKCFjYWNo
ZWRSZXNvdXJjZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gaWRlbnRpZmllciAiX3MsIGlkKSB9OwogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwog
ICAgIFJlc291cmNlQ29udGVudCByZXNvdXJjZUNvbnRlbnQ7CiAgICAgSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZXNvdXJjZUNvbnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBjYWNoZWRSZXNvdXJjZS0+
dXJsKCksICZyZXNvdXJjZUNvbnRlbnQuZGF0YSwgJnJlc291cmNlQ29udGVudC5iYXNlNjRFbmNv
ZGVkKTsKICAgICBpZiAoIWVycm9yU3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKaW5kZXggNWM1N2I2MDU3NGVjYTU3MjJkMTU0
OTkyYWZkYmRjNzU1ZTYzMTk5Zi4uYTYxYjhlZWRhMDQxNmNmN2YxNTRhYTAxMWM4NjBjZThmYjBi
MzI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAK
QEAgLTM1NiwxMyArMzU2LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpyZWNvcmRBY3Rpb24o
Y29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVjCiAgICAgfQogCiAg
ICAgaWYgKCFtX2ZyYW1lcykKLSAgICAgICAgbV9mcmFtZXMgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU+OjpjcmVhdGUoKTsKKyAgICAgICAgbV9m
cmFtZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPjo6Y3JlYXRl
KCk7CiAKICAgICBpZiAoIW1fY3VycmVudEFjdGlvbnMpIHsKICAgICAgICAgbV9jdXJyZW50QWN0
aW9ucyA9IEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKIAotICAgICAgICBh
dXRvIGZyYW1lID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZTo6Y3JlYXRl
KCkKLSAgICAgICAgICAgIC5zZXRBY3Rpb25zKG1fY3VycmVudEFjdGlvbnMpCisgICAgICAgIGF1
dG8gZnJhbWUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAg
ICAgIC5zZXRBY3Rpb25zKCptX2N1cnJlbnRBY3Rpb25zKQogICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKIAogICAgICAgICBtX2ZyYW1lcy0+YWRkSXRlbShXVEZNb3ZlKGZyYW1lKSk7CkBAIC0zNzUs
NyArMzc1LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OnJlY29yZEFjdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWMKIAogICAgIG1fbGFzdFJlY29yZGVk
QWN0aW9uID0gYnVpbGRBY3Rpb24obmFtZSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAgICAgbV9i
dWZmZXJVc2VkICs9IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7Ci0gICAgbV9j
dXJyZW50QWN0aW9ucy0+YWRkSXRlbShtX2xhc3RSZWNvcmRlZEFjdGlvbi5nZXQoKSk7CisgICAg
bV9jdXJyZW50QWN0aW9ucy0+YWRkSXRlbSgqbV9sYXN0UmVjb3JkZWRBY3Rpb24pOwogCiAgICAg
YXV0byogY29udGV4dCA9IGNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBA
IC0zOTgsNyArMzk4LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OmZpbmFsaXplRnJhbWUoKQog
ICAgIGFwcGVuZEFjdGlvblNuYXBzaG90SWZOZWVkZWQoKTsKIAogICAgIGlmIChtX2ZyYW1lcyAm
JiBtX2ZyYW1lcy0+bGVuZ3RoKCkgJiYgIXN0ZDo6aXNuYW4obV9jdXJyZW50RnJhbWVTdGFydFRp
bWUpKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZSo+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxl
bmd0aCgpIC0gMSkuZ2V0KCkpOworICAgICAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZT4obV9mcmFtZXMtPmdldCht
X2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKSk7CiAgICAgICAgIGN1cnJlbnRGcmFtZS0+c2V0RHVyYXRp
b24oKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9jdXJyZW50RnJhbWVTdGFydFRpbWUpLm1pbGxp
c2Vjb25kcygpKTsKIAogICAgICAgICBtX2N1cnJlbnRGcmFtZVN0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5hbigpOwpAQCAtNDEyLDcgKzQxMiw4IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpt
YXJrQ3VycmVudEZyYW1lSW5jb21wbGV0ZSgpCiAgICAgaWYgKCFtX2N1cnJlbnRBY3Rpb25zIHx8
ICFtX2ZyYW1lcyB8fCAhbV9mcmFtZXMtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lKj4obV9m
cmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKS5nZXQoKSktPnNldEluY29tcGxldGUo
dHJ1ZSk7CisgICAgYXV0byBjdXJyZW50RnJhbWUgPSBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJv
dG9jb2w6OlJlY29yZGluZzo6RnJhbWU+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgp
IC0gMSkpOworICAgIGN1cnJlbnRGcmFtZS0+c2V0SW5jb21wbGV0ZSh0cnVlKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXM6OnNldEJ1ZmZlckxpbWl0KGxvbmcgbWVtb3J5TGltaXQpCkBAIC00
MzgsMjkgKzQzOSwyOSBAQCBib29sIEluc3BlY3RvckNhbnZhczo6b3ZlckZyYW1lQ291bnQoKSBj
b25zdAogICAgIHJldHVybiBtX2ZyYW1lQ291bnQgJiYgbV9mcmFtZXNDYXB0dXJlZCA+PSBtX2Zy
YW1lQ291bnQudmFsdWUoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVy
ZUJhY2t0cmFjZSkKK1JlZjxQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZh
czo6YnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNlKQogewotICAgIHVz
aW5nIENvbnRleHRUeXBlVHlwZSA9IE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU+OworICAgIHVzaW5nIENvbnRleHRUeXBlVHlwZSA9IE9wdGlvbmFsPFBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlPjsKICAgICBhdXRvIGNvbnRleHRUeXBlID0gV1RG
Ojpzd2l0Y2hPbihtX2NvbnRleHQsCiAgICAgICAgIFtdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IGNvbnRleHRXcmFwcGVyKSAtPiBDb250ZXh0VHlwZVR5
cGUgewogICAgICAgICAgICAgYXV0byYgY29udGV4dCA9IGNvbnRleHRXcmFwcGVyLmdldCgpOwog
ICAgICAgICAgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4dCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OkNhbnZhczJEOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFz
OjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CiAgICAgICAgICAgICBpZiAoaXM8SW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Qml0bWFwUmVuZGVyZXI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpCaXRtYXBS
ZW5kZXJlcjsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgICAgICBpZiAoaXM8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0w7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKICNlbmRpZgogI2lm
IEVOQUJMRShXRUJHTDIpCiAgICAgICAgICAgICBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4oY29udGV4dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKICNlbmRpZgogICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfSwKICNpZiBFTkFCTEUoV0VCR1BVKQogICAg
ICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHUFVEZXZpY2U+KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2Vi
R1BVOworICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpX
ZWJHUFU7CiAgICAgICAgIH0sCiAjZW5kaWYKICAgICAgICAgW10gKE1vbm9zdGF0ZSkgewpAQCAt
NDcwLDEwICs0NzEsMTAgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFz
PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICApOwogICAgIGlm
ICghY29udGV4dFR5cGUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
Q2FudmFzMkQ7CisgICAgICAgIGNvbnRleHRUeXBlID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OkNhbnZhczJEOwogICAgIH0KIAotICAgIGF1dG8gY2FudmFzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCisgICAgYXV0byBjYW52YXMgPSBQcm90
b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRDYW52YXNJZChtX2lk
ZW50aWZpZXIpCiAgICAgICAgIC5zZXRDb250ZXh0VHlwZShjb250ZXh0VHlwZS52YWx1ZSgpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtNDg2LDEyICs0ODcsMTIgQEAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9y
Q2FudmFzKGIKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzgyODI+
IFdlYiBJbnNwZWN0b3I6IHNlbmQgYSBET00gbm9kZSB3aXRoIGVhY2ggQ2FudmFzIHBheWxvYWQg
YW5kIGVsaW1pbmF0ZSBDYW52YXMucmVxdWVzdE5vZGUKICAgICB9CiAKLSAgICB1c2luZyBDb250
ZXh0QXR0cmlidXRlc1R5cGUgPSBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0QXR0cmlidXRlcz47CisgICAgdXNpbmcgQ29udGV4dEF0dHJpYnV0ZXNUeXBlID0gUmVm
UHRyPFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzPjsKICAgICBhdXRvIGNvbnRl
eHRBdHRyaWJ1dGVzID0gV1RGOjpzd2l0Y2hPbihtX2NvbnRleHQsCiAgICAgICAgIFtdIChzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IGNvbnRleHRXcmFwcGVy
KSAtPiBDb250ZXh0QXR0cmlidXRlc1R5cGUgewogICAgICAgICAgICAgYXV0byYgY29udGV4dCA9
IGNvbnRleHRXcmFwcGVyLmdldCgpOwogICAgICAgICAgICAgaWYgKGlzPEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dD4oY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRB
dHRyaWJ1dGVzUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRl
c1BheWxvYWQgPSBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkK
ICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
QXR0cmlidXRlc1BheWxvYWQtPnNldEFscGhhKGRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dD4oY29udGV4dCkuaGFzQWxwaGEoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnRleHRBdHRyaWJ1dGVzUGF5bG9hZDsKQEAgLTUwMCw3ICs1MDEsNyBAQCBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RG
b3JDYW52YXMoYgogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIGlmIChpczxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkgewogICAgICAgICAgICAgICAgIGlmIChjb25z
dCBhdXRvJiBhdHRyaWJ1dGVzID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4o
Y29udGV4dCkuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJp
YnV0ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQtPnNldEFscGhhKGF0dHJp
YnV0ZXMtPmFscGhhKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkLT5zZXREZXB0aChhdHRyaWJ1dGVzLT5kZXB0aCk7CkBAIC01MzAsNyArNTMxLDcgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1
aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
V2ViR1BVRGV2aWNlPiBkZXZpY2VXcmFwcGVyKSAtPiBDb250ZXh0QXR0cmlidXRlc1R5cGUgewog
ICAgICAgICAgICAgYXV0byYgZGV2aWNlID0gZGV2aWNlV3JhcHBlci5nZXQoKTsKICAgICAgICAg
ICAgIGlmIChjb25zdCBhdXRvJiBvcHRpb25zID0gZGV2aWNlLmFkYXB0ZXIoKS5vcHRpb25zKCkp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAg
ICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnJl
bGVhc2UoKTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgcG93ZXJQcmVmZXJlbmNl
ID0gb3B0aW9ucy0+cG93ZXJQcmVmZXJlbmNlKSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAocG93ZXJQcmVmZXJlbmNlLnZhbHVlKCkpIHsKQEAgLTU1NCw3ICs1NTUsNyBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRP
YmplY3RGb3JDYW52YXMoYgogICAgICAgICB9CiAgICAgKTsKICAgICBpZiAoY29udGV4dEF0dHJp
YnV0ZXMpCi0gICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJpYnV0ZXMoV1RGTW92ZShjb250
ZXh0QXR0cmlidXRlcykpOworICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRyaWJ1dGVzKGNv
bnRleHRBdHRyaWJ1dGVzLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgLy8gRklYTUU6IDxodHRw
czovL3dlYmtpdC5vcmcvYi8xODA4MzM+IFdlYiBJbnNwZWN0b3I6IHN1cHBvcnQgT2Zmc2NyZWVu
Q2FudmFzIGZvciBDYW52YXMgcmVsYXRlZCBvcGVyYXRpb25zCiAKQEAgLTU3MSw3ICs1NzIsNyBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZh
czo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLVJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFz
OjpyZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCkKK1JlZjxQcm90b2NvbDo6UmVjb3JkaW5nOjpS
ZWNvcmRpbmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpCiB7
CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRBY3Rpb25zKTsKICAgICBBU1NFUlQoIW1fbGFzdFJlY29y
ZGVkQWN0aW9uKTsKQEAgLTU4MSwyNiArNTgyLDI2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0Rm9y
CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGlu
Z3MgZm9yIFdlYkdQVURldmljZQogCi0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5n
OjpUeXBlIHR5cGU7CisgICAgUHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZSB0eXBlOwogICAgIGlm
IChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICB0eXBlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKKyAgICAgICAg
dHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOwogICAgIGVsc2UgaWYg
KGlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc0JpdG1hcFJlbmRl
cmVyOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzQml0
bWFwUmVuZGVyZXI7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGVsc2UgaWYgKGlzPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMOworICAgICAgICB0eXBlID0gUHJvdG9j
b2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0w7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VC
R0wyKQogICAgIGVsc2UgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQot
ICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXNXZWJHTDI7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXNXZWJHTDI7CiAjZW5kaWYKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6
OkNhbnZhczJEOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2Fu
dmFzMkQ7CiAgICAgfQogCi0gICAgYXV0byByZWNvcmRpbmcgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpSZWNvcmRpbmc6OlJlY29yZGluZzo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFZlcnNpb24oSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpWRVJTSU9OKQorICAgIGF1dG8gcmVjb3JkaW5n
ID0gUHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nOjpjcmVhdGUoKQorICAgICAgICAuc2V0
VmVyc2lvbihQcm90b2NvbDo6UmVjb3JkaW5nOjpWRVJTSU9OKQogICAgICAgICAuc2V0VHlwZSh0
eXBlKQogICAgICAgICAuc2V0SW5pdGlhbFN0YXRlKG1faW5pdGlhbFN0YXRlLnJlbGVhc2VOb25O
dWxsKCkpCiAgICAgICAgIC5zZXREYXRhKG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEucmVsZWFz
ZU5vbk51bGwoKSkKQEAgLTYxNCw3ICs2MTUsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UmVjb3JkaW5nOjpSZWNvcmRpbmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvcgog
ICAgIHJldHVybiByZWNvcmRpbmc7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENh
bnZhc0NvbnRlbnRBc0RhdGFVUkwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorU3RyaW5nIElu
c3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nKQogewogICAgIGF1dG8qIG5vZGUgPSBjYW52YXNFbGVtZW50KCk7
CiAgICAgaWYgKCFub2RlKSB7CkBAIC02NTEsNyArNjUyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXM6OmFwcGVuZEFjdGlvblNuYXBzaG90SWZOZWVkZWQoKQogICAgIGlmIChtX2NvbnRlbnRDaGFu
Z2VkKSB7CiAgICAgICAgIG1fYnVmZmVyVXNlZCAtPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVt
b3J5Q29zdCgpOwogCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+
YWRkSXRlbShpbmRleEZvckRhdGEoZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChpZ25vcmVkKSkp
OwogCiAgICAgICAgIG1fYnVmZmVyVXNlZCArPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVtb3J5
Q29zdCgpOwpAQCAtNzc1LDcgKzc3Niw3IEBAIGludCBJbnNwZWN0b3JDYW52YXM6OmluZGV4Rm9y
RGF0YShEdXBsaWNhdGVEYXRhVmFyaWFudCBkYXRhKQogCiAgICAgaWYgKGl0ZW0pIHsKICAgICAg
ICAgbV9idWZmZXJVc2VkICs9IGl0ZW0tPm1lbW9yeUNvc3QoKTsKLSAgICAgICAgbV9zZXJpYWxp
emVkRHVwbGljYXRlRGF0YS0+YWRkSXRlbShXVEZNb3ZlKGl0ZW0pKTsKKyAgICAgICAgbV9zZXJp
YWxpemVkRHVwbGljYXRlRGF0YS0+YWRkSXRlbShpdGVtLnJlbGVhc2VOb25OdWxsKCkpOwogCiAg
ICAgICAgIG1faW5kZXhlZER1cGxpY2F0ZURhdGEuYXBwZW5kKGRhdGEpOwogICAgICAgICBpbmRl
eCA9IG1faW5kZXhlZER1cGxpY2F0ZURhdGEuc2l6ZSgpIC0gMTsKQEAgLTgxMCwxMyArODExLDEz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpW
YWx1ZT4+IGJ1aWxkQXJyYXlGb3JWZWN0b3IoCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1SZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNh
bnZhczo6YnVpbGRJbml0aWFsU3RhdGUoKQorUmVmPFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YWxTdGF0ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTdGF0ZSgpCiB7CiAgICAgYXV0
byogY29udGV4dCA9IGNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENh
bnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCiAKLSAgICBh
dXRvIGluaXRpYWxTdGF0ZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6
OkluaXRpYWxTdGF0ZTo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gaW5pdGlhbFN0YXRl
UGF5bG9hZCA9IFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0ZTo6Y3JlYXRlKCkucmVs
ZWFzZSgpOwogCiAgICAgYXV0byBhdHRyaWJ1dGVzUGF5bG9hZCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgYXR0cmlidXRlc1BheWxvYWQtPnNldEludGVnZXIoIndpZHRoIl9zLCBjb250
ZXh0LT5jYW52YXNCYXNlKCkud2lkdGgoKSk7CkBAIC05MDgsNyArOTA5LDcgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6
OmJ1aWxkSW5pdGlhbFMKICAgICBpZiAocGFyYW1ldGVyc1BheWxvYWQtPmxlbmd0aCgpKQogICAg
ICAgICBpbml0aWFsU3RhdGVQYXlsb2FkLT5zZXRQYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVy
c1BheWxvYWQpKTsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgaW5pdGlhbFN0YXRlUGF5bG9hZC0+c2V0Q29udGVudChn
ZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGlnbm9yZWQpKTsKIAogICAgIHJldHVybiBpbml0aWFs
U3RhdGVQYXlsb2FkOwpAQCAtOTQ2LDcgKzk0Nyw3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046
OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUs
CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZC52YWx1ZU9yKDEpKTsKICAg
ICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5lLnZhbHVlT3IoMCkpOwogICAgICAg
ICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVlLmYudmFsdWVPcigwKSk7Ci0gICAgICAgICAg
ICAgICAgYWRkUGFyYW1ldGVyKGFycmF5LnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkRP
TU1hdHJpeCk7CisgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKFdURk1vdmUoYXJyYXkpLCBS
ZWNvcmRpbmdTd2l6emxlVHlwZXM6OkRPTU1hdHJpeCk7CiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgWyZdIChjb25zdCBFbGVtZW50KiB2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmICh2
YWx1ZSkgewpAQCAtMTEwNiwxNiArMTEwNywxNiBAQCBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpW
YWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLAog
ICAgICAgICAgICAgICAgIGF1dG8gZGVkdXBsaWNhdGVkID0gdmFsdWUubWFwKFsmXSAoY29uc3Qg
U3RyaW5nJiBpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleEZvckRhdGEo
aXRlbSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVy
KGJ1aWxkQXJyYXlGb3JWZWN0b3IoZGVkdXBsaWNhdGVkKS5wdHIoKSwgUmVjb3JkaW5nU3dpenps
ZVR5cGVzOjpTdHJpbmcpOworICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5
Rm9yVmVjdG9yKGRlZHVwbGljYXRlZCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6U3RyaW5nKTsK
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlKSB7IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKS5wdHIoKSwgUmVj
b3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7IH0sCisgICAgICAgICAgICBbJl0gKGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlKSB7IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKHZh
bHVlKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7IH0sCiAgICAgICAgICAgICBbJl0g
KGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgYXV0byBt
YXBwZWQgPSB2YWx1ZS5tYXAoWyZdICh1aW50MzJfdCBpdGVtKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGl0ZW0pOwogICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKG1hcHBl
ZCkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOworICAgICAgICAgICAgICAg
IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKG1hcHBlZCksIFJlY29yZGluZ1N3aXp6
bGVUeXBlczo6QXJyYXkpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFsmXSAoY29uc3Qg
VmVjdG9yPGludDMyX3Q+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rv
cih2YWx1ZSkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9LAorICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8aW50MzJfdD4mIHZhbHVlKSB7IGFkZFBhcmFtZXRlcihi
dWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7
IH0sCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAgICAgWyZdIChjb25zdCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpGbG9hdDMyTGlzdDo6VmFyaWFudFR5cGUmIHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgV1RGOjp2aXNpdChwYXJzZVBhcmFtZXRlciwgdmFsdWUpOwpAQCAtMTE1OSw3
ICsxMTYwLDcgQEAgUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52
YXM6OmJ1aWxkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwKIFJlZjxKU09OOjpBcnJheU9mPEpT
T046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQo
Y29uc3QgQ2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewogICAgIEFTQ0lJTGl0ZXJh
bCB0eXBlID0gImxpbmVhci1ncmFkaWVudCJfczsKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpBcnJheU9mPGZsb2F0Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
QXJyYXlPZjxkb3VibGU+OjpjcmVhdGUoKTsKICAgICBXVEY6OnN3aXRjaE9uKGNhbnZhc0dyYWRp
ZW50LmdyYWRpZW50KCkuZGF0YSgpLAogICAgICAgICBbJl0gKGNvbnN0IEdyYWRpZW50OjpMaW5l
YXJEYXRhJiBkYXRhKSB7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9p
bnQwLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKaW5k
ZXggNzhjYjZhOGEzYjhhYjc4MGU5NWZiM2ZhZWQzYWJjNTk0ZDE0NjU5OC4uYjI3YmM4ZDQ5MjM5
MTE3YmVlNTI1ZDVmZTZhYzI2ZTJkNjE2YjVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuaApAQCAtNTgsOCArNTgsNiBAQCBjbGFzcyBPZmZzY3JlZW5DYW52
YXM7CiBjbGFzcyBUeXBlZE9NQ1NTSW1hZ2VWYWx1ZTsKICNlbmRpZgogCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQ2FudmFzIGZpbmFsIDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5zcGVjdG9yQ2FudmFzPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxJbnNw
ZWN0b3JDYW52YXM+IGNyZWF0ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CkBAIC0xMDcsNyAr
MTA1LDcgQEAgcHVibGljOgogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhcz4gYnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc+IHJlbGVhc2VPYmpl
Y3RGb3JSZWNvcmRpbmcoKTsKIAotICAgIFN0cmluZyBnZXRDYW52YXNDb250ZW50QXNEYXRhVVJM
KEVycm9yU3RyaW5nJik7CisgICAgU3RyaW5nIGdldENhbnZhc0NvbnRlbnRBc0RhdGFVUkwoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0
b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDJlOTBjMTE5NDhhN2UwZWI2
MTA1YTgzZTJjMDhjYjRmODJhOGYyZmUuLjYzMGRmNzE3OTBjNjNiNmU3NTg3MzQ1MWExNzQwZjg2
ZjY3ZTAyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKQEAgLTQ3OCwxMCArNDc4LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojpmcm9udGVuZEluaXRpYWxpemVkKCkKIHsKICAgICBpZiAobV9wYXVzZUFmdGVySW5pdGlhbGl6
YXRpb24pIHsKICAgICAgICAgbV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSAg
ICAgICAgaWYgKGF1dG8qIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmVu
YWJsZWRQYWdlRGVidWdnZXJBZ2VudCgpKSB7Ci0gICAgICAgICAgICBFcnJvclN0cmluZyBpZ25v
cmVkOwotICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+cGF1c2UoaWdub3JlZCk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKGF1dG8qIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPmVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudCgpKQorICAgICAgICAgICAgZGVidWdnZXJBZ2Vu
dC0+cGF1c2UoKTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5k
ZXggNTBlMGM4M2JjOTIwNjYyZTc2ODAyNTU3NzUyYjM2ZjIzNzViMDM5Yy4uYTZiYjg3N2EyMmEw
YWE4NmJmODk5ODM5YTc1ZjVhZmY2ZWY4ZGUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTYwNyw3ICs2MDcsNyBAQCBi
b29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKQog
ICAgIHJldHVybiBtX2NsaWVudCAmJiBtX2NsaWVudC0+ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUoKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1
ZVBheWxvYWQ+IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUoY29uc3QgUmVmUHRyPEpTT046OlZh
bHVlPiYgdmFsdWUpCitzdGF0aWMgT3B0aW9uYWw8RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZh
bHVlUGF5bG9hZD4gdmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZShSZWY8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpCiB7CiAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CiAgICAgY2FzZSBKU09OOjpW
YWx1ZTo6VHlwZTo6QXJyYXk6CkBAIC02MTcsMjQgKzYxNywxNiBAQCBzdGF0aWMgT3B0aW9uYWw8
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZD4gdmFsdWVQYXlsb2FkRnJvbUpT
T05WYWx1ZQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgY2FzZSBKU09OOjpW
YWx1ZTo6VHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgYm9vbCBib29sVmFsdWU7Ci0gICAgICAgIHZh
bHVlLT5hc0Jvb2xlYW4oYm9vbFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dn
aW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQoYm9vbFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQodmFsdWUtPmFzQm9vbGVhbigpLnZhbHVl
T3IoZmFsc2UpKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZToKLSAgICAg
ICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFs
dWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9h
ZChkb3VibGVWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6
VmFsdWVQYXlsb2FkKHZhbHVlLT5hc0RvdWJsZSgpLnZhbHVlT3IoMCkpOwogCiAgICAgY2FzZSBK
U09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcjoKLSAgICAgICAgbG9uZyBsb25nIGludFZhbHVlOwot
ICAgICAgICB2YWx1ZS0+YXNJbnRlZ2VyKGludFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQoaW50VmFsdWUpOworICAgICAgICByZXR1
cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZChzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KHZhbHVlLT5hc0ludGVnZXIoKS52YWx1ZU9yKDApKSk7CiAKICAgICBjYXNlIEpTT046
OlZhbHVlOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAg
ICAgdmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQoc3RyaW5nVmFsdWUpOworICAgICAgICByZXR1
cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNTdHJpbmco
KSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02NDYsMTcgKzYzOCwx
NyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9nRGlhZ25vc3RpY0V2ZW50KGNvbnN0
IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBTdAogICAgIGlmICghc3VwcG9ydHNEaWFnbm9zdGlj
TG9nZ2luZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWRWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04ocGF5bG9hZFN0cmlu
ZywgcGF5bG9hZFZhbHVlKSkKKyAgICBhdXRvIHBheWxvYWRWYWx1ZSA9IEpTT046OlZhbHVlOjpw
YXJzZUpTT04ocGF5bG9hZFN0cmluZyk7CisgICAgaWYgKCFwYXlsb2FkVmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBheWxvYWRPYmplY3Q7Ci0gICAg
aWYgKCFwYXlsb2FkVmFsdWUtPmFzT2JqZWN0KHBheWxvYWRPYmplY3QpKQorICAgIGF1dG8gcGF5
bG9hZE9iamVjdCA9IHBheWxvYWRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXBheWxvYWRP
YmplY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpW
YWx1ZURpY3Rpb25hcnkgZGljdGlvbmFyeTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZh
bHVlXSA6ICpwYXlsb2FkT2JqZWN0KSB7Ci0gICAgICAgIGlmIChhdXRvIHZhbHVlUGF5bG9hZCA9
IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUodmFsdWUpKQorICAgIGZvciAoYXV0byYgW2tleSwg
dmFsdWVdIDogKnBheWxvYWRPYmplY3QpIHsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWVQYXlsb2Fk
ID0gdmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZShXVEZNb3ZlKHZhbHVlKSkpCiAgICAgICAgICAg
ICBkaWN0aW9uYXJ5LnNldChrZXksIFdURk1vdmUodmFsdWVQYXlsb2FkLnZhbHVlKCkpKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAppbmRleCBhZTBmZWY1ZGZlMzliOWE1MTZlNTUxMDMwN2VhYmNiNjYwZDFhYmNiLi45NzY2
OWVmYjY4N2QzMzU1NGQ1MmJjNjhlMThjNjg0MWFlYjRjZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0zODAsNyArMzgwLDcg
QEAgdm9pZCBTdHlsZVNoZWV0SGFuZGxlcjo6b2JzZXJ2ZUNvbW1lbnQodW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmxh
c3QoKS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKENTU1Byb3BlcnR5U291
cmNlRGF0YShwcm9wZXJ0eURhdGEubmFtZSwgcHJvcGVydHlEYXRhLnZhbHVlLCBmYWxzZSwgdHJ1
ZSwgdHJ1ZSwgU291cmNlUmFuZ2Uoc3RhcnRPZmZzZXQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0
LCBlbmRPZmZzZXQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0KSkpOwogfQogCi1zdGF0aWMgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U+IGJ1aWxkU291cmNlUmFu
Z2VPYmplY3QoY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlLCBjb25zdCBWZWN0b3I8c2l6ZV90PiYg
bGluZUVuZGluZ3MsIGludCogZW5kaW5nTGluZSA9IG51bGxwdHIpCitzdGF0aWMgUmVmUHRyPFBy
b3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNv
dXJjZVJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzLCBpbnQq
IGVuZGluZ0xpbmUgPSBudWxscHRyKQogewogICAgIGlmIChsaW5lRW5kaW5ncy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzkxLDcgKzM5MSw3IEBAIHN0YXRpYyBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5n
ZU9iamVjdChjb25zCiAgICAgaWYgKGVuZGluZ0xpbmUpCiAgICAgICAgICplbmRpbmdMaW5lID0g
ZW5kLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKIAotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6Q1NT
OjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXJ0TGluZShzdGFydC5tX2xp
bmUuemVyb0Jhc2VkSW50KCkpCiAgICAgICAgIC5zZXRTdGFydENvbHVtbihzdGFydC5tX2NvbHVt
bi56ZXJvQmFzZWRJbnQoKSkKICAgICAgICAgLnNldEVuZExpbmUoZW5kLm1fbGluZS56ZXJvQmFz
ZWRJbnQoKSkKQEAgLTQyOCwzNCArNDI4LDM0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUnVsZUxpc3Q+
IGFzQ1NTUnVsZUxpc3QoQ1NTUnVsZSogcnVsZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
c3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBp
bmc+PiBidWlsZEFycmF5Rm9yR3JvdXBpbmdzKENTU1J1bGUmIHJ1bGUpCitzdGF0aWMgUmVmPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+PiBidWlsZEFycmF5Rm9yR3JvdXBp
bmdzKENTU1J1bGUmIHJ1bGUpCiB7Ci0gICAgYXV0byBncm91cGluZ3NQYXlsb2FkID0gSlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBncm91cGluZ3NQYXlsb2FkID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpH
cm91cGluZz46OmNyZWF0ZSgpOwogCiAgICAgYXV0byogcGFyZW50UnVsZSA9ICZydWxlOwogICAg
IHdoaWxlIChwYXJlbnRSdWxlKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nPiBydWxlR3JvdXBpbmdQYXlsb2FkOworICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkNTUzo6R3JvdXBpbmc+IHJ1bGVHcm91cGluZ1BheWxvYWQ7CiAKICAgICAgICAgaWYg
KGlzPENTU01lZGlhUnVsZT4ocGFyZW50UnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8qIG1lZGlh
ID0gZG93bmNhc3Q8Q1NTTWVkaWFSdWxlPihwYXJlbnRSdWxlKS0+bWVkaWEoKTsKICAgICAgICAg
ICAgIGlmIChtZWRpYSAmJiBtZWRpYS0+bGVuZ3RoKCkgJiYgbWVkaWEtPm1lZGlhVGV4dCgpICE9
ICJhbGwiKSB7Ci0gICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgcnVs
ZUdyb3VwaW5nUGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQogICAg
ICAgICAgICAgICAgICAgICAuc2V0VGV4dChtZWRpYS0+bWVkaWFUZXh0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5
cGU6Ok1lZGlhUnVsZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6OkNT
Uzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhUnVsZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVh
c2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbXBvcnRSdWxl
PihwYXJlbnRSdWxlKSkgewogICAgICAgICAgICAgYXV0byYgbWVkaWEgPSBkb3duY2FzdDxDU1NJ
bXBvcnRSdWxlPihwYXJlbnRSdWxlKS0+bWVkaWEoKTsKICAgICAgICAgICAgIGlmIChtZWRpYS5s
ZW5ndGgoKSAmJiBtZWRpYS5tZWRpYVRleHQoKSAhPSAiYWxsIikgewotICAgICAgICAgICAgICAg
IHJ1bGVHcm91cGluZ1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5n
OjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQo
bWVkaWEubWVkaWFUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhSW1wb3J0UnVsZSkKKyAgICAg
ICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1l
ZGlhSW1wb3J0UnVsZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NTdXBwb3J0c1J1bGU+KHBhcmVudFJ1bGUp
KSB7Ci0gICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxv
YWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAu
c2V0VGV4dChkb3duY2FzdDxDU1NTdXBwb3J0c1J1bGU+KHBhcmVudFJ1bGUpLT5jb25kaXRpb25U
ZXh0KCkpCi0gICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpHcm91cGluZzo6VHlwZTo6U3VwcG9ydHNSdWxlKQorICAgICAgICAgICAgICAgIC5zZXRUeXBl
KFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpTdXBwb3J0c1J1bGUpCiAgICAgICAgICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgfQogCkBAIC00NzAsNyArNDcwLDcgQEAgc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+PiBi
dWlsZEFycmF5Rm9yR3JvdXAKICAgICAgICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9h
ZC0+c2V0U291cmNlVVJMKHNvdXJjZVVSTCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdyb3VwaW5nc1BheWxvYWQtPmFkZEl0ZW0oV1RGTW92ZShydWxlR3JvdXBpbmdQYXlsb2FkKSk7
CisgICAgICAgICAgICBncm91cGluZ3NQYXlsb2FkLT5hZGRJdGVtKHJ1bGVHcm91cGluZ1BheWxv
YWQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocGFyZW50UnVs
ZS0+cGFyZW50UnVsZSgpKSB7CkBAIC00ODIsOSArNDgyLDkgQEAgc3RhdGljIFJlZjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+PiBidWlsZEFycmF5Rm9y
R3JvdXAKICAgICAgICAgd2hpbGUgKHN0eWxlU2hlZXQpIHsKICAgICAgICAgICAgIGF1dG8qIG1l
ZGlhID0gc3R5bGVTaGVldC0+bWVkaWEoKTsKICAgICAgICAgICAgIGlmIChtZWRpYSAmJiBtZWRp
YS0+bGVuZ3RoKCkgJiYgbWVkaWEtPm1lZGlhVGV4dCgpICE9ICJhbGwiKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBzaGVldEdyb3VwaW5nUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgYXV0byBzaGVldEdyb3VwaW5n
UGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQogICAgICAgICAgICAg
ICAgICAgICAuc2V0VGV4dChtZWRpYS0+bWVkaWFUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
IC5zZXRUeXBlKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpKSA/
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhU3R5bGVOb2Rl
OiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUxpbmtOb2Rl
KQorICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShpczxIVE1MU3R5bGVFbGVtZW50PihzdHls
ZVNoZWV0LT5vd25lck5vZGUoKSkgPyBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVk
aWFTdHlsZU5vZGU6IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUxpbmtOb2Rl
KQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIHNvdXJjZVVSTDsKQEAgLTUyMywyOCArNTIzLDMwIEBAIEluc3BlY3RvclN0eWxlOjpJbnNw
ZWN0b3JTdHlsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUmVmPENTU1N0eWxlRGVj
bGFyCiAKIEluc3BlY3RvclN0eWxlOjp+SW5zcGVjdG9yU3R5bGUoKSA9IGRlZmF1bHQ7CiAKLVJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3QKIHsKLSAgICBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0gc3R5bGVXaXRoUHJv
cGVydGllcygpOwotICAgIGlmICghbV9zdHlsZUlkLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0
LT5zZXRTdHlsZUlkKG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZUlkPigpKTsKKyAgICBSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKKyAgICBpZiAoYXV0byBzdHlsZUlkID0g
bV9zdHlsZUlkLmFzUHJvdG9jb2xWYWx1ZTxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZUlkPigpKQor
ICAgICAgICByZXN1bHQtPnNldFN0eWxlSWQoc3R5bGVJZC5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIHJlc3VsdC0+c2V0V2lkdGgobV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7
CiAgICAgcmVzdWx0LT5zZXRIZWlnaHQobV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0
IikpOwogCiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gZXh0cmFj
dFNvdXJjZURhdGEoKTsKLSAgICBpZiAoc291cmNlRGF0YSkKLSAgICAgICAgcmVzdWx0LT5zZXRS
YW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UsIG1f
cGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7
CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VE
YXRhLT5ydWxlQm9keVJhbmdlLCBtX3BhcmVudFN0eWxlU2hlZXQtPmxpbmVFbmRpbmdzKCkpKQor
ICAgICAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShyYW5nZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+IEluc3BlY3RvclN0
eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0CitSZWY8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiBJbnNwZWN0b3JTdHls
ZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdAogewotICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5
bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKICAgICBm
b3IgKGF1dG8mIHByb3BlcnR5IDogY29sbGVjdFByb3BlcnRpZXModHJ1ZSkpIHsKICAgICAgICAg
Y29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gcHJvcGVydHkuc291
cmNlRGF0YTsKLSAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIGVudHJ5ID0g
UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQogICAgICAg
ICAgICAgLnNldE5hbWUocHJvcGVydHlFbnRyeS5uYW1lKQogICAgICAgICAgICAgLnNldFZhbHVl
KHByb3BlcnR5RW50cnkudmFsdWUpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwpAQCAtNjIzLDEz
ICs2MjUsMTMgQEAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IEluc3BlY3RvclN0eWxl
Ojpjb2xsZWN0UHJvcGVydGllcyhib29sIGluY2x1ZGVBbGwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5
bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb25zdAorUmVmPFByb3RvY29sOjpDU1M6OkNTU1N0
eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAg
YXV0byBwcm9wZXJ0aWVzID0gY29sbGVjdFByb3BlcnRpZXMoZmFsc2UpOwogCi0gICAgYXV0byBw
cm9wZXJ0aWVzT2JqZWN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7Ci0gICAgYXV0byBzaG9ydGhhbmRFbnRyaWVzID0gQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OworICAgIGF1
dG8gcHJvcGVydGllc09iamVjdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTUHJv
cGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJheU9mPFBy
b3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+IHByb3BlcnR5TmFtZVRvUHJl
dmlvdXNBY3RpdmVQcm9wZXJ0eTsKICAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRz
OwogICAgIFN0cmluZyBwcmV2aW91c1ByaW9yaXR5OwogICAgIFN0cmluZyBwcmV2aW91c1N0YXR1
czsKQEAgLTY0MSw5ICs2NDMsOSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICBj
b25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBpdC0+c291cmNlRGF0
YTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJvcGVydHlFbnRyeS5uYW1lOwogCi0g
ICAgICAgIGF1dG8gc3RhdHVzID0gaXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmU7CisgICAgICAgIGF1dG8gc3RhdHVzID0gaXQt
PmRpc2FibGVkID8gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkRpc2FibGVkIDog
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZTsKIAotICAgICAgICBhdXRv
IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRl
KCkKKyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Ojpj
cmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUobmFtZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpKQogICAgICAgICAgICAgLnNldFZhbHVlKHByb3BlcnR5RW50cnkudmFsdWUpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwpAQCAtNjY5LDcgKzY3MSw4IEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygp
IGNvCiAgICAgICAgICAgICBTb3VyY2VSYW5nZSBhYnNvbHV0ZVByb3BlcnR5UmFuZ2UgPSBwcm9w
ZXJ0eUVudHJ5LnJhbmdlOwogICAgICAgICAgICAgYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLnN0YXJ0
ICs9IHJ1bGVCb2R5UmFuZ2VTdGFydDsKICAgICAgICAgICAgIGFic29sdXRlUHJvcGVydHlSYW5n
ZS5lbmQgKz0gcnVsZUJvZHlSYW5nZVN0YXJ0OwotICAgICAgICAgICAgcHJvcGVydHktPnNldFJh
bmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLCBsaW5lRW5k
aW5ncykpOworICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBidWlsZFNvdXJjZVJhbmdlT2Jq
ZWN0KGFic29sdXRlUHJvcGVydHlSYW5nZSwgbGluZUVuZGluZ3MpKQorICAgICAgICAgICAgICAg
IHByb3BlcnR5LT5zZXRSYW5nZShyYW5nZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghaXQtPmRpc2FibGVkKSB7CkBAIC02ODMsMzAgKzY4NiwzNSBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxl
V2l0aFByb3BlcnRpZXMoKSBjbwogCiAgICAgICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIHBy
b3BlcnR5IG5hbWVzIHRvIHRyZWF0IG5vbi1wcmVmaXhlZCBhbmQgdmVuZG9yLXByZWZpeGVkIHBy
b3BlcnR5IG5hbWVzIHRoZSBzYW1lIChvcGFjaXR5IHZzLiAtd2Via2l0LW9wYWNpdHkpLgogICAg
ICAgICAgICAgICAgIFN0cmluZyBjYW5vbmljYWxQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUlkID8g
Z2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SWQpIDogbmFtZTsKLSAgICAgICAgICAgICAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJv
cGVydHk+Pjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZl
UHJvcGVydHkuZmluZChjYW5vbmljYWxQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+Pjo6aXRlcmF0
b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZmluZChj
YW5vbmljYWxQcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBw
cm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3VjY2Vzc1ByaW9yaXR5ID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmco
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6UHJpb3JpdHksIHByZXZpb3Vz
UHJpb3JpdHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzU3RhdHVzID0g
YWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eTo6U3RhdHVzLCBwcmV2aW91c1N0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3VjY2Vzc1N0YXR1cyAmJiBwcmV2aW91c1N0YXR1cyAhPSAiaW5hY3RpdmUiKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkuaW1wb3J0YW50IHx8
ICFzdWNjZXNzUHJpb3JpdHkpIC8vIFByaW9yaXR5IG5vdCBzZXQgPT0gIm5vdCBpbXBvcnRhbnQi
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluYWN0aXZhdGUgYSBub24taW1wb3J0YW50IHBy
b3BlcnR5IGZvbGxvd2luZyB0aGUgc2FtZS1uYW1lZCBpbXBvcnRhbnQgcHJvcGVydHkuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBuZXdQcmlvcml0eSA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5nKFByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5Ojpwcmlvcml0eUtleSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoISFuZXdQcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c1ByaW9yaXR5ID0gbmV3UHJpb3JpdHk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
bmV3U3RhdHVzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHk6OnN0YXR1c0tleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFuZXdT
dGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1N0YXR1cyA9IG5l
d1N0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0dXMg
IT0gUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpDU1M6
OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkuaW1wb3J0YW50IHx8ICEhbmV3UHJpb3JpdHkpIC8v
IFByaW9yaXR5IG5vdCBzZXQgPT0gIm5vdCBpbXBvcnRhbnQiLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eVN0YXR1czo6QWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJbmFjdGl2YXRlIGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhl
IHNhbWUtbmFtZWQgaW1wb3J0YW50IHByb3BlcnR5LgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzID0gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6Oklu
YWN0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c1Bh
cnNlZE9rOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQt
PnZhbHVlLT5nZXRCb29sZWFuKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6
OlBhcnNlZE9rLCBwcmV2aW91c1BhcnNlZE9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQorICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBwcmV2aW91c1BhcnNlZE9rID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRCb29sZWFuKFByb3Rv
Y29sOjpDU1M6OkNTU1Byb3BlcnR5OjpwYXJzZWRPa0tleSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocHJldmlvdXNQYXJzZWRPayAmJiAhcHJldmlvdXNQYXJzZWRPaykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5
TmFtZSwgcHJvcGVydHkuY29weVJlZigpKTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJ
bmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3Rh
dHVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZl
KTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRTdGF0dXMoUHJvdG9j
b2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZlKTsKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9w
ZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTcxNCwxMyArNzIyLDEzIEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygp
IGNvCiAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCAiaW1wbGljaXQiID09IGZhbHNlLgogICAg
ICAgICAgICAgICAgIGlmIChpbXBsaWNpdCkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkt
PnNldEltcGxpY2l0KHRydWUpOwotICAgICAgICAgICAgICAgIHN0YXR1cyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlOworICAgICAgICAgICAgICAg
IHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZTsKIAogICAg
ICAgICAgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0
aGFuZChuYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRo
YW5kKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9y
dGhhbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGVudHJ5ID0gUHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoc2hvcnRoYW5kKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9ydGhhbmRWYWx1ZShzaG9ydGhh
bmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC03MzEsMTEg
KzczOSwxMSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gRGVmYXVsdCAic3RhdHVzIiA9PSAic3R5bGUiLgotICAgICAgICBpZiAoc3RhdHVzICE9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlKQorICAgICAg
ICBpZiAoc3RhdHVzICE9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZSkK
ICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdGF0dXMoc3RhdHVzKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRDc3NQ
cm9wZXJ0aWVzKFdURk1vdmUocHJvcGVydGllc09iamVjdCkpCiAgICAgICAgIC5zZXRTaG9ydGhh
bmRFbnRyaWVzKFdURk1vdmUoc2hvcnRoYW5kRW50cmllcykpCiAgICAgICAgIC5yZWxlYXNlKCk7
CkBAIC04MDUsNyArODEzLDcgQEAgVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yU3R5bGU6Omxvbmdo
YW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnQKICAgICByZXR1cm4g
cHJvcGVydGllczsKIH0KIAotUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5n
JiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9j
dW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQs
IGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0
LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgV1RGTW92ZShwYWdlU3R5bGVT
aGVldCksIG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxpc3RlbmVyKSk7CiB9CkBAIC04MTcsNyArODI1
LDcgQEAgU3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVT
aGVldCogcGFnZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBh
Z2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4g
b3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mJiBw
YWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IG1fcGFn
ZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX3BhZ2VTdHlsZVNoZWV0
KFdURk1vdmUocGFnZVN0eWxlU2hlZXQpKQpAQCAtOTQ3LDcgKzk1NSw3IEBAIEV4Y2VwdGlvbk9y
PENTU1N0eWxlUnVsZSo+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcikKICAgICBzZXRUZXh0KHN0eWxlU2hlZXRUZXh0LnRvU3RyaW5nKCkpOwogCiAg
ICAgLy8gSW5zcGVjdG9yIFN0eWxlIFNoZWV0cyBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgdGhvdWdo
IHRoZWlyIHBhcnNlZCBkYXRhIGlzIHJlYWR5LgotICAgIGlmIChtX29yaWdpbiA9PSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcikKKyAgICBpZiAo
bV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yKQog
ICAgICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlcGFy
c2VTdHlsZVNoZWV0KHN0eWxlU2hlZXRUZXh0LnRvU3RyaW5nKCkpOwpAQCAtMTAwNyw3ICsxMDE1
LDcgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdAogICAgIHJldHVybiBpZC5vcmRpbmFsKCkgPj0gbV9m
bGF0UnVsZXMuc2l6ZSgpID8gbnVsbHB0ciA6IG1fZmxhdFJ1bGVzLmF0KGlkLm9yZGluYWwoKSku
Z2V0KCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hl
ZXRCb2R5PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQor
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKQEAgLTEw
MTUsNyArMTAyMyw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRCb2R5PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAKICAgICBSZWZQdHI8Q1NT
UnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gYXNDU1NSdWxlTGlzdChzdHlsZVNoZWV0KTsKIAotICAg
IGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hl
ZXRCb2R5OjpjcmVhdGUoKQogICAgICAgICAuc2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAg
IC5zZXRSdWxlcyhidWlsZEFycmF5Rm9yUnVsZUxpc3QoY3NzUnVsZUxpc3QuZ2V0KCkpKQogICAg
ICAgICAucmVsZWFzZSgpOwpAQCAtMTAyNyw3ICsxMDM1LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkT2IKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlU2hlZXRJbmZvKCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJ
bmZvKCkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQo
KTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCkBAIC0xMDM1LDcgKzEwNDMsNyBAQCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZAogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+b3du
ZXJEb2N1bWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPmZy
YW1lKCkgOiBudWxscHRyOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQo
KSkKICAgICAgICAgLnNldE9yaWdpbihtX29yaWdpbikKICAgICAgICAgLnNldERpc2FibGVkKHN0
eWxlU2hlZXQtPmRpc2FibGVkKCkpCkBAIC0xMDQ4LDkgKzEwNTYsOSBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpidWlsZAogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxw
ZXIoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQsIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
cikKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9y
U2VsZWN0b3JIZWxwZXIoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQsIGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlY3RvcikKIHsKLSAgICBhdXRvIGluc3BlY3RvclNlbGVjdG9yID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcjo6Y3JlYXRlKCkKKyAgICBhdXRvIGluc3BlY3Rv
clNlbGVjdG9yID0gUHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRUZXh0KHNlbGVjdG9yVGV4dCkKICAgICAgICAgLnJlbGVhc2UoKTsKIApAQCAtMTA2NSwx
MSArMTA3MywxMSBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2Vs
ZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxwZXIoYwogICAgIHJldHVybiBpbnNwZWN0
b3JTZWxlY3RvcjsKIH0KIAotc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENTU1J1
bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29uc3Qg
Q1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCitzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENT
U1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29u
c3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24+IGNvbW1lbnQoIi9cXCpbXl0qP1xc
Ki8iLCBKU0M6OllhcnI6OlRleHRDYXNlU2Vuc2l0aXZlLCBKU0M6OllhcnI6Ok11bHRpbGluZUVu
YWJsZWQpOwogCi0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVhdGUoKTsKICAgICBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsKICAgICBm
b3IgKGF1dG8mIHJhbmdlIDogc291cmNlRGF0YS0+c2VsZWN0b3JSYW5nZXMpIHsKICAgICAgICAg
Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHNlbGVjdG9yLCB0aGF0IG1lYW5zIHRoZSBTb3VyY2VEYXRh
IGZvciB0aGlzIENTU1N0eWxlU2hlZXQKQEAgLTEwODksMTcgKzEwOTcsMTcgQEAgc3RhdGljIFJl
ZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBz
ZWxlY3RvcnNGcm9tU28KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCitSZWY8UHJvdG9jb2w6
OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIHJldHVybiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKHNlbGVjdG9yLT5zZWxlY3RvclRleHQoKSwgKnNlbGVjdG9y
KTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUq
IHJ1bGUsIGludCYgZW5kaW5nTGluZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JMaXN0KENTU1N0eWxl
UnVsZSogcnVsZSwgaW50JiBlbmRpbmdMaW5lKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCiAgICAg
ICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcigmcnVsZS0+c3R5bGUoKSk7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rv
cj4+IHNlbGVjdG9yczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpD
U1NTZWxlY3Rvcj4+IHNlbGVjdG9yczsKIAogICAgIC8vIFRoaXMgaW50ZW50aW9uYWxseSBkb2Vz
IG5vdCByZWx5IG9uIHRoZSBzb3VyY2UgZGF0YSB0byBhdm9pZCBjYXRjaGluZyB0aGUgdHJhaWxp
bmcgY29tbWVudHMgKGJlZm9yZSB0aGUgZGVjbGFyYXRpb24gc3RhcnRpbmcgJ3snKS4KICAgICBT
dHJpbmcgc2VsZWN0b3JUZXh0ID0gcnVsZS0+c2VsZWN0b3JUZXh0KCk7CkBAIC0xMTA3LDQxICsx
MTE1LDQyIEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTCiAgICAgaWYgKHNvdXJjZURhdGEpCiAg
ICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Tb3VyY2Uoc291cmNlRGF0YS5nZXQoKSwg
bV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCksIHJ1bGUtPnN0eWxlUnVsZSgpLnNlbGVjdG9yTGlz
dCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc2VsZWN0b3JzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CisgICAgICAgIHNl
bGVjdG9ycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVh
dGUoKTsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QgPSBydWxl
LT5zdHlsZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKTsKICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9y
ID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkKICAgICAgICAgICAgIHNlbGVjdG9y
cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlbGVjdG9yKHNlbGVjdG9yKSk7CiAgICAgfQotICAg
IGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q6OmNy
ZWF0ZSgpCi0gICAgICAgIC5zZXRTZWxlY3RvcnMoV1RGTW92ZShzZWxlY3RvcnMpKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQorICAgICAg
ICAuc2V0U2VsZWN0b3JzKHNlbGVjdG9ycy5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAuc2V0
VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgaWYgKHNvdXJjZURh
dGEpCi0gICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3Vy
Y2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSk7Cisg
ICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBidWlsZFNvdXJj
ZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZSwgbGluZUVuZGluZ3MoKSwg
JmVuZGluZ0xpbmUpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShyYW5nZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVT
aGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBpbnQgZW5kaW5nTGluZSA9IDA7Ci0gICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VsZWN0b3JMaXN0KGJ1aWxk
T2JqZWN0Rm9yU2VsZWN0b3JMaXN0KHJ1bGUsIGVuZGluZ0xpbmUpKQogICAgICAgICAuc2V0U291
cmNlTGluZShlbmRpbmdMaW5lKQogICAgICAgICAuc2V0T3JpZ2luKG1fb3JpZ2luKQogICAgICAg
ICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5bGUoKSkpCiAgICAgICAg
IC5yZWxlYXNlKCk7CiAKLSAgICBpZiAobV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3IgfHwgbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyKQorICAgIGlmIChtX29yaWdpbiA9
PSBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3IgfHwgbV9vcmlnaW4gPT0g
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikKICAgICAgICAgcmVzdWx0LT5z
ZXRTb3VyY2VVUkwoZmluYWxVUkwoKSk7CiAKICAgICBpZiAoY2FuQmluZCgpKSB7Ci0gICAgICAg
IEluc3BlY3RvckNTU0lkIGlkKHJ1bGVJZChydWxlKSk7Ci0gICAgICAgIGlmICghaWQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRSdWxlSWQoaWQuYXNQcm90b2NvbFZhbHVlPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKTsKKyAgICAgICAgaWYgKGF1dG8g
cnVsZUlkID0gdGhpcy0+cnVsZUlkKHJ1bGUpLmFzUHJvdG9jb2xWYWx1ZTxQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlSWQ+KCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFJ1bGVJZChydWxlSWQucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgYXV0byBncm91cGluZ3NQYXlsb2FkID0gYnVp
bGRBcnJheUZvckdyb3VwaW5ncygqcnVsZSk7CkBAIC0xMTUxLDcgKzExNjAsNyBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpi
dWlsZE9iamVjdEZvclJ1bAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorUmVmPFByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMTU5
LDEzICsxMTY4LDE1IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0CiAKICAgICBJbnNwZWN0b3JD
U1NJZCBpZCA9IHJ1bGVPclN0eWxlSWQoc3R5bGUpOwogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0
ZSgpCi0gICAgICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+OjpjcmVhdGUoKSkKLSAgICAgICAgICAgIC5zZXRTaG9y
dGhhbmRFbnRyaWVzKEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRF
bnRyeT46OmNyZWF0ZSgpKQorICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhBcnJheU9mPFByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCisgICAgICAgICAgICAuc2V0U2hvcnRoYW5k
RW50cmllcyhBcnJheU9mPFByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCkp
CiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgIH0KKwogICAgIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBpbnNwZWN0b3JTdHlsZUZvcklkKGlkKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0gaW5zcGVjdG9y
U3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gaW5zcGVj
dG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIAogICAgIC8vIFN0eWxlIHRleHQgY2Fu
bm90IGJlIHJldHJpZXZlZCB3aXRob3V0IHN0eWxlc2hlZXQsIHNvIHNldCBjc3NUZXh0IGhlcmUu
CiAgICAgaWYgKHNvdXJjZURhdGEpIHsKQEAgLTEyNzQsNyArMTI4NSw3IEBAIGJvb2wgSW5zcGVj
dG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldE11dGF0ZWQoKSBjb25zdAogCiBib29sIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCiB7Ci0gICAgYm9vbCBhbGxvd1Bh
cnNlZERhdGEgPSBtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW46Okluc3BlY3RvciB8fCAhc3R5bGVTaGVldE11dGF0ZWQoKTsKKyAgICBib29sIGFs
bG93UGFyc2VkRGF0YSA9IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46Okluc3BlY3RvciB8fCAhc3R5bGVTaGVldE11dGF0ZWQoKTsKICAgICByZXR1cm4gYWxsb3dQ
YXJzZWREYXRhICYmIGVuc3VyZVRleHQoKSAmJiBlbnN1cmVTb3VyY2VEYXRhKCk7CiB9CiAKQEAg
LTEzNzEsNyArMTM4Miw3IEBAIEluc3BlY3RvckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1
bGVJZChDU1NTdHlsZVJ1bGUqIHJ1bGUpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6b3JpZ2luYWxTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwgbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCisgICAgaWYgKCFtX3BhZ2VTdHlsZVNo
ZWV0IHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJB
Z2VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBpbmxpbmVTdHlsZVNoZWV0
VGV4dChyZXN1bHQpIHx8IHJlc291cmNlU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCBleHRlbnNp
b25TdHlsZVNoZWV0VGV4dChyZXN1bHQpOwogfQpAQCAtMTQxNCw5ICsxNDI1LDkgQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpleHRlbnNpb25TdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3Vs
dCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRB
cnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKK1JlZjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5
Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQogewotICAgIGF1dG8gcmVzdWx0ID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUo
KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT46OmNyZWF0ZSgpOwogICAgIGlmICghcnVsZUxpc3QpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKQEAgLTE0MjQsOCArMTQzNSwxMCBAQCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZAogICAgIENT
U1N0eWxlUnVsZVZlY3RvciBydWxlczsKICAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURk1vdmUocmVm
UnVsZUxpc3QpLCAmcnVsZXMpOwogCi0gICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpCi0gICAg
ICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVjdEZvclJ1bGUocnVsZS5nZXQoKSkpOworICAg
IGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7CisgICAgICAgIGlmIChhdXRvIHJ1bGVPYmplY3Qg
PSBidWlsZE9iamVjdEZvclJ1bGUocnVsZS5nZXQoKSkpCisgICAgICAgICAgICByZXN1bHQtPmFk
ZEl0ZW0ocnVsZU9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMTQ0OCwxMiArMTQ2MSwxMiBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUmVmUHRyPENTU1J1bGVMaXN0PiYmIHJ1bGVMaXN0LCBDU1NT
dAogICAgIH0KIH0KIAotUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVsZW1l
bnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExp
c3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VB
Z2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5bGVkRWxlbWVudD4mJiBl
bGVtZW50LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIq
IGxpc3RlbmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZShwYWdlQWdlbnQsIGlkLCBXVEZNb3ZlKGVsZW1lbnQpLCBvcmlnaW4s
IGxpc3RlbmVyKSk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFn
ZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29u
c3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IElu
c3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgbnVsbHB0ciwgb3JpZ2luLCBTdHJpbmco
KSwgbGlzdGVuZXIpCiAgICAgLCBtX2VsZW1lbnQoV1RGTW92ZShlbGVtZW50KSkKICAgICAsIG1f
cnVsZVNvdXJjZURhdGEobnVsbHB0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IDczZDM2MThlNWE0OGEzNzQ1NzYyNmRkNTQ4ZGNlN2Uz
NmIxZGUxMzUuLjc4ZjE0ZDI5MTZiYWE1YzM3ZTAxMDkzOTJmMjFlZjY2YTY1NWY3NmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtNDUs
MTggKzQ1LDE5IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBj
bGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQogY2xhc3MgSW5zcGVjdG9yQ1NTSWQgewogcHVibGljOgogICAgIEluc3BlY3RvckNTU0lkKCkg
PSBkZWZhdWx0OwogCiAgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoY29uc3QgSlNPTjo6T2Jq
ZWN0JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNo
ZWV0SWQiX3MsIG1fc3R5bGVTaGVldElkKSkKKyAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSB2YWx1
ZS5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCJfcyk7CisgICAgICAgIGlmICghbV9zdHlsZVNoZWV0
SWQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCF2YWx1ZS5nZXRJbnRlZ2Vy
KCJvcmRpbmFsIl9zLCBtX29yZGluYWwpKQorICAgICAgICBpZiAoYXV0byBvcmRpbmFsID0gdmFs
dWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcykpCisgICAgICAgICAgICBtX29yZGluYWwgPSAqb3Jk
aW5hbDsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSBTdHJpbmco
KTsKICAgICB9CiAKQEAgLTEyNiw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgfkluc3BlY3RvclN0
eWxlKCk7CiAKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uJiBjc3NTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OworICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7
CiAgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiBidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0Owog
CiAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CkBAIC0xNzUsNyArMTc2LDcg
QEAgcHVibGljOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRCb2R5PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0
eWxlU2hlZXRJbmZvKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0U3R5bGVUZXh0KGNvbnN0IEluc3BlY3RvckNTU0lkJiwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBTdHJpbmcqIG9sZFRleHQpOwogCiAgICAgdmlydHVhbCBFeGNlcHRpb25P
cjxTdHJpbmc+IHRleHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKaW5kZXggMzYzZDE2OGU4MDVlYTNmODdkN2JjOWQ4
MjlkNDZkZTZjYmY1MmFhZS4uYTA3MDMzNmI3NTYxZGE4NWVjYjVmZmY0YzE0YjYxYmZmMzk2MjEz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5jcHAKQEAgLTE2MSw5ICsxNjEsOSBAQCBSZWY8SlNPTjo6T2JqZWN0PiBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiAgICAg
cmV0dXJuIGRhdGE7CiB9CiAKLXZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlv
dXRSb290KEpTT046Ok9iamVjdCogZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQordm9pZCBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0JiBkYXRh
LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgZGF0YS0+c2V0QXJyYXkoInJvb3QiX3Ms
IGNyZWF0ZVF1YWQocXVhZCkpOworICAgIGRhdGEuc2V0QXJyYXkoInJvb3QiX3MsIGNyZWF0ZVF1
YWQocXVhZCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKaW5kZXggNDhmNDMwZTliZWQ5
M2QxYWZkMmJhMzZlNTk1N2U3ZWYwNjE4YjNhYS4uY2E1ZGI0MTA4OThkYjkzY2QwYTM1YzI2Mjc5
MDljMWQ0OWUxYzI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGlu
ZVJlY29yZEZhY3RvcnkuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxKU09OOjpPYmplY3Q+IGNyZWF0ZU9ic2VydmVyQ2FsbGJhY2tEYXRhKGNvbnN0IFN0cmluZyYg
Y2FsbGJhY2tUeXBlKTsKICAgICBzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gY3JlYXRlUGFpbnRE
YXRhKGNvbnN0IEZsb2F0UXVhZCYpOwogCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kTGF5b3V0Um9v
dChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOworICAgIHN0YXRpYyB2b2lk
IGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0JiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmKTsK
IAogcHJpdmF0ZToKICAgICBUaW1lbGluZVJlY29yZEZhY3RvcnkoKSB7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25B
Z2VudC5jcHAKaW5kZXggNzEzMjVmNTIyZDNhMTIzYTUzNGZjN2ZmM2E1ODRiNThiYzk0ZjkzNi4u
MDI1NzEyYjA5NDY0ZWM2YjE1NDdlY2Y3MDY2ZTIwYmRmYWJmNDFjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25B
Z2VudC5jcHAKQEAgLTcyLDQ1ICs3Miw0NSBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBwcm90
b2NvbFZhbHVlRm9yU2Vjb25kcyhjb25zdCBTZWNvbmRzJiBzZWNvbmRzKQogICAgIHJldHVybiBz
ZWNvbmRzLm1pbGxpc2Vjb25kcygpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBs
YXliYWNrRGlyZWN0aW9uKFBsYXliYWNrRGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQorc3Rh
dGljIE9wdGlvbmFsPFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uPiBwcm90
b2NvbFZhbHVlRm9yUGxheWJhY2tEaXJlY3Rpb24oUGxheWJhY2tEaXJlY3Rpb24gcGxheWJhY2tE
aXJlY3Rpb24pCiB7CiAgICAgc3dpdGNoIChwbGF5YmFja0RpcmVjdGlvbikgewogICAgIGNhc2Ug
UGxheWJhY2tEaXJlY3Rpb246Ok5vcm1hbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246Ok5vcm1hbDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw7CiAgICAg
Y2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6UmV2ZXJzZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6UmV2ZXJz
ZTsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpBbHRlcm5hdGU6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6QWx0ZXJuYXRlOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZVJl
dmVyc2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBs
YXliYWNrRGlyZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZVJldmVyc2U7CiAgICAg
fQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAotc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKK3N0YXRp
YyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZT4gcHJvdG9jb2xWYWx1ZUZv
ckZpbGxNb2RlKEZpbGxNb2RlIGZpbGxNb2RlKQogewogICAgIHN3aXRjaCAoZmlsbE1vZGUpIHsK
ICAgICBjYXNlIEZpbGxNb2RlOjpOb25lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpBbmltYXRpb246OkZpbGxNb2RlOjpOb25lOwogICAgIGNhc2UgRmlsbE1vZGU6OkZvcndhcmRz
OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9k
ZTo6Rm9yd2FyZHM7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9k
ZTo6Rm9yd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6QmFja3dhcmRzOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6QmFja3dhcmRzOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJhY2t3YXJkczsK
ICAgICBjYXNlIEZpbGxNb2RlOjpCb3RoOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpBbmltYXRpb246OkZpbGxNb2RlOjpCb3RoOwogICAgIGNhc2UgRmlsbE1vZGU6OkF1dG86Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpB
dXRvOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkF1dG87
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KIAotc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEZvcktleWZyYW1lcyhLZXlmcmFtZUVm
ZmVjdCYga2V5ZnJhbWVFZmZlY3QpCitzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEZvcktleWZyYW1lcyhLZXlmcmFtZUVm
ZmVjdCYga2V5ZnJhbWVFZmZlY3QpCiB7Ci0gICAgYXV0byBrZXlmcmFtZXNQYXlsb2FkID0gSlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPjo6Y3Jl
YXRlKCk7CisgICAgYXV0byBrZXlmcmFtZXNQYXlsb2FkID0gSlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOwogCiAgICAgY29uc3QgYXV0byYgYmxl
bmRpbmdLZXlmcmFtZXMgPSBrZXlmcmFtZUVmZmVjdC5ibGVuZGluZ0tleWZyYW1lcygpOwogICAg
IGNvbnN0IGF1dG8mIHBhcnNlZEtleWZyYW1lcyA9IGtleWZyYW1lRWZmZWN0LnBhcnNlZEtleWZy
YW1lcygpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGCiAgICAg
ICAgICAgICBBU1NFUlQoYmxlbmRpbmdLZXlmcmFtZS5zdHlsZSgpKTsKICAgICAgICAgICAgIGF1
dG8mIHN0eWxlID0gKmJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUoKTsKIAotICAgICAgICAgICAgYXV0
byBrZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZy
YW1lOjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zm
c2V0KGJsZW5kaW5nS2V5ZnJhbWUua2V5KCkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsK
IApAQCAtMTY3LDcgKzE2Nyw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGCiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhcnNlZEtleWZyYW1lIDog
cGFyc2VkS2V5ZnJhbWVzKSB7Ci0gICAgICAgICAgICBhdXRvIGtleWZyYW1lUGF5bG9hZCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCisgICAgICAg
ICAgICBhdXRvIGtleWZyYW1lUGF5bG9hZCA9IFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRPZmZzZXQocGFyc2VkS2V5ZnJhbWUuY29t
cHV0ZWRPZmZzZXQpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIApAQCAtMTg2LDkgKzE4
Niw5IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmlt
YXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGCiAgICAgcmV0dXJuIGtleWZyYW1lc1BheWxv
YWQ7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q+IGJ1aWxkT2JqZWN0Rm9yRWZmZWN0KEFuaW1hdGlvbkVmZmVjdCYgZWZmZWN0KQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZlY3Q+IGJ1aWxkT2JqZWN0Rm9yRWZmZWN0KEFu
aW1hdGlvbkVmZmVjdCYgZWZmZWN0KQogewotICAgIGF1dG8gZWZmZWN0UGF5bG9hZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0OjpjcmVhdGUoKQorICAgIGF1dG8gZWZm
ZWN0UGF5bG9hZCA9IFByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3JlYXRlKCkKICAgICAg
ICAgLnJlbGVhc2UoKTsKIAogICAgIGlmIChhdXRvIHN0YXJ0RGVsYXkgPSBwcm90b2NvbFZhbHVl
Rm9yU2Vjb25kcyhlZmZlY3QuZGVsYXkoKSkpCkBAIC0yMzgsMjAgKzIzOCwxNyBAQCB2b2lkIElu
c3BlY3RvckFuaW1hdGlvbkFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRl
bmRSb3V0ZXIqLCBCYWNrZQogCiB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojp3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgc3RvcFRyYWNraW5nKGlnbm9yZWQpOwotICAgIGRpc2FibGUoaWdu
b3JlZCk7CisgICAgc3RvcFRyYWNraW5nKCk7CisgICAgZGlzYWJsZSgpOwogCiAgICAgQVNTRVJU
KG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50QW5pbWF0aW9uQWdlbnQoKSA9PSB0aGlz
KTsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudEFuaW1hdGlvbkFnZW50
KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkQW5pbWF0aW9uQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkFuaW1hdGlvbiBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdB
Z2VudHMuc2V0RW5hYmxlZEFuaW1hdGlvbkFnZW50KHRoaXMpOwogCkBAIC0yNzAsNDkgKzI2Nyw1
MSBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogICAgICAgICAgICAgICAgIGJpbmRBbmltYXRpb24oKmFuaW1hdGlvbiwgZmFs
c2UpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlzYWJsZSgpCiB7CiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudChudWxscHRy
KTsKIAogICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpyZXF1ZXN0RWZmZWN0VGFyZ2V0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwgaW50KiBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckFuaW1hdGlvbkFn
ZW50OjpyZXF1ZXN0RWZmZWN0VGFyZ2V0KGNvbnN0IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1h
dGlvbklkJiBhbmltYXRpb25JZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvKiBhbmltYXRpb24gPSBhc3NlcnRBbmltYXRpb24oZXJyb3JTdHJp
bmcsIGFuaW1hdGlvbklkKTsKICAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
ZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0g
ICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFn
ZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBl
bmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGVmZmVjdCA9IGFuaW1hdGlvbi0+ZWZmZWN0KCk7Ci0g
ICAgaWYgKCFpczxLZXlmcmFtZUVmZmVjdD4oZWZmZWN0KSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYW4gZWZm
ZWN0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8S2V5ZnJhbWVFZmZl
Y3Q+KGVmZmVjdCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGZv
ciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfcyk7CiAKICAgICBh
dXRvJiBrZXlmcmFtZUVmZmVjdCA9IGRvd25jYXN0PEtleWZyYW1lRWZmZWN0PigqZWZmZWN0KTsK
IAogICAgIGF1dG8qIHRhcmdldCA9IGtleWZyYW1lRWZmZWN0LnRhcmdldEVsZW1lbnRPclBzZXVk
b0VsZW1lbnQoKTsKLSAgICBpZiAoIXRhcmdldCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJB
bmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYSB0YXJnZXQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zKTsKIAotICAgICpub2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgdGFyZ2V0KTsKKyAgICByZXR1cm4gZG9tQWdlbnQt
PnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVj
dEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlv
bihjb25zdCBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0QW5pbWF0aW9uKGVycm9y
U3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1
dG8qIHN0YXRlID0gYW5pbWF0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0
ZSgpOwogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5p
bmplY3RlZFNjcmlwdEZvcihzdGF0ZSk7CkBAIC0zMjgsMzggKzMyNyw0MiBAQCB2b2lkIEluc3Bl
Y3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHVua25vd24g
QW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCJfczsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmtub3duIEFuaW1h
dGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmpl
Y3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAg
IHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFt
ZSk7CisgICAgYXV0byBvYmplY3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBv
YmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IEFuaW1hdGlvbiIpOworCisgICAg
cmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1h
dGlvbkFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpzdGFydFRy
YWNraW5nKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5nQW5pbWF0
aW9uQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1hdGlvbiBk
b21haW4gYWxyZWFkeSB0cmFja2luZyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5nQW5pbWF0aW9uQWdlbnQoKSA9PSB0aGlz
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBkb21haW4gYWxyZWFk
eSB0cmFja2luZyJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdB
bmltYXRpb25BZ2VudCh0aGlzKTsKIAogICAgIEFTU0VSVChtX3RyYWNrZWREZWNsYXJhdGl2ZUFu
aW1hdGlvbkRhdGEuaXNFbXB0eSgpKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFj
a2luZ1N0YXJ0KG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUo
KS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RvcFRyYWNraW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmcoKQogewog
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMudHJhY2tpbmdBbmltYXRpb25BZ2VudCgpICE9
IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRUcmFja2luZ0FuaW1hdGlvbkFnZW50KG51bGxwdHIpOwogCiAg
ICAgbV90cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmNsZWFyKCk7CiAKICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlv
blN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKIHN0YXRpYyBib29sIGlzRGVsYXllZChDb21wdXRlZEVmZmVjdFRpbWluZyYgY29tcHV0
ZWRUaW1pbmcpCkBAIC0zODAsMzEgKzM4MywzMSBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFn
ZW50Ojp3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50JiB0YXJnZXQsIEtleWZyYW1lRQog
ICAgIH0pOwogICAgIGF1dG8mIHRyYWNraW5nRGF0YSA9IGVuc3VyZVJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAKLSAgICBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlPiBhbmltYXRpb25BbmltYXRpb25TdGF0ZTsKKyAgICBPcHRpb25hbDxQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CiAKICAgICBpZiAoKGVuc3VyZVJlc3VsdC5pc05ld0VudHJ5IHx8ICFpc0RlbGF5ZWQodHJhY2tp
bmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZykpICYmIGlzRGVsYXllZChjb21wdXRlZFRpbWluZykp
Ci0gICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RGVsYXllZDsKKyAgICAgICAgYW5pbWF0aW9uQW5p
bWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RGVsYXll
ZDsKICAgICBlbHNlIGlmIChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8fCB0cmFja2luZ0RhdGEu
bGFzdENvbXB1dGVkVGltaW5nLnBoYXNlICE9IGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAgICAg
ICAgIHN3aXRjaCAoY29tcHV0ZWRUaW1pbmcucGhhc2UpIHsKICAgICAgICAgY2FzZSBBbmltYXRp
b25FZmZlY3RQaGFzZTo6QmVmb3JlOgotICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3Rh
dGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFk
eTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6QW5pbWF0aW9uU3RhdGU6OlJlYWR5OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWN0aXZlOgotICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1h
dGlvblN0YXRlOjpBY3RpdmU7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9
IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBoYXNlOjpBZnRlcjoKLSAg
ICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RG9uZTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFu
aW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBoYXNl
OjpJZGxlOgotICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKKyAgICAgICAg
ICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uU3RhdGU6OkNhbmNlbGVkOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlv
biAhPSBjb21wdXRlZFRpbWluZy5jdXJyZW50SXRlcmF0aW9uKSB7CiAgICAgICAgIC8vIEl0ZXJh
dGlvbnMgYXJlIHJlcHJlc2VudGVkIGJ5IHNlcXVlbnRpYWwgImFjdGl2ZSIgc3RhdGUgZXZlbnRz
LgotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkFjdGl2ZTsKKyAgICAgICAgYW5pbWF0aW9uQW5p
bWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZl
OwogICAgIH0KIAogICAgIHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcgPSBjb21wdXRl
ZFRpbWluZzsKQEAgLTQxMiw3ICs0MTUsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50
Ojp3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50JiB0YXJnZXQsIEtleWZyYW1lRQogICAg
IGlmICghYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gZXZlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRl
OjpjcmVhdGUoKQorICAgIGF1dG8gZXZlbnQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpUcmFja2lu
Z1VwZGF0ZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRyYWNraW5nQW5pbWF0aW9uSWQodHJhY2tp
bmdEYXRhLnRyYWNraW5nQW5pbWF0aW9uSWQpCiAgICAgICAgIC5zZXRBbmltYXRpb25TdGF0ZShh
bmltYXRpb25BbmltYXRpb25TdGF0ZS52YWx1ZSgpKQogICAgICAgICAucmVsZWFzZSgpOwpAQCAt
NDQxLDggKzQ0NCw3IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpZENoYW5nZVdl
YkFuaW1hdGlvbk5hbWUoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCiAgICAgaWYgKGFuaW1hdGlv
bklkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYW1lID0gYW5pbWF0
aW9uLmlkKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5hbWVDaGFuZ2VkKGFuaW1hdGlv
bklkLCAhbmFtZS5pc0VtcHR5KCkgPyAmbmFtZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5uYW1lQ2hhbmdlZChhbmltYXRpb25JZCwgYW5pbWF0aW9uLmlkKCkpOwogfQog
CiB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpkaWRTZXRXZWJBbmltYXRpb25FZmZlY3Qo
V2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCkBAIC01MjUsNyArNTI3LDcgQEAgU3RyaW5nIEluc3Bl
Y3RvckFuaW1hdGlvbkFnZW50OjpmaW5kQW5pbWF0aW9uSWQoV2ViQW5pbWF0aW9uJiBhbmltYXRp
b24pCiAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKIH0KIAotV2ViQW5pbWF0aW9uKiBJbnNwZWN0
b3JBbmltYXRpb25BZ2VudDo6YXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKK1dlYkFuaW1hdGlvbiogSW5zcGVjdG9yQW5p
bWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbklkKQogewogICAgIGF1dG8qIGFuaW1hdGlv
biA9IG1fYW5pbWF0aW9uSWRNYXAuZ2V0KGFuaW1hdGlvbklkKTsKICAgICBpZiAoIWFuaW1hdGlv
bikKQEAgLTUzOCw3ICs1NDAsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpiaW5k
QW5pbWF0aW9uKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uLCBib29sIGNhcHR1cgogICAgIGF1dG8g
YW5pbWF0aW9uSWQgPSBtYWtlU3RyaW5nKCJhbmltYXRpb246IiArIElkZW50aWZpZXJzRmFjdG9y
eTo6Y3JlYXRlSWRlbnRpZmllcigpKTsKICAgICBtX2FuaW1hdGlvbklkTWFwLnNldChhbmltYXRp
b25JZCwgJmFuaW1hdGlvbik7CiAKLSAgICBhdXRvIGFuaW1hdGlvblBheWxvYWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbjo6Y3JlYXRlKCkKKyAgICBhdXRvIGFu
aW1hdGlvblBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNyZWF0ZSgp
CiAgICAgICAgIC5zZXRBbmltYXRpb25JZChhbmltYXRpb25JZCkKICAgICAgICAgLnJlbGVhc2Uo
KTsKIApAQCAtNjAzLDkgKzYwNSw5IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0
b3BUcmFja2luZ0RlY2xhcmF0aXZlQW5pbWF0aW9uKERlY2xhcmF0aXZlQW5pbWF0CiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChpdC0+dmFsdWUubGFzdENvbXB1dGVkVGltaW5nLnBoYXNlICE9
IEFuaW1hdGlvbkVmZmVjdFBoYXNlOjpBZnRlciAmJiBpdC0+dmFsdWUubGFzdENvbXB1dGVkVGlt
aW5nLnBoYXNlICE9IEFuaW1hdGlvbkVmZmVjdFBoYXNlOjpJZGxlKSB7Ci0gICAgICAgIGF1dG8g
ZXZlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpj
cmVhdGUoKQorICAgICAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6VHJhY2tp
bmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0VHJhY2tpbmdBbmltYXRpb25JZChp
dC0+dmFsdWUudHJhY2tpbmdBbmltYXRpb25JZCkKLSAgICAgICAgICAgIC5zZXRBbmltYXRpb25T
dGF0ZShJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5j
ZWxlZCkKKyAgICAgICAgICAgIC5zZXRBbmltYXRpb25TdGF0ZShQcm90b2NvbDo6QW5pbWF0aW9u
OjpBbmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdVcGRhdGUobV9lbnZpcm9ubWVudC5l
eGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSwgV1RGTW92ZShldmVu
dCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaAppbmRleCA4YjUxMTYyOGM5N2EyMjJhOGY5YWNk
OGQzZTViMjAyYThkYmI2YmVjLi4wNjRhYzQwNjNjMzA5ZmRiNDFjNzFiZmNmNmNiZDllYTY0ZWQ5
MzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckFuaW1hdGlvbkFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCkBAIC00NCwyNiArNDQsMjQgQEAgY2xhc3MgS2V5ZnJh
bWVFZmZlY3Q7CiBjbGFzcyBQYWdlOwogY2xhc3MgV2ViQW5pbWF0aW9uOwogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpBbmltYXRpb25C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckFuaW1hdGlvbkFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBJbnNwZWN0b3JBbmltYXRpb25BZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAg
fkluc3BlY3RvckFuaW1hdGlvbkFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckFuaW1h
dGlvbkFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFuaW1hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0RWZmZWN0VGFyZ2V0KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25JZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzb2x2ZUFuaW1hdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFRyYWNraW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3RFZmZlY3RUYXJnZXQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVBbmltYXRpb24oY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXApOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRU
cmFja2luZygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c3RvcFRyYWNraW5nKCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2
b2lkIHdpbGxBcHBseUtleWZyYW1lRWZmZWN0KEVsZW1lbnQmLCBLZXlmcmFtZUVmZmVjdCYsIENv
bXB1dGVkRWZmZWN0VGltaW5nKTsKQEAgLTc3LDcgKzc1LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIFN0cmluZyBmaW5kQW5pbWF0aW9uSWQoV2ViQW5pbWF0aW9uJik7Ci0gICAgV2ViQW5p
bWF0aW9uKiBhc3NlcnRBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbklkKTsKKyAgICBXZWJBbmltYXRpb24qIGFzc2VydEFuaW1hdGlvbihJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpOwogICAgIHZv
aWQgYmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mLCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwog
ICAgIHZvaWQgdW5iaW5kQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpOwogICAg
IHZvaWQgYW5pbWF0aW9uRGVzdHJveWVkVGltZXJGaXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuY3BwCmluZGV4IDkxMjkyNjQ4ZDY4MmQ5YzM4MWU1MjRmZDA5NzAwOGE0N2Mz
NjUwNGEuLmFmNjczNzhhNmRkY2QxYWU3NzI0NGU4OTk1MzY3NzNhNzAyN2IwM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKQEAgLTU3LDMxICs1NywzMCBAQCB2b2lkIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kUm91dGVyKgogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAg
ICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpID09
IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4g
YWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2lu
c3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpID09IHRoaXMp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQXBwbGljYXRpb25DYWNoZSBkb21haW4g
YWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFi
bGVkQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMpOwogCiAgICAgLy8gV2UgbmVlZCB0byBwYXNz
IGluaXRpYWwgbmF2aWdhdG9yLm9uT25saW5lLgogICAgIG5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZSgpCiB7
Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFn
ZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBcHBsaWNhdGlvbkNhY2hl
IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgp
ICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQXBwbGljYXRpb25DYWNo
ZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudChudWxscHRyKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojp1cGRhdGVB
cHBsaWNhdGlvbkNhY2hlU3RhdHVzKEZyYW1lKiBmcmFtZSkKQEAgLTEwOSwxNiArMTA4LDEzIEBA
IHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpuZXR3b3JrU3RhdGVDaGFuZ2Vk
KCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmV0d29ya1N0YXRlVXBkYXRlZChwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+aXNPbkxpbmUoKSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+PiYgcmVzdWx0KQor
RXhwZWN0ZWQ8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZy
YW1lV2l0aE1hbmlmZXN0Pj4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKCkKIHsKICAgICBhdXRvKiBw
YWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAg
IGlmICghcGFnZUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBhZ2UgZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdCA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJh
bWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKKyAgICBpZiAoIXBhZ2VBZ2VudCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwog
CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpBcHBsaWNhdGlvbkNh
Y2hlOjpGcmFtZVdpdGhNYW5pZmVzdD46OmNyZWF0ZSgpOwogICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBhdXRvKiBkb2N1bWVudExvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwogICAgICAgICBpZiAoIWRvY3VtZW50TG9h
ZGVyKQpAQCAtMTI3LDE2ICsxMjMsMTcgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmIGVycm9yU3QKICAgICAg
ICAgYXV0byYgaG9zdCA9IGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwog
ICAgICAgICBTdHJpbmcgbWFuaWZlc3RVUkwgPSBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCku
bWFuaWZlc3Quc3RyaW5nKCk7CiAgICAgICAgIGlmICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICByZXN1bHQtPmFkZEl0ZW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCisgICAgICAgICAgICByZXN1
bHQtPmFkZEl0ZW0oUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0
OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRGcmFtZUlkKHBhZ2VBZ2VudC0+ZnJhbWVJ
ZChmcmFtZSkpCiAgICAgICAgICAgICAgICAgLnNldE1hbmlmZXN0VVJMKG1hbmlmZXN0VVJMKQog
ICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3RhdGljX2Nhc3Q8aW50Pihob3N0LnN0YXR1cygp
KSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1Eb2N1bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50Ojphc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK0RvY3VtZW50TG9hZGVyKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKTsKICAgICBpZiAoIXBhZ2VB
Z2VudCkgewpAQCAtMTUxLDI4ICsxNDgsMzIgQEAgRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXIKICAg
ICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihlcnJvclN0
cmluZywgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
Z2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgU3RyaW5nKiBtYW5pZmVzdFVSTCkKK0V4cGVjdGVkPFN0cmluZywgUHJvdG9j
b2w6OkVycm9yU3RyaW5nPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlm
ZXN0Rm9yRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYg
ZnJhbWVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRGcmFtZVdpdGhEb2N1bWVu
dExvYWRlcihlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgKm1hbmlmZXN0VVJMID0gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCkuYXBwbGljYXRpb25DYWNoZUluZm8oKS5tYW5pZmVzdC5zdHJpbmcoKTsKKyAgICBy
ZXR1cm4gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkuYXBwbGljYXRpb25D
YWNoZUluZm8oKS5tYW5pZmVzdC5zdHJpbmcoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+JiBhcHBsaWNhdGlvbkNh
Y2hlKQorRXhwZWN0ZWQ8UmVmPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlPiwgUHJvdG9jb2w6OkVycm9yU3RyaW5nPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRvY3VtZW50TG9hZGVyID0gYXNzZXJ0RnJh
bWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZG9j
dW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKTsKLSAgICBhcHBsaWNhdGlvbkNhY2hlID0gYnVpbGRPYmplY3RG
b3JBcHBsaWNhdGlvbkNhY2hlKGhvc3QucmVzb3VyY2VMaXN0KCksIGhvc3QuYXBwbGljYXRpb25D
YWNoZUluZm8oKSk7CisgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZSho
b3N0LnJlc291cmNlTGlzdCgpLCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNo
ZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0
aW9uQ2FjaGUoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8+
JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Q2FjaGVJbmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykKK1JlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
OjpidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpSZXNvdXJjZUluZm8+JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykK
IHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBw
bGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9u
Q2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNYW5pZmVzdFVS
TChhcHBsaWNhdGlvbkNhY2hlSW5mby5tYW5pZmVzdC5zdHJpbmcoKSkKICAgICAgICAgLnNldFNp
emUoYXBwbGljYXRpb25DYWNoZUluZm8uc2l6ZSkKICAgICAgICAgLnNldENyZWF0aW9uVGltZShh
cHBsaWNhdGlvbkNhY2hlSW5mby5jcmVhdGlvblRpbWUpCkBAIC0xODEsMTUgKzE4MiwxNSBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNo
ZT4gSW5zcGVjdG9yQXBwbGljYXRpbwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1SZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxk
QXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKK1Jl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CisgICAgYXV0byBy
ZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGluZm8gOiBhcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2VzKQogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmpl
Y3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoaW5mbykpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRP
YmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhv
c3Q6OlJlc291cmNlSW5mbyYgcmVzb3VyY2VJbmZvKQorUmVmPFByb3RvY29sOjpBcHBsaWNhdGlv
bkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYgcmVzb3VyY2VJbmZvKQogewogICAgIFN0
cmluZ0J1aWxkZXIgdHlwZXM7CiAKQEAgLTIwOCw3ICsyMDksNyBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcAogICAgIGlmIChyZXNvdXJjZUluZm8uaXNFeHBsaWNpdCkKICAgICAgICAgdHlwZXMu
YXBwZW5kTGl0ZXJhbCgiRXhwbGljaXQgIik7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
KQorICAgIHJldHVybiBQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNo
ZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHJlc291cmNlSW5mby5yZXNvdXJj
ZS5zdHJpbmcoKSkKICAgICAgICAgLnNldFNpemUoc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJjZUlu
Zm8uc2l6ZSkpCiAgICAgICAgIC5zZXRUeXBlKHR5cGVzLnRvU3RyaW5nKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaAppbmRleCA1MTk4OGY2MTdkZTExZWYxMTcwOGE3YjM5MmNmMGNl
MTk0YjQ4NmVhLi44MDc2Nzk3Y2FiNjA5YjkyMzY3OTNlMjI4MWE1ODljNGNkMTQ2MjU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTM5LDI1ICszOSwyMyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQgZmlu
YWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpBcHBsaWNh
dGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudChQ
YWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQXBwbGljYXRpb25D
YWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRo
TWFuaWZlc3Q+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldE1hbmlmZXN0Rm9yRnJh
bWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RV
UkwpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4mKSBvdmVycmlkZTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+Pj4gZ2V0
RnJhbWVzV2l0aE1hbmlmZXN0cygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlPj4gZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbgogICAgIHZvaWQgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSopOwpA
QCAtNjgsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+
IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYpOwogICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IGJ1aWxk
T2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpSZXNvdXJjZUluZm8mKTsKIAotICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7Cisg
ICAgRG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6RnJhbWVJZCYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6QXBwbGlj
YXRpb25DYWNoZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggYTBlNmZjNDUz
MTUxNmQ5ODkzMjExNWJiNGI5Y2EyYjJjMjMwNTY5My4uODI4MTFiZTUxY2Y0NjNjNDExODBiZGU4
MDQ1ODIyZDQ3ZmUxZTUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuY3BwCkBAIC01MywxNiAr
NTMsMTUgQEAgdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWMKIAogdm9pZCBJbnNwZWN0b3JDUFVQcm9m
aWxlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
KQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgc3RvcFRyYWNraW5nKGlnbm9yZWQp
OworICAgIHN0b3BUcmFja2luZygpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRDUFVQcm9maWxlckFnZW50KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2lu
ZygpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OmFkZE9ic2VydmVyKHRoaXMsIENQ
VSwgW3RoaXNdIChjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkgewogICAgICAgICBjb2xs
ZWN0U2FtcGxlKGRhdGEpOwpAQCAtNzEsMTggKzcwLDIyIEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV90cmFja2luZyA9
IHRydWU7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmly
b25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6c3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3Ry
YWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNv
dXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIG1fdHJhY2tpbmcg
PSBmYWxzZTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ0NvbXBsZXRlKG1f
ZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIFJlZjxQcm90b2NvbDo6Q1BVUHJvZmls
ZXI6OlRocmVhZEluZm8+IGJ1aWxkVGhyZWFkSW5mbyhjb25zdCBUaHJlYWRDUFVJbmZvJiB0aHJl
YWQpCkBAIC0xMTMsNyArMTE2LDcgQEAgdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50Ojpj
b2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKQogICAgICAgICAucmVs
ZWFzZSgpOwogCiAgICAgaWYgKCFkYXRhLmNwdVRocmVhZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDUFVQcm9maWxlcjo6VGhyZWFkSW5mbz4+
IHRocmVhZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDUFVQcm9maWxlcjo6VGhyZWFkSW5m
bz46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHRocmVhZHMgPSBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpDUFVQcm9maWxlcjo6VGhyZWFkSW5mbz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGF1
dG8mIHRocmVhZEluZm8gOiBkYXRhLmNwdVRocmVhZHMpCiAgICAgICAgICAgICB0aHJlYWRzLT5h
ZGRJdGVtKGJ1aWxkVGhyZWFkSW5mbyh0aHJlYWRJbmZvKSk7CiAgICAgICAgIGV2ZW50LT5zZXRU
aHJlYWRzKFdURk1vdmUodGhyZWFkcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaAppbmRleCA0ZWU4
ZTk3ODUzZDcxMmQzZGE2NDM5Yjk4OTdlODY1YTg5NmRiZmZmLi5mZTVlMTg1YWJkYjFjNGYyZjEz
YjRkOGEwN2E5MmJmZDc5ZTY5ZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaApAQCAtMzQsMjIg
KzM0LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpDUFVQcm9maWxlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAg
ICAgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfklu
c3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAK
ICAgICAvLyBDUFVQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc3Rh
cnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFRyYWNraW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IGNvbGxlY3RTYW1wbGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXgg
NTY1ZWJlMDgyYzA3OGJiNjY4Nzc0MDM4OWViMzcyZWUxMTliNzQxYi4uNTk0Yzg0NWMxOGEzMjVk
NTBkOWU1ZTAzODIxMDlmOTIyYjNiY2QyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTkyLDEwICs5Miw3IEBA
IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGNvbnN0IEpTT046OkFycmF5
JiBwc2V1ZG9DbGFzc0FycmF5KQogCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gUHNldWRvQ2xhc3NO
b25lOwogICAgIGZvciAoYXV0byYgcHNldWRvQ2xhc3NWYWx1ZSA6IHBzZXVkb0NsYXNzQXJyYXkp
IHsKLSAgICAgICAgU3RyaW5nIHBzZXVkb0NsYXNzOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBw
c2V1ZG9DbGFzc1ZhbHVlLT5hc1N0cmluZyhwc2V1ZG9DbGFzcyk7Ci0gICAgICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIHBzZXVkb0NsYXNzID0g
cHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgaWYgKHBzZXVkb0NsYXNzID09
IGFjdGl2ZSkKICAgICAgICAgICAgIHJlc3VsdCB8PSBQc2V1ZG9DbGFzc0FjdGl2ZTsKICAgICAg
ICAgZWxzZSBpZiAocHNldWRvQ2xhc3MgPT0gaG92ZXIpCkBAIC0zMTIsOCArMzA5LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLAogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
U3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7CisgICAgZGlzYWJsZSgpOwogfQog
CiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCkBAIC0zMjcsMTAgKzMyMywxMCBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCiAgICAgcmVzZXRQc2V1ZG9TdGF0ZXMoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNTU0FnZW50OjplbmFibGUoKQogewog
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENTU0FnZW50KCkgPT0gdGhpcykK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRDU1NBZ2VudCh0aGlzKTsKIApAQCAtMzM4LDEzICszMzQsMTcg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAg
Zm9yIChhdXRvKiBkb2N1bWVudCA6IGRvbUFnZW50LT5kb2N1bWVudHMoKSkKICAgICAgICAgICAg
IGFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZCgqZG9jdW1lbnQpOwogICAgIH0KKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpc2Fi
bGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQobnVs
bHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCYgZG9jdW1lbnQpCkBAIC0z
ODcsNyArMzg3LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0QWN0aXZlU3R5bGVTaGVl
dHNGb3JEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3QKICAgICAgICAgcHJldmlvdXNs
eUtub3duQWN0aXZlU3R5bGVTaGVldHMucmVtb3ZlKGNzc1N0eWxlU2hlZXQpOwogICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gaW5zcGVjdG9yU3R5bGVTaGVldCA9IG1fY3NzU3R5
bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoY3NzU3R5bGVTaGVldCk7CiAgICAgICAg
IGlmIChtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmNvbnRhaW5zKGluc3BlY3RvclN0eWxlU2hl
ZXQtPmlkKCkpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGlu
c3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBpZCA9IHVuYmluZFN0
eWxlU2hlZXQoaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSk7CiAgICAgICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldFJlbW92ZWQoaWQpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzk2LDcgKzM5Niw4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldEFjdGl2ZVN0eWxl
U2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0CiAgICAgICAgIHByZXZp
b3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLmFkZChjc3NTdHlsZVNoZWV0KTsKICAgICAgICAg
aWYgKCFtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuY29udGFpbnMoY3NzU3R5
bGVTaGVldCkpIHsKICAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChjc3NTdHlsZVNoZWV0KTsKLSAgICAgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5zdHlsZVNoZWV0QWRkZWQoaW5zcGVjdG9yU3R5bGVTaGVldC0+
YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGhl
YWRlciA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8o
KSkKKyAgICAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVk
KGhlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQxMCw3
ICs0MTEsNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQcwogICAgIGlmICghZG9tQWdlbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmRO
b2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8gbm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlk
KCZlbGVtZW50KTsKICAgICBpZiAoIW5vZGVJZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC00MjksMzcgKzQzMCwzNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0
YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQcwogICAgIH0KIH0KIAot
c3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3Rv
Y29sVmFsdWVGb3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKK3N0YXRpYyBPcHRpb25hbDxQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZXVkb0lk
IHBzZXVkb0lkKQogewogICAgIHN3aXRjaCAocHNldWRvSWQpIHsKICAgICBjYXNlIFBzZXVkb0lk
OjpGaXJzdExpbmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkOjpGaXJzdExpbmU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6Rmlyc3RMaW5lOwogICAgIGNhc2UgUHNldWRvSWQ6OkZpcnN0TGV0dGVyOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXI7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6TWFya2VyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpQc2V1ZG9JZDo6TWFya2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6
UHNldWRvSWQ6Ok1hcmtlcjsKICAgICBjYXNlIFBzZXVkb0lkOjpCZWZvcmU6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpCZWZvcmU7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6QmVmb3JlOwogICAgIGNhc2UgUHNldWRv
SWQ6OkFmdGVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1
ZG9JZDo6QWZ0ZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6QWZ0
ZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2VsZWN0aW9uOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2VsZWN0aW9uOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlvbjsKICAgICBjYXNlIFBzZXVkb0lkOjpI
aWdobGlnaHQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVk
b0lkOjpIaWdobGlnaHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
SGlnaGxpZ2h0OwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhcjsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXI7CiAgICAgY2FzZSBQc2V1
ZG9JZDo6U2Nyb2xsYmFyVGh1bWI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUaHVtYjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUaHVtYjsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3Jv
bGxiYXJCdXR0b246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkOjpTY3JvbGxiYXJCdXR0b247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRy
YWNrOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
U2Nyb2xsYmFyVHJhY2s7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
U2Nyb2xsYmFyVHJhY2s7CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2tQaWVjZToK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9s
bGJhclRyYWNrUGllY2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
U2Nyb2xsYmFyVHJhY2tQaWVjZTsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXI6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3Jv
bGxiYXJDb3JuZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Ny
b2xsYmFyQ29ybmVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlJlc2l6ZXI6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVyOworICAgICAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlJlc2l6ZXI7CiAKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQ2NywzNiArNDY4LDM3IEBAIHN0YXRp
YyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkPiBwcm90b2NvbFZh
bHVlRm9yUHNldWRvSWQoUHNlCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0
ZWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1h
dGNoPj4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiYgcHNldWRvSWRNYXRjaGVzLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50
cnk+PiYgaW5oZXJpdGVkRW50cmllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4sIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIG5vZGVJZCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29s
PiYmIGluY2x1ZGVJbmhlcml0ZWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEVsZW1lbnQqIG9yaWdp
bmFsRWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgUHNldWRvSWQgZWxlbWVudFBzZXVkb0lkID0gZWxl
bWVudC0+cHNldWRvSWQoKTsKICAgICBpZiAoZWxlbWVudFBzZXVkb0lkICE9IFBzZXVkb0lkOjpO
b25lKSB7CiAgICAgICAgIGVsZW1lbnQgPSBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqZWxlbWVu
dCkuaG9zdEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJNaXNzaW5nIHBhcmVudCBvZiBwc2V1ZG8tZWxlbWVudCBub2RlIGZvciBn
aXZlbiBub2RlSWQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKCFlbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IHBhcmVudCBvZiBwc2V1ZG8tZWxlbWVudCBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogICAg
IH0KIAogICAgIC8vIE1hdGNoZWQgcnVsZXMuCiAgICAgYXV0byYgc3R5bGVSZXNvbHZlciA9IGVs
ZW1lbnQtPnN0eWxlUmVzb2x2ZXIoKTsKICAgICBhdXRvIG1hdGNoZWRSdWxlcyA9IHN0eWxlUmVz
b2x2ZXIucHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgZWxlbWVudFBzZXVkb0lk
LCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICBtYXRjaGVkQ1NTUnVsZXMgPSBi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIGVsZW1lbnRQc2V1ZG9JZCk7CisgICAgYXV0byBtYXRjaGVkQ1NTUnVsZXMgPSBi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIGVsZW1lbnRQc2V1ZG9JZCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4gcHNldWRvRWxlbWVudHM7CisgICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+IGluaGVy
aXRlZDsKIAogICAgIGlmICghb3JpZ2luYWxFbGVtZW50LT5pc1BzZXVkb0VsZW1lbnQoKSkgewot
ICAgICAgICAvLyBQc2V1ZG8gZWxlbWVudHMuCiAgICAgICAgIGlmICghaW5jbHVkZVBzZXVkbyB8
fCAqaW5jbHVkZVBzZXVkbykgewotICAgICAgICAgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAo
UHNldWRvSWQgcHNldWRvSWQgPSBQc2V1ZG9JZDo6Rmlyc3RQdWJsaWNQc2V1ZG9JZDsgcHNldWRv
SWQgPCBQc2V1ZG9JZDo6QWZ0ZXJMYXN0SW50ZXJuYWxQc2V1ZG9JZDsgcHNldWRvSWQgPSBzdGF0
aWNfY2FzdDxQc2V1ZG9JZD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBzZXVkb0lkKSArIDEpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcHJvdG9jb2xQc2V1ZG9JZCA9IHByb3RvY29sVmFs
dWVGb3JQc2V1ZG9JZChwc2V1ZG9JZCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIHBzZXVkb0lkLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIG1hdGNoZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lk
TWF0Y2hlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWF0Y2hlcyA9
IFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlczo6Y3JlYXRlKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuc2V0UHNldWRvSWQocHJvdG9jb2xQc2V1ZG9JZC52YWx1ZSgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVk
UnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwgcHNldWRvSWQp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC01MDQsNjYgKzUw
Niw2NiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBubwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwc2V1ZG9JZE1h
dGNoZXMgPSBXVEZNb3ZlKHBzZXVkb0VsZW1lbnRzKTsKICAgICAgICAgfQogCi0gICAgICAgIC8v
IEluaGVyaXRlZCBzdHlsZXMuCiAgICAgICAgIGlmICghaW5jbHVkZUluaGVyaXRlZCB8fCAqaW5j
bHVkZUluaGVyaXRlZCkgewotICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gSlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUo
KTsKKyAgICAgICAgICAgIGluaGVyaXRlZCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
SW5oZXJpdGVkU3R5bGVFbnRyeT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBh
bmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAg
ICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZVJlc29sdmVyID0gYW5jZXN0b3Iuc3R5bGVSZXNvbHZl
cigpOwogICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U3R5
bGVSZXNvbHZlci5zdHlsZVJ1bGVzRm9yRWxlbWVudCgmYW5jZXN0b3IsIFN0eWxlOjpSZXNvbHZl
cjo6QWxsQ1NTUnVsZXMpOwotICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCisgICAgICAgICAg
ICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk6OmNy
ZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoYnVpbGRBcnJh
eUZvck1hdGNoZWRSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGFu
Y2VzdG9yLCBQc2V1ZG9JZDo6Tm9uZSkpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzPFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSAmJiBkb3du
Y2FzdDxTdHlsZWRFbGVtZW50PihhbmNlc3RvcikuY3Nzb21TdHlsZSgpLmxlbmd0aCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hl
ZXQoZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpKTsKICAgICAgICAgICAgICAgICAg
ICAgZW50cnktPnNldElubGluZVN0eWxlKHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHlsZShz
dHlsZVNoZWV0LnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC5pZCgpLCAwKSkp
KTsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbnRyaWVzLT5hZGRJdGVt
KFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgICAgICAgICBpbmhlcml0ZWQtPmFkZEl0ZW0oV1RG
TW92ZShlbnRyeSkpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmhlcml0ZWRFbnRy
aWVzID0gV1RGTW92ZShlbnRyaWVzKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IHsgV1RGTW92ZShtYXRjaGVkQ1NTUnVsZXMpLCBXVEZNb3ZlKHBzZXVkb0VsZW1lbnRzKSwgV1RG
TW92ZShpbmhlcml0ZWQpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5s
aW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5bGUsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgYXR0cmlidXRlc1N0eWxl
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IC8qIGlubGluZVN0eWxlICovLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IC8qIGF0dHJpYnV0ZXNTdHlsZSAqLz4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxp
bmVTdHlsZXNGb3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogZWxlbWVudCA9IGVs
ZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWlzPFN0eWxlZEVsZW1l
bnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBzdHlsZWRFbGVtZW50ID0gZG93bmNhc3Q8
U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpOwogICAgIGF1dG8mIHN0eWxlU2hlZXQgPSBhc0luc3Bl
Y3RvclN0eWxlU2hlZXQoc3R5bGVkRWxlbWVudCk7Ci0gICAgaW5saW5lU3R5bGUgPSBzdHlsZVNo
ZWV0LmJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnN0eWxlZEVsZW1lbnQuY3Nzb21TdHlsZSgpKTsKLSAg
ICBpZiAoYXV0byBhdHRyaWJ1dGVzID0gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoc3R5
bGVkRWxlbWVudCkpCi0gICAgICAgIGF0dHJpYnV0ZXNTdHlsZSA9IFdURk1vdmUoYXR0cmlidXRl
cyk7Ci0gICAgZWxzZQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUgPSBudWxscHRyOworICAgIHJl
dHVybiB7IHsgc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50LmNz
c29tU3R5bGUoKSksIGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+
JiBzdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+PiBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBlbGVt
ZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOwogCiAgICAgYXV0byBjb21wdXRlZFN0eWxlSW5mbyA9IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Y3JlYXRlKCplbGVtZW50LCB0cnVlKTsKICAgICBhdXRvIGluc3BlY3RvclN0
eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBXVEZNb3ZlKGNv
bXB1dGVkU3R5bGVJbmZvKSwgbnVsbHB0cik7Ci0gICAgc3R5bGUgPSBpbnNwZWN0b3JTdHlsZS0+
YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGUt
PmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPj4mIHN0eWxlSW5m
b3MpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHls
ZVNoZWV0cygpCiB7Ci0gICAgc3R5bGVJbmZvcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPjo6Y3JlYXRlKCk7CisgICAgYXV0byBo
ZWFkZXJzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pjo6Y3JlYXRlKCk7CiAKICAgICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+IGluc3BlY3Rv
clN0eWxlU2hlZXRzOwogICAgIGNvbGxlY3RBbGxTdHlsZVNoZWV0cyhpbnNwZWN0b3JTdHlsZVNo
ZWV0cyk7Ci0gICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5
bGVTaGVldHMpCi0gICAgICAgIHN0eWxlSW5mb3MtPmFkZEl0ZW0oaW5zcGVjdG9yU3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKTsKKyAgICBmb3IgKGF1dG8qIGluc3Bl
Y3RvclN0eWxlU2hlZXQgOiBpbnNwZWN0b3JTdHlsZVNoZWV0cykgeworICAgICAgICBpZiAoYXV0
byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXRJ
bmZvKCkpCisgICAgICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGhlYWRlci5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShoZWFkZXJzKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdEFsbFN0eWxlU2hlZXRzKFZlY3RvcjxJbnNwZWN0b3JT
dHlsZVNoZWV0Kj4mIHJlc3VsdCkKQEAgLTU5OCwxMTYgKzYwMCwxMjQgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Y29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQs
IFZlY3RvcjxDU1MKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxl
U2hlZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiBz
dHlsZVNoZWV0T2JqZWN0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpD
U1M6OkNTU1N0eWxlU2hlZXRCb2R5Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQo
Y29uc3QgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJiBzdHlsZVNoZWV0SWQpCiB7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgSW5zcGVjdG9yU3R5bGVT
aGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0
cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAotICAgIHN0eWxlU2hlZXRPYmplY3QgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXQoKTsKKyAgICBhdXRvIHN0eWxlU2hlZXQgPSBpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3Npbmcgc3R5
bGUgc2hlZXQiKTsKKworICAgIHJldHVybiBzdHlsZVNoZWV0LnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3R5bGVTaGVldFRleHQoY29uc3QgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJiBzdHlsZVNo
ZWV0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0
eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gdGV4dCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnRl
eHQoKTsKLSAgICBpZiAoIXRleHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICpyZXN1bHQgPSB0
ZXh0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIGlmICh0ZXh0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JT
dHJpbmcodGV4dC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB0ZXh0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBjb25zdCBTdHJpbmcmIHRleHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoY29uc3QgUHJvdG9jb2w6OkNTUzo6
U3R5bGVTaGVldElkJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3Ry
aW5nLCBzdHlsZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERP
TUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZG9tQWdlbnQtPmhp
c3RvcnkoKS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlU2hlZXRUZXh0QWN0aW9uPihpbnNw
ZWN0b3JTdHlsZVNoZWV0LCB0ZXh0KSk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhy
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFN0eWxlVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYg
ZnVsbFN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+PiBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0
KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAg
IEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQo
c3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZv
cklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKICAgICBpZiAoIWlu
c3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBh
dXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKG1ha2VVbmlx
dWU8U2V0U3R5bGVUZXh0QWN0aW9uPihpbnNwZWN0b3JTdHlsZVNoZWV0LCBjb21wb3VuZElkLCB0
ZXh0KSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5k
SWQpKTsKKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHls
ZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgcnVsZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5k
SWQoZnVsbFJ1bGVJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChydWxlSWQpOwogICAgIEFTU0VSVCghY29t
cG91bmRJZC5pc0VtcHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9y
U3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJ
ZC5zdHlsZVNoZWV0SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9N
QWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRP
TSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFp
biBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdl
bnQtPmhpc3RvcnkoKS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFJ1bGVTZWxlY3RvckFjdGlvbj4o
aW5zcGVjdG9yU3R5bGVTaGVldCwgY29tcG91bmRJZCwgc2VsZWN0b3IpKTsKLSAgICBpZiAocGVy
Zm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IEluc3Bl
Y3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocGVyZm9ybVJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFn
ZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAK
LSAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5z
cGVjdG9yU3R5bGVTaGVldC0+cnVsZUZvcklkKGNvbXBvdW5kSWQpKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKGNvbXBvdW5kSWQpKTsKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3Npbmcgc3R5bGUgc2hlZXQi
KTsKKworICAgIHJldHVybiBydWxlLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y3JlYXRlU3R5bGVTaGVldChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJh
bWVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBh
dXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgp
OwotICAgIGlmICghcGFnZUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBhZ2UgZG9t
YWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXBhZ2VBZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdlIGRvbWFpbiBt
dXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2Vy
dEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3Vt
ZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZG9jdW1lbnQgb2YgZnJhbWUg
Zm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFk
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGRvY3VtZW50
IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAogICAgIEluc3BlY3RvclN0eWxlU2hl
ZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBjcmVhdGVJbnNwZWN0b3JTdHlsZVNoZWV0Rm9yRG9j
dW1lbnQoKmRvY3VtZW50KTsKLSAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGNyZWF0ZSBzdHlsZSBzaGVldCBmb3IgZG9jdW1l
bnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUgc3R5bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1l
IGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAotICAgICpzdHlsZVNoZWV0SWQgPSBpbnNwZWN0b3JT
dHlsZVNoZWV0LT5pZCgpOworICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpOwog
fQogCiBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTc1MSw0MSAr
NzYxLDQyIEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9yRG9jdW1lbnQoRG9jCiAgICAgcmV0dXJuIGluc3BlY3RvclN0
eWxlU2hlZXRzRm9yRG9jdW1lbnQubGFzdCgpLmdldCgpOwogfQogCi12b2lkIEluc3BlY3RvckNT
U0FnZW50OjphZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRT
dHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNw
ZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgYXV0
byBhY3Rpb24gPSBtYWtlVW5pcXVlPEFkZFJ1bGVBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQs
IHNlbGVjdG9yKTsKICAgICBhdXRvJiByYXdBY3Rpb24gPSAqYWN0aW9uOwogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oV1RGTW92ZShhY3Rpb24p
KTsKLSAgICBpZiAocGVyZm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocGVy
Zm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpKSk7CiAKLSAgICBJbnNwZWN0b3JDU1NJZCBydWxlSWQgPSByYXdBY3Rpb24ubmV3
UnVsZUlkKCk7Ci0gICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+
cnVsZUZvcklkKHJ1bGVJZCk7Ci0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKHJ1bGUpOworICAgIGF1dG8gcnVsZSA9IGluc3BlY3RvclN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQocmF3
QWN0aW9uLm5ld1J1bGVJZCgpKSk7CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAg
ICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgY3Nz
UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+PiBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcygpCiB7Ci0gICAgYXV0byBwcm9wZXJ0aWVzID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgp
OworICAgIGF1dG8gY3NzUHJvcGVydGllcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHlJbmZvPjo6Y3JlYXRlKCk7CisKICAgICBmb3IgKGludCBpID0gZmlyc3RDU1NQ
cm9wZXJ0eTsgaSA8PSBsYXN0Q1NTUHJvcGVydHk7ICsraSkgewogICAgICAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQgPSBjb252ZXJ0VG9DU1NQcm9wZXJ0eUlEKGkpOwogICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHRha2UgYWNjb3VudCBmb3IgZmxhZ3MgaW4gc2V0dGluZ3MoKS4KICAgICAg
ICAgaWYgKGlzSW50ZXJuYWxDU1NQcm9wZXJ0eShwcm9wZXJ0eUlEKSB8fCAhaXNFbmFibGVkQ1NT
UHJvcGVydHkocHJvcGVydHlJRCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBh
dXRvIHByb3BlcnR5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm86
OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm86OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShnZXRQcm9wZXJ0eU5hbWVT
dHJpbmcocHJvcGVydHlJRCkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogCkBAIC04MjEsNjMg
KzgzMiw2NiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycgogICAgICAgICBpZiAoQ1NTUHJvcGVy
dHk6OmlzSW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHlJRCkpCiAgICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0SW5oZXJpdGVkKHRydWUpOwogCi0gICAgICAgIHByb3BlcnRpZXMtPmFkZEl0ZW0oV1RG
TW92ZShwcm9wZXJ0eSkpOworICAgICAgICBjc3NQcm9wZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUo
cHJvcGVydHkpKTsKICAgICB9Ci0gICAgY3NzUHJvcGVydGllcyA9IFdURk1vdmUocHJvcGVydGll
cyk7CisKKyAgICByZXR1cm4gV1RGTW92ZShjc3NQcm9wZXJ0aWVzKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGZvbnRGYW1pbHlOYW1lcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzKCkKIHsKLSAgICBh
dXRvIGZhbWlsaWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IGZvbnRGYW1pbHlOYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICAg
ICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMgPSBGb250Q2FjaGU6OnNpbmdsZXRv
bigpLnN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIGZvciAoY29uc3QgYXV0byYgZmFtaWx5TmFt
ZSA6IHN5c3RlbUZvbnRGYW1pbGllcykKLSAgICAgICAgZmFtaWxpZXMtPmFkZEl0ZW0oZmFtaWx5
TmFtZSk7CisgICAgICAgIGZvbnRGYW1pbHlOYW1lcy0+YWRkSXRlbShmYW1pbHlOYW1lKTsKIAot
ICAgIGZvbnRGYW1pbHlOYW1lcyA9IFdURk1vdmUoZmFtaWxpZXMpOworICAgIHJldHVybiBXVEZN
b3ZlKGZvbnRGYW1pbHlOYW1lcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNl
UHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBK
U09OOjpBcnJheSYgZm9yY2VkUHNldWRvQ2xhc3NlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQsIFJlZjxKU09OOjpBcnJheT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRv
bUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAg
IGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0
IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2Vu
dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfcyk7CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9tQWdlbnQtPmFzc2VydEVsZW1l
bnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAv
LyBSZXR1cm4gZWFybHkgaWYgdGhlIGZvcmNlZCBwc2V1ZG8gc3RhdGUgd2FzIGFscmVhZHkgc2V0
IGNvcnJlY3RseS4KICAgICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1
ZG9DbGFzc01hc2soZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAgICAgaWYgKGZvcmNlZFBzZXVkb1N0
YXRlKSB7CiAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3Rh
dGUuYWRkKG5vZGVJZCwgMCkuaXRlcmF0b3I7CiAgICAgICAgIGlmIChmb3JjZWRQc2V1ZG9TdGF0
ZSA9PSBpdGVyYXRvci0+dmFsdWUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4geyB9OwogICAgICAgICBpdGVyYXRvci0+dmFsdWUgPSBmb3JjZWRQc2V1ZG9TdGF0ZTsK
ICAgICAgICAgbV9kb2N1bWVudHNXaXRoRm9yY2VkUHNldWRvU3RhdGVzLmFkZCgmZWxlbWVudC0+
ZG9jdW1lbnQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX25vZGVJZFRvRm9yY2Vk
UHNldWRvU3RhdGUucmVtb3ZlKG5vZGVJZCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICBpZiAobV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRl
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0YXRl
cy5jbGVhcigpOwogICAgIH0KIAogICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuc3R5bGVTY29wZSgp
LmRpZENoYW5nZVN0eWxlU2hlZXRFbnZpcm9ubWVudCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlJiBJbnNwZWN0b3JDU1NBZ2VudDo6
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0
dXJuIG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbnN1cmUoJmVsZW1lbnQsIFt0aGlzLCAm
ZWxlbWVudF0gewogICAgICAgICBTdHJpbmcgbmV3U3R5bGVTaGVldElkID0gU3RyaW5nOjpudW1i
ZXIobV9sYXN0U3R5bGVTaGVldElkKyspOwotICAgICAgICBhdXRvIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpLCBuZXdTdHlsZVNoZWV0SWQsIGVsZW1lbnQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlz
KTsKKyAgICAgICAgYXV0byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVl
dEZvcklubGluZVN0eWxlOjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdl
QWdlbnQoKSwgbmV3U3R5bGVTaGVldElkLCBlbGVtZW50LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpBdXRob3IsIHRoaXMpOwogICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LnNldChuZXdTdHlsZVNoZWV0SWQsIGluc3BlY3RvclN0eWxlU2hlZXQuY29weVJlZigpKTsK
ICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgfSkuaXRlcmF0b3ItPnZh
bHVlOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0VsZW1lbnQqIEluc3BlY3RvckNTU0Fn
ZW50OjplbGVtZW50Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICBpZiAoIWRvbUFnZW50
KSB7CkBAIC05MTQsNyArOTI4LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQKICAgICByZXR1
cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldCog
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKQorSW5zcGVjdG9yU3R5bGVTaGVl
dCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkKIHsKICAg
ICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbnNwZWN0b3JT
dHlsZVNoZWV0LmZpbmQoc3R5bGVTaGVldElkKTsKICAgICBpZiAoaXQgPT0gbV9pZFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5lbmQoKSkgewpAQCAtOTI0LDI5ICs5MzgsMjkgQEAgSW5zcGVjdG9yU3R5
bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0
cmluZyYgZXJyb3IKICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCi1JbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVj
dE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9j
dW1lbnQpCitQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3RvckNTU0FnZW50
OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBv
d25lckRvY3VtZW50KQogewogICAgIGlmIChtX2NyZWF0aW5nVmlhSW5zcGVjdG9yU3R5bGVTaGVl
dCkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbjo6SW5zcGVjdG9yOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbjo6SW5zcGVjdG9yOwogCiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5
bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46OlVzZXJBZ2VudDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OlVzZXJBZ2VudDsKIAogICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiBwYWdlU3R5bGVT
aGVldC0+Y29udGVudHMoKS5pc1VzZXJTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyOwogCiAgICAgYXV0byBp
dGVyYXRvciA9IG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChvd25lckRvY3Vt
ZW50KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVl
dC5lbmQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGluc3BlY3RvclN0eWxlU2hlZXQgOiBpdGVy
YXRvci0+dmFsdWUpIHsKICAgICAgICAgICAgIGlmIChwYWdlU3R5bGVTaGVldCA9PSBpbnNwZWN0
b3JTdHlsZVNoZWV0LT5wYWdlU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5z
cGVjdG9yOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOworICAgIHJldHVybiBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3I7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1
bGUoY29uc3QgU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0eWxlOjpSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5
bGVSdWxlLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFzdHlsZVJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTY4
LDcgKzk4Miw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IElu
c3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoCiAgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlU2hlZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoY3Nz
b21XcmFwcGVyKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlKQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNT
U0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAgIGlm
ICghcnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05NzgsMTYgKzk5MiwxNiBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKAogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUpIDogbnVsbHB0cjsK
IH0KIAotUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChj
b25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZXMsIFN0eWxl
OjpSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCYgZWxlbWVudCwgUHNldWRvSWQgcHNl
dWRvSWQpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8
UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZXMsIFN0eWxlOjpSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgRWxlbWVudCYgZWxlbWVudCwgUHNldWRvSWQgcHNldWRvSWQpCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UnVsZU1hdGNoPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOwogCiAgICAgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHQgY29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OkNvbGxlY3Rp
bmdSdWxlcyk7CiAgICAgY29udGV4dC5wc2V1ZG9JZCA9IHBzZXVkb0lkICE9IFBzZXVkb0lkOjpO
b25lID8gcHNldWRvSWQgOiBlbGVtZW50LnBzZXVkb0lkKCk7CiAgICAgU2VsZWN0b3JDaGVja2Vy
IHNlbGVjdG9yQ2hlY2tlcihlbGVtZW50LmRvY3VtZW50KCkpOwogCiAgICAgZm9yIChhdXRvJiBt
YXRjaGVkUnVsZSA6IG1hdGNoZWRSdWxlcykgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG1h
dGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVtZW50KTsKKyAgICAgICAgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IHJ1bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUo
bWF0Y2hlZFJ1bGUuZ2V0KCksIHN0eWxlUmVzb2x2ZXIsIGVsZW1lbnQpOwogICAgICAgICBpZiAo
IXJ1bGVPYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTAwMSw4ICsxMDE1LDgg
QEAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0
Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnUKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAg
IH0KIAotICAgICAgICBhdXRvIG1hdGNoID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0UnVsZShXVEZNb3ZlKHJ1bGVPYmplY3Qp
KQorICAgICAgICBhdXRvIG1hdGNoID0gUHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUo
KQorICAgICAgICAgICAgLnNldFJ1bGUocnVsZU9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKQogICAg
ICAgICAgICAgLnNldE1hdGNoaW5nU2VsZWN0b3JzKFdURk1vdmUobWF0Y2hpbmdTZWxlY3RvcnMp
KQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFdURk1v
dmUobWF0Y2gpKTsKQEAgLTEwMTEsNyArMTAyNSw3IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShTdHlsZWRFbGVtZW50JiBlbGVtZW50KQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0
eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5
bGVkRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBGSVhNRTogVWdsaW5lc3MgYmVsb3cuCiAg
ICAgYXV0byogYXR0cmlidXRlU3R5bGUgPSBjb25zdF9jYXN0PFN0eWxlUHJvcGVydGllcyo+KGVs
ZW1lbnQucHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CkBAIC0xMDIzLDcgKzEwMzcsNyBA
QCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cgogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVp
bGRPYmplY3RGb3JTdHlsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1v
dmVET01Ob2RlKE5vZGUmIG5vZGUsIGludCBub2RlSWQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUmIG5vZGUsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2Rl
SWQpCiB7CiAgICAgbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0Fn
ZW50LmgKaW5kZXggZmExZDY3MWRkODMzYjAwM2E2MWRjMjc5NjU5NjY5MjE2MWFhZGY3Zi4uZDJm
Y2E3OTVkYzY4MGY5OGRlODZjYmNjMWQ2ZTkwYzhjYTdjNzBiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtNjEsNyAr
NjEsNyBAQCBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UgLCBwdWJsaWMgSW5zcGVjdG9yOjpDUwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNTU0FnZW50KFdlYkFnZW50Q29udGV4dCYpOwot
ICAgIH5JbnNwZWN0b3JDU1NBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JDU1NBZ2Vu
dCgpOwogCiAgICAgY2xhc3MgSW5saW5lU3R5bGVPdmVycmlkZVNjb3BlIHsKICAgICBwdWJsaWM6
CkBAIC04MywyOSArODMsMjkgQEAgcHVibGljOgogICAgIHN0YXRpYyBDU1NTdHlsZVJ1bGUqIGFz
Q1NTU3R5bGVSdWxlKENTU1J1bGUmKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAg
IHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0
ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24p
IG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAg
dm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RS
ZWFzb24pOwogCiAgICAgLy8gQ1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5bGUsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgYXR0cmlidXRlcykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0
ZWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1h
dGNoPj4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiYsIFJlZlB0cjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+JiBpbmhlcml0ZWRF
bnRyaWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZVNoZWV0SGVhZGVyPj4mIHN0eWxlU2hlZXRJbmZvcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRT
dHlsZVNoZWV0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVRleHQo
RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZv
aWQgY3JlYXRlU3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
U3RyaW5nKiBzdHlsZVNoZWV0SWQpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkUnVsZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
SW5mbz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U3VwcG9ydGVkU3lzdGVtRm9u
dEZhbWlseU5hbWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4m
IHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5n
JiwgaW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpIG92
ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5h
YmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNh
YmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eT4+PiBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxl
PFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHls
ZSAqLywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IC8qIGF0dHJp
YnV0ZXNTdHlsZSAqLz4+IGdldElubGluZVN0eWxlc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkTWF0Y2hlcz4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+Pj4+IGdldE1hdGNoZWRTdHlsZXNGb3JO
b2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBPcHRpb25hbDxib29sPiYmIGlu
Y2x1ZGVQc2V1ZG8sIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUluaGVyaXRlZCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+Pj4gZ2V0QWxsU3R5bGVTaGVl
dHMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5Pj4gZ2V0U3R5bGVTaGVldChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBnZXRTdHlsZVNoZWV0VGV4dChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U3R5bGVTaGVldFRleHQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHRl
eHQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+PiBzZXRTdHlsZVRleHQoUmVmPEpTT046Ok9iamVj
dD4mJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+
IHNldFJ1bGVTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5n
JiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZD4gY3JlYXRlU3R5bGVTaGVldChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPj4gYWRkUnVsZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRJZCYsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eUluZm8+Pj4gZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4+IGdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcygpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZm9yY2VQc2V1ZG9TdGF0ZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCwgUmVmPEpTT046OkFycmF5PiYmIGZvcmNlZFBzZXVkb0Ns
YXNzZXMpOwogCiAgICAgLy8gSW5zcGVjdG9yU3R5bGVTaGVldDo6TGlzdGVuZXIKLSAgICB2b2lk
IHN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqKSBvdmVycmlkZTsKKyAgICB2
b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqKTsKIAogICAgIC8vIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZG9jdW1lbnREZXRhY2hlZChEb2N1bWVu
dCYpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGZvcmNlUHNldWRvU3Rh
dGUoY29uc3QgRWxlbWVudCYsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUpOwogCiAgICAg
Ly8gSW5zcGVjdG9yRE9NQWdlbnQgaG9va3MKLSAgICB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9k
ZSYsIGludCBub2RlSWQpOworICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOwogICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihF
bGVtZW50Jik7CiAKICAgICB2b2lkIHJlc2V0KCk7CkBAIC0xMjYsMjggKzEyNiwyOCBAQCBwcml2
YXRlOgogICAgIGNsYXNzIFNldFJ1bGVTZWxlY3RvckFjdGlvbjsKICAgICBjbGFzcyBBZGRSdWxl
QWN0aW9uOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0
eWxlU2hlZXQ+PiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PENTU1N0eWxlU2hlZXQqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IENTU1N0eWxlU2hl
ZXRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1
bWVudD4sIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+PiBEb2N1bWVudFRvVmlh
SW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gInZpYSBpbnNwZWN0b3IiIHN0eWxlc2hlZXRzCi0gICAg
dHlwZWRlZiBIYXNoTWFwPGludCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7
CisgICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCB1
bnNpZ25lZD4gTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTsKIAogICAgIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZSYgYXNJbnNwZWN0b3JTdHlsZVNoZWV0KFN0eWxlZEVsZW1lbnQm
KTsKLSAgICBFbGVtZW50KiBlbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsK
KyAgICBFbGVtZW50KiBlbGVtZW50Rm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKICAgICB2b2lkIGNvbGxl
Y3RBbGxTdHlsZVNoZWV0cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+Jik7CiAgICAgdm9p
ZCBjb2xsZWN0QWxsRG9jdW1lbnRTdHlsZVNoZWV0cyhEb2N1bWVudCYsIFZlY3RvcjxDU1NTdHls
ZVNoZWV0Kj4mKTsKICAgICB2b2lkIGNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNoZWV0Kiwg
VmVjdG9yPENTU1N0eWxlU2hlZXQqPiYpOwogICAgIHZvaWQgc2V0QWN0aXZlU3R5bGVTaGVldHNG
b3JEb2N1bWVudChEb2N1bWVudCYsIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mIGFjdGl2ZVN0eWxl
U2hlZXRzKTsKIAotICAgIFN0cmluZyB1bmJpbmRTdHlsZVNoZWV0KEluc3BlY3RvclN0eWxlU2hl
ZXQqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCB1bmJpbmRT
dHlsZVNoZWV0KEluc3BlY3RvclN0eWxlU2hlZXQqKTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogYXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Cisg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogYXNzZXJ0U3R5bGVTaGVldEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQmKTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBjcmVhdGVJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9yRG9jdW1lbnQoRG9jdW1lbnQmKTsKICAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VT
dHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CiAKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoY29uc3QgU3R5
bGVSdWxlKiwgU3R5bGU6OlJlc29sdmVyJiwgRWxlbWVudCYpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1
bGUqKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+IGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJl
ZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYsIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmLCBQc2V1
ZG9JZCk7CisgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
dWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2ZXImLCBFbGVtZW50JiwgUHNldWRv
SWQpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWls
ZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShTdHlsZWRFbGVtZW50Jik7CiAKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmNwcAppbmRleCBkMDkxNjgyOTQwMGY5NDZmMDg2MDA5NThhYTQ0M2U1NzA3M2ZlOGFhLi5hODUw
MzhmNWMwNjc3ZTdkOTI4MTk0ZGI3ZDA0MDlhOTQ4YmM5NmI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcApA
QCAtMTAyLDggKzEwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyCiAKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2Fi
bGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpkaXNjYXJkQWdlbnQoKQpAQCAtMTExLDEwICsxMTAsMTAgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKICAgICByZXNldCgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQ2FudmFzQWdlbnQoKSA9PSB0aGlzKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuc2V0RW5hYmxlZENhbnZhc0FnZW50KHRoaXMpOwogCkBAIC0xNzAsNzMgKzE2OSw4NCBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICB9
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKCkK
IHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZENhbnZhc0FnZW50KG51bGxw
dHIpOwogCiAgICAgcmVzZXQoKTsKIAogICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNv
dW50ID0gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGNhbnZhc0lkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2Rl
KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvckNhbnZh
cyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQpOwogICAgIGlm
ICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBub2RlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5jYW52YXNFbGVtZW50KCk7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIk1pc3NpbmcgZWxlbWVudCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgZWxlbWVudCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zKTsK
IAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVj
dG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVn
YXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1
bWVudGVkCiAgICAgaW50IGRvY3VtZW50Tm9kZUlkID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBl
cnNpc3RlbnRET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgmbm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAg
aWYgKCFkb2N1bWVudE5vZGVJZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEb2N1bWVudCBt
dXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFkb2N1bWVudE5vZGVJZCkKKyAgICAgICAgbWFrZVVuZXhwZWN0ZWQoIkRvY3VtZW50IG11
c3QgaGF2ZSBiZWVuIHJlcXVlc3RlZCJfcyk7CiAKLSAgICAqbm9kZUlkID0gbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JT
dHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBub2RlKTsKKyAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJp
bmcsIGRvY3VtZW50Tm9kZUlkLCBub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6cmVxdWVzdENvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGNhbnZhc0lkLCBTdHJpbmcqIGNvbnRlbnQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChjb25zdCBQcm90b2NvbDo6
Q2FudmFzOjpDYW52YXNJZCYgY2FudmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0
b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZh
cykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOwogCi0gICAgKmNvbnRlbnQgPSBpbnNwZWN0b3JDYW52YXMtPmdldENhbnZhc0NvbnRl
bnRBc0RhdGFVUkwoZXJyb3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RD
bGllbnROb2RlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFz
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+JiBjbGllbnROb2RlSWRzKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoY29uc3QgUHJvdG9jb2w6
OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIGluc3Bl
Y3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQp
OwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBjbGllbnROb2RlSWRzID0g
SlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNsaWVudE5vZGVJZHMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgIGZvciAo
YXV0byYgY2xpZW50Tm9kZSA6IGluc3BlY3RvckNhbnZhcy0+Y2xpZW50Tm9kZXMoKSkgewogICAg
ICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2ViIEluc3BlY3Rv
cjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRlZCBhdCBhbnkgcG9pbnQsIHJlZ2Fy
ZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxzbyBiZWVuIGluc3RydW1l
bnRlZAogICAgICAgICBpZiAoYXV0byBkb2N1bWVudE5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5v
ZGVJZCgmY2xpZW50Tm9kZS0+ZG9jdW1lbnQoKSkpCiAgICAgICAgICAgICBjbGllbnROb2RlSWRz
LT5hZGRJdGVtKGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3Vt
ZW50Tm9kZUlkLCBjbGllbnROb2RlKSk7CiAgICAgfQorICAgIHJldHVybiBXVEZNb3ZlKGNsaWVu
dE5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ29udGV4
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0
IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNv
bHZlQ29udGV4dChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2FudmFzSWQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JD
YW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYXV0byogc3RhdGUgPSBpbnNwZWN0b3JDYW52YXMtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXhlY1N0YXRlKCk7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKHN0YXRlKTsKQEAgLTI0NiwxMjIg
KzI1NiwxMjkgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKIAogICAgIGlmICghdmFsdWUpIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIklu
dGVybmFsIGVycm9yOiB1bmtub3duIGNvbnRleHQgb2YgY2FudmFzIGZvciBnaXZlbiBjYW52YXNJ
ZCJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIklu
dGVybmFsIGVycm9yOiB1bmtub3duIGNvbnRleHQgb2YgY2FudmFzIGZvciBnaXZlbiBjYW52YXNJ
ZCJfcyk7CiAgICAgfQogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3Vw
ID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICBhdXRvIHJlc3VsdCA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5h
YmxlIHRvIGNhc3QgQ29udGV4dCIpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRSZWNvcmRpbmdBdXRvQ2Fw
dHVyZUZyYW1lQ291bnQoRXJyb3JTdHJpbmcmLCBpbnQgY291bnQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0UmVjb3JkaW5nQXV0b0NhcHR1
cmVGcmFtZUNvdW50KGludCBjb3VudCkKIHsKICAgICBpZiAoY291bnQgPiAwKQogICAgICAgICBt
X3JlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IGNvdW50OwogICAgIGVsc2UKICAgICAg
ICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBXVEY6Om51bGxvcHQ7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRp
bmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25z
dCBpbnQqIGZyYW1lQ291bnQsIGNvbnN0IGludCogbWVtb3J5TGltaXQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkLCBPcHRpb25hbDxpbnQ+JiYg
ZnJhbWVDb3VudCwgT3B0aW9uYWw8aW50PiYmIG1lbW9yeUxpbWl0KQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGNvbnRleHQtPmNhbGxUcmFjaW5nQWN0aXZlKCkpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQWxyZWFkeSByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5z
cGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmlj
ZQorICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qg
c3VwcG9ydGVkIl9zKTsKKworICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJf
cyk7CiAKICAgICBSZWNvcmRpbmdPcHRpb25zIHJlY29yZGluZ09wdGlvbnM7CiAgICAgaWYgKGZy
YW1lQ291bnQpCiAgICAgICAgIHJlY29yZGluZ09wdGlvbnMuZnJhbWVDb3VudCA9ICpmcmFtZUNv
dW50OwogICAgIGlmIChtZW1vcnlMaW1pdCkKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5tZW1v
cnlMaW1pdCA9ICptZW1vcnlMaW1pdDsKLSAgICBzdGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2Fu
dmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6RnJvbnRlbmQs
IFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0
b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6RnJvbnRlbmQsIFdURk1v
dmUocmVjb3JkaW5nT3B0aW9ucykpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6c3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgY2FudmFzSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6c3RvcFJlY29yZGluZyhjb25zdCBQcm90b2NvbDo6Q2FudmFz
OjpDYW52YXNJZCYgY2FudmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52
YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2
NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3Ig
V2ViR1BVRGV2aWNlCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXNDb250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNvbnRleHQt
PmNhbGxUcmFjaW5nQWN0aXZlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm90IHJlY29y
ZGluZyBjYW52YXMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gRklYTUU6IDxo
dHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9y
dCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOworCisgICAg
aWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zKTsKIAogICAgIGRpZEZpbmlzaFJlY29y
ZGluZ0NhbnZhc0ZyYW1lKCpjb250ZXh0LCB0cnVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
ICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi12b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZVN0cmluZywgU3Ry
aW5nKiBvdXRTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpyZXF1ZXN0U2hhZGVyU291cmNlKGNvbnN0IFByb3RvY29sOjpDYW52YXM6
OlByb2dyYW1JZCYgcHJvZ3JhbUlkLCBQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRl
clR5cGUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmlu
ZywgcHJvZ3JhbUlkKTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1
dG8gc2hhZGVyVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRl
clR5cGU+KHNoYWRlclR5cGVTdHJpbmcpOwotICAgIGlmICghc2hhZGVyVHlwZSkgewotICAgICAg
ICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gc2hhZGVyVHlwZTogIl9zLCBzaGFk
ZXJUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHNvdXJjZSA9
IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RTaGFkZXJTb3VyY2Uoc2hhZGVyVHlwZSk7CisgICAg
aWYgKCFzb3VyY2UpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzaGFk
ZXIgb2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGF1
dG8gc291cmNlID0gaW5zcGVjdG9yUHJvZ3JhbS0+cmVxdWVzdFNoYWRlclNvdXJjZShzaGFkZXJU
eXBlLnZhbHVlKCkpOwotICAgIGlmICghc291cmNlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dyYW1JZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICpvdXRTb3VyY2UgPSBzb3VyY2U7Cisg
ICAgcmV0dXJuIHNvdXJjZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dXBkYXRl
U2hhZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQs
IGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2UpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dXBkYXRl
U2hhZGVyKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYgcHJvZ3JhbUlkLCBQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNl
KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8g
aW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0oZXJyb3JTdHJpbmcsIHBy
b2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBhdXRvIHNo
YWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBl
PihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNoYWRlclR5cGUpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNoYWRlclR5cGU6ICJfcywgc2hhZGVyVHlw
ZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtLT51cGRhdGVTaGFkZXIoc2hhZGVyVHlwZSwgc291cmNlKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJGYWlsZWQgdG8gdXBkYXRlIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBl
IGZvciBnaXZlbiBwcm9ncmFtSWQiX3MpOwogCi0gICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtLT51
cGRhdGVTaGFkZXIoc2hhZGVyVHlwZS52YWx1ZSgpLCBzb3VyY2UpKQotICAgICAgICBlcnJvclN0
cmluZyA9ICJGYWlsZWQgdG8gdXBkYXRlIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZvciBn
aXZlbiBwcm9ncmFtSWQiX3M7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogI2lmIEVOQUJMRShXRUJH
TCkKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1EaXNhYmxlZChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGRp
c2FibGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OnNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJ
bnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVj
dG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0RGlzYWJsZWQoZGlz
YWJsZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6c2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdodGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxpZ2h0ZWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbUhp
Z2hsaWdodGVkKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYgcHJvZ3JhbUlkLCBi
b29sIGhpZ2hsaWdodGVkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0o
ZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBpbnNwZWN0b3JQcm9ncmFtLT5zZXRIaWdobGlnaHRlZChoaWdobGlnaHRlZCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCkBAIC00MTMsNyArNDMwLDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChDYW52
YXNSZW5kZXJpbmdDb250ZXgKICAgICBpZiAobV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291
bnQpIHsKICAgICAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdPcHRpb25zOwogICAgICAg
ICByZWNvcmRpbmdPcHRpb25zLmZyYW1lQ291bnQgPSBtX3JlY29yZGluZ0F1dG9DYXB0dXJlRnJh
bWVDb3VudC52YWx1ZSgpOwotICAgICAgICBzdGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpBdXRvQ2FwdHVyZSwg
V1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CisgICAgICAgIHN0YXJ0UmVjb3JkaW5nKGluc3Bl
Y3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpBdXRvQ2FwdHVyZSwg
V1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CiAgICAgfQogfQogCkBAIC01NzMsNyArNTkwLDcg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFz
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGMKICAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRp
b25OYW1lID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJuYW1lIikpKQogICAgICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5uYW1lID0gb3B0aW9u
TmFtZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAgfQotICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNw
ZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpD
b25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFydFJlY29yZGluZygq
aW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUs
IFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50Ojpjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBj
b250ZXh0KQpAQCAtNjk4LDcgKzcxNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Ondp
bGxEZXN0cm95V2ViR1BVUGlwZWxpbmUoV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQogfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0
UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvciBpbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMm
JiByZWNvcmRpbmdPcHRpb25zKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNv
cmRpbmcoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRp
bmc6OkluaXRpYXRvciBpbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMmJiByZWNvcmRpbmdPcHRp
b25zKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMuY2FudmFzQ29udGV4
dCgpOwogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTg0MCw3ICs4NTcsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JD
YW52YXMpCiAgICAgICAgIG1fY2FudmFzRGVzdHJveWVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50Ojphc3Nl
cnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGNhbnZhc0lkKQorUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmFzc2VydEluc3BlY3RvckNhbnZhcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQogewogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
bV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuZ2V0KGNhbnZhc0lkKTsKICAgICBpZiAoIWlu
c3BlY3RvckNhbnZhcykgewpAQCAtODg1LDcgKzkwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYgaW5zcGVjdG9yUHJv
Z3JhCiAgICAgICAgIG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwog
fQogCi1SZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmFzc2VydEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHByb2dyYW1JZCkKK1JlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCkKIHsKICAgICBhdXRvIGlu
c3BlY3RvclByb2dyYW0gPSBtX2lkZW50aWZpZXJUb0luc3BlY3RvclByb2dyYW0uZ2V0KHByb2dy
YW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKaW5kZXggMGVm
MWFlZmI2NDdlYWQ5OWI3ZDBlYjI0M2ZkMGI0MDhjZTQ1YjYwZi4uODZiZGI1MTI1NjlhMzExZjdh
MjUwODk1ZThmZmJjOWRkOWViY2RjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtNTcsNDMgKzU3LDQxIEBA
IGNsYXNzIFdlYkdQVVN3YXBDaGFpbjsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNhbnZhc0FnZW50IGZpbmFsIDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6Q2FudmFzQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyLCBwdWJsaWMgQ2FudmFzT2JzZXJ2ZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJ
bnNwZWN0b3JDYW52YXNBZ2VudD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rv
ckNhbnZhc0FnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDYW52YXNBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3Rv
ckNhbnZhc0FnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckNhbnZhc0FnZW50KCk7CiAK
ICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nh
cmRBZ2VudCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOworICAgIHZvaWQgZGlzY2FyZEFnZW50KCk7CiAKICAgICAvLyBDYW52
YXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBp
bnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q29udGVudChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIFN0cmluZyogY29udGVudCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNh
bnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25z
dCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UmVjb3JkaW5nQXV0b0Nh
cHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50KSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwg
Y29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxpbWl0KSBvdmVycmlkZTsK
LSAgICB2b2lkIHN0b3BSZWNvcmRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZh
c0lkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3ROb2RlKGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFN0cmluZz4gcmVxdWVzdENvbnRlbnQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+Pj4gcmVxdWVzdENsaWVudE5vZGVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZl
Q29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQoaW50KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0YXJ0UmVjb3JkaW5n
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmLCBPcHRpb25hbDxp
bnQ+JiYgZnJhbWVDb3VudCwgT3B0aW9uYWw8aW50PiYmIG1lbW9yeUxpbWl0KTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0b3BSZWNvcmRpbmcoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYpOwogI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKLSAgICB2b2lkIHJlcXVlc3RTaGFkZXJTb3VyY2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBl
LCBTdHJpbmcqIHNvdXJjZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVTaGFkZXIoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RTaGFkZXJTb3VyY2UoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OlNoYWRlclR5cGUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gdXBkYXRlU2hhZGVyKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
UHJvZ3JhbUlkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZSk7CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIHZvaWQgc2V0U2hhZGVy
UHJvZ3JhbURpc2FibGVkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJv
b2wgZGlzYWJsZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdo
dGVkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxpZ2h0
ZWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gc2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6UHJvZ3JhbUlkJiwgYm9vbCBkaXNhYmxlZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmLCBib29sIGhpZ2hsaWdodGVk
KTsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogCiAgICAgLy8gQ2FudmFzT2JzZXJ2ZXIKLSAgICB2b2lkIGNhbnZhc0No
YW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjYW52YXNE
ZXN0cm95ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY2FudmFzQ2hhbmdlZChD
YW52YXNCYXNlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjYW52YXNSZXNpemVkKENh
bnZhc0Jhc2UmKSB7IH0KKyAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJik7CiAK
ICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVk
KEZyYW1lJik7CkBAIC0xMzgsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDYW52
YXMmIGJpbmRDYW52YXMoV2ViR1BVRGV2aWNlJiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICNl
bmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kQ2FudmFzKEluc3BlY3RvckNh
bnZhcyYpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNhbnZh
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNhbnZhcyhJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwog
I2lmIEVOQUJMRShXRUJHUFUpCiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3Bl
Y3RvckNhbnZhcyhXZWJHUFVEZXZpY2UmKTsKQEAgLTE0Niw3ICsxNDQsNyBAQCBwcml2YXRlOgog
CiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kUHJv
Z3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJik7Ci0gICAgUmVmUHRyPEluc3BlY3RvclNoYWRl
clByb2dyYW0+IGFzc2VydEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHByb2dyYW1JZCk7CisgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IGFzc2Vy
dEluc3BlY3RvclByb2dyYW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHByb2dyYW1JZCk7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFJlZlB0cjxJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFByb2dyYW0mKTsK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDgzOWE1OGI1NDg4NTRkZTc1
NzcwZDI2MzNkOGQ1OWFmNTlmMjQxMTIuLmRiZGI4NTE4YzlhMWRiZTFhYWY3N2IwMjJmNjBhOWMx
NmQ0NDAzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xMjksNDAgKzEyOSwzOSBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0U2l6ZSA9IDEwMDAwOwog
c3RhdGljIGNvbnN0IFVDaGFyIGVsbGlwc2lzVUNoYXJbXSA9IHsgMHgyMDI2LCAwIH07CiAKLXN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCogY29sb3JPYmplY3QpCitz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvcihSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yT2JqZWN0
KQogewogICAgIGlmICghY29sb3JPYmplY3QpCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjazsKIAotICAgIGludCByID0gMDsKLSAgICBpbnQgZyA9IDA7Ci0gICAgaW50IGIg
PSAwOwotICAgIGlmICghY29sb3JPYmplY3QtPmdldEludGVnZXIoInIiLCByKSB8fCAhY29sb3JP
YmplY3QtPmdldEludGVnZXIoImciLCBnKSB8fCAhY29sb3JPYmplY3QtPmdldEludGVnZXIoImIi
LCBiKSkKKyAgICBhdXRvIHIgPSBjb2xvck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9N
OjpSR0JBQ29sb3I6OnJLZXkpOworICAgIGF1dG8gZyA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6Z0tleSk7CisgICAgYXV0byBiID0gY29sb3JPYmpl
Y3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpiS2V5KTsKKyAgICBpZiAo
IXIgfHwgIWcgfHwgIWIpCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsK
IAotICAgIGRvdWJsZSBhID0gMS4wOwotICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgi
YSIsIGEpKQotICAgICAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihyLCBn
LCBiKTsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihyLCBnLCBiLCBj
b252ZXJ0VG9Db21wb25lbnRCeXRlKGEpKTsKKyAgICBhdXRvIGEgPSBjb2xvck9iamVjdC0+Z2V0
RG91YmxlKFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6YUtleSk7CisgICAgaWYgKCFhKQorICAg
ICAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiKTsKKyAg
ICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiLCBjb252ZXJ0
VG9Db21wb25lbnRCeXRlKCphKSk7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9y
KGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVj
dCkKK3N0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmllbGROYW1l
LCBKU09OOjpPYmplY3QmIGNvbmZpZ09iamVjdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBjb2xvck9iamVjdDsKLSAgICBjb25maWdPYmplY3QtPmdldE9iamVjdChmaWVsZE5hbWUsIGNv
bG9yT2JqZWN0KTsKLQotICAgIHJldHVybiBwYXJzZUNvbG9yKGNvbG9yT2JqZWN0LmdldCgpKTsK
KyAgICByZXR1cm4gcGFyc2VDb2xvcihjb25maWdPYmplY3QuZ2V0T2JqZWN0KGZpZWxkTmFtZSkp
OwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVF1YWQoY29uc3QgSlNPTjo6QXJyYXkmIHF1YWRBcnJh
eSwgRmxvYXRRdWFkKiBxdWFkKQorc3RhdGljIGJvb2wgcGFyc2VRdWFkKFJlZjxKU09OOjpBcnJh
eT4mJiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBzaXplX3QgY29v
cmRpbmF0ZXNJblF1YWQgPSA4OwogICAgIGRvdWJsZSBjb29yZGluYXRlc1tjb29yZGluYXRlc0lu
UXVhZF07Ci0gICAgaWYgKHF1YWRBcnJheS5sZW5ndGgoKSAhPSBjb29yZGluYXRlc0luUXVhZCkK
KyAgICBpZiAocXVhZEFycmF5LT5sZW5ndGgoKSAhPSBjb29yZGluYXRlc0luUXVhZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29vcmRpbmF0ZXNJ
blF1YWQ7ICsraSkgewotICAgICAgICBpZiAoIXF1YWRBcnJheS5nZXQoaSktPmFzRG91YmxlKCoo
Y29vcmRpbmF0ZXMgKyBpKSkpCisgICAgICAgIGF1dG8gY29vcmRpbmF0ZSA9IHF1YWRBcnJheS0+
Z2V0KGkpLT5hc0RvdWJsZSgpOworICAgICAgICBpZiAoIWNvb3JkaW5hdGUpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvb3JkaW5hdGVzW2ldID0gKmNvb3JkaW5hdGU7CiAg
ICAgfQogICAgIHF1YWQtPnNldFAxKEZsb2F0UG9pbnQoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5h
dGVzWzFdKSk7CiAgICAgcXVhZC0+c2V0UDIoRmxvYXRQb2ludChjb29yZGluYXRlc1syXSwgY29v
cmRpbmF0ZXNbM10pKTsKQEAgLTI0Myw3ICsyNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgYXV0byogbm9kZSA9IGRvd25jYXN0PE5vZGU+KGV2ZW50LnRhcmdl
dCgpKTsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1fZG9tQWdlbnQucHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChub2RlKTsKKyAgICAgICAgYXV0byBub2RlSWQgPSBtX2RvbUFnZW50LnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQobm9kZSk7CiAgICAgICAgIGlmICghbm9kZUlkKQogICAgICAgICAgICAgcmV0
dXJuOwogCkBAIC0zMjAsOSArMzE5LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc28KICAgICBt
X21vdXNlZE92ZXJOb2RlID0gbnVsbHB0cjsKICAgICBtX2luc3BlY3RlZE5vZGUgPSBudWxscHRy
OwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGlnbm9yZWQsIGZhbHNlLCBudWxscHRy
LCBmYWxzZSk7Ci0gICAgaGlkZUhpZ2hsaWdodChpZ25vcmVkKTsKKyAgICBoaWRlSGlnaGxpZ2h0
KCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudERPTUFnZW50KG51
bGxwdHIpOwogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSBmYWxzZTsKQEAgLTM3NCw5ICszNzMs
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWxlYXNlRGFuZ2xpbmdOb2RlcygpCiAgICAg
bV9kYW5nbGluZ05vZGVUb0lkTWFwcy5jbGVhcigpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCkKIHsKLSAgICBpbnQgaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOworICAgIGF1
dG8gaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOwogICAgIGlmIChpZCkKICAgICAgICAgcmV0dXJu
IGlkOwogICAgIGlkID0gbV9sYXN0Tm9kZUlkKys7CkBAIC0zODgsNyArMzg3LDcgQEAgaW50IElu
c3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkK
IAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCkKIHsKLSAgICBpbnQgaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOworICAgIGF1
dG8gaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOwogICAgIGlmICghaWQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNDIyLDcgKzQyMSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChO
b2RlKiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiAgICAgfQogfQogCi1Ob2RlKiBJbnNw
ZWN0b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewog
ICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUpIHsKQEAg
LTQzMiw3ICs0MzEsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAK
LURvY3VtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojph
c3NlcnREb2N1bWVudChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTQ0NCw3ICs0NDMsNyBAQCBE
b2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERvY3VtZW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4obm9k
ZSk7CiB9CiAKLUVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0VsZW1lbnQqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnRFbGVtZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDU2LDcgKzQ1NSw3
IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
bm9kZSk7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9N
QWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBh
c3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTQ3Miw3
ICs0NzEsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVOb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZAogICAgIHJldHVybiBub2RlOwogfQog
Ci1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0VsZW1lbnQqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnRFZGl0YWJsZUVsZW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0g
YXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkK
QEAgLTQ4NCwyNyArNDgzLDI3IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRF
ZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQKICAgICByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4mIHJvb3QpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJv
dG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudCgpCiB7CiAg
ICAgbV9kb2N1bWVudFJlcXVlc3RlZCA9IHRydWU7CiAKLSAgICBpZiAoIW1fZG9jdW1lbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IG1pc3NpbmcgZG9jdW1lbnQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBtaXNzaW5nIGRvY3VtZW50
Il9zKTsKIAogICAgIC8vIFJlc2V0IGJhY2tlbmQgc3RhdGUuCiAgICAgUmVmUHRyPERvY3VtZW50
PiBkb2N1bWVudCA9IG1fZG9jdW1lbnQ7CiAgICAgcmVzZXQoKTsKICAgICBtX2RvY3VtZW50ID0g
ZG9jdW1lbnQ7CiAKLSAgICByb290ID0gYnVpbGRPYmplY3RGb3JOb2RlKG1fZG9jdW1lbnQuZ2V0
KCksIDIsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOworICAgIGF1dG8gcm9vdCA9IGJ1aWxkT2Jq
ZWN0Rm9yTm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsK
IAogICAgIGlmIChtX25vZGVUb0ZvY3VzKQogICAgICAgICBmb2N1c05vZGUoKTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKHJvb3QpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hp
bGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50IGRlcHRoKQordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKFByb3RvY29sOjpET006Ok5vZGVJZCBu
b2RlSWQsIGludCBkZXB0aCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7
CiAgICAgaWYgKCFub2RlIHx8IChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9E
RSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUgJiYgbm9kZS0+bm9k
ZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSkKQEAgLTUxOSw3ICs1MTgs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50
IG5vZGVJZCwgaW50IGRlcHRoKQogICAgICAgICBkZXB0aC0tOwogCiAgICAgICAgIGZvciAobm9k
ZSA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgbm9kZTsgbm9kZSA9IGlubmVyTmV4dFNpYmxpbmco
bm9kZSkpIHsKLSAgICAgICAgICAgIGludCBjaGlsZE5vZGVJZCA9IG5vZGVNYXAtPmdldChub2Rl
KTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGROb2RlSWQgPSBub2RlTWFwLT5nZXQobm9kZSk7CiAg
ICAgICAgICAgICBBU1NFUlQoY2hpbGROb2RlSWQpOwogICAgICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKGNoaWxkTm9kZUlkLCBkZXB0aCk7CiAgICAgICAgIH0KQEAgLTU0MSwxOCAr
NTQwLDE4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRCaW5kaW5ncygpCiAgICAg
bV9jaGlsZHJlblJlcXVlc3RlZC5jbGVhcigpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnB1c2hOb2RlVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVz
aCkKIHsKICAgICBpZiAoIW5vZGVUb1B1c2gpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8g
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93
IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9m
IHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKIAot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9y
ZWQ7CiAgICAgcmV0dXJuIHB1c2hOb2RlVG9Gcm9udGVuZChpZ25vcmVkLCBib3VuZE5vZGVJZCgm
bm9kZVRvUHVzaC0+ZG9jdW1lbnQoKSksIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBkb2N1bWVudE5vZGVJZCwgTm9kZSogbm9kZVRvUHVzaCkKK1Byb3RvY29sOjpET006Ok5vZGVJ
ZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250ZW5kKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBkb2N1bWVudE5vZGVJZCwg
Tm9kZSogbm9kZVRvUHVzaCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1
bWVudChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQpOwogICAgIGlmICghZG9jdW1lbnQpCkBA
IC01NjUsNyArNTY0LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRl
bmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnQKICAgICByZXR1cm4gcHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbm9kZVRvUHVzaCk7CiB9CiAKLU5vZGUq
IEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQorTm9kZSogSW5zcGVjdG9yRE9N
QWdlbnQ6Om5vZGVGb3JJZChQcm90b2NvbDo6RE9NOjpOb2RlSWQgaWQpCiB7CiAgICAgaWYgKCFt
X2lkVG9Ob2RlLmlzVmFsaWRLZXkoaWQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU3
Myw3ICs1NzIsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
ICAgICByZXR1cm4gbV9pZFRvTm9kZS5nZXQoaWQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIGNvbnN0IGludCogZGVwdGgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5v
ZGVJZCwgT3B0aW9uYWw8aW50PiYmIGRlcHRoKQogewogICAgIGludCBzYW5pdGl6ZWREZXB0aDsK
IApAQCAtNTgzLDY0ICs1ODIsNjQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENo
aWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLAogICAgICAgICBz
YW5pdGl6ZWREZXB0aCA9IElOVF9NQVg7CiAgICAgZWxzZSBpZiAoKmRlcHRoID4gMCkKICAgICAg
ICAgc2FuaXRpemVkRGVwdGggPSAqZGVwdGg7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgdmFsdWUgYmVsb3cgLTEgZm9yIGdpdmVuIGRlcHRoIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBnaXZlbiBkZXB0aCJfcyk7CiAKICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobm9kZUlkLCBzYW5pdGl6ZWREZXB0aCk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9y
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcnMsIGludCogZWxlbWVudElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvcihQcm90b2NvbDo6
RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgICplbGVt
ZW50SWQgPSAwOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KSB7Ci0gICAgICAgIGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBhIGNvbnRhaW5lciBu
b2RlIl9zKTsKIAotICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2Rl
Pigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3RvcnMpOwotICAgIGlmIChxdWVyeVJlc3VsdC5o
YXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gRXJyb3Igd2hpbGUg
cXVlcnlpbmcgd2l0aCBnaXZlbiBzZWxlY3RvcnMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBxdWVyeVJlc3VsdCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5x
dWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKKyAgICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9F
cnJvclN0cmluZyhxdWVyeVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIGlmIChh
dXRvKiBlbGVtZW50ID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpCi0gICAgICAg
ICplbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBlbGVtZW50
KTsKKyAgICBhdXRvIHJlc3VsdE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JT
dHJpbmcsIHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAoIXJlc3Vs
dE5vZGVJZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKwor
ICAgIHJldHVybiByZXN1bHROb2RlSWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1
ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIHNlbGVjdG9ycywgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mIHJlc3VsdCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChQcm90b2NvbDo6
RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRO
b2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKSB7Ci0gICAgICAgIGFzc2VydEVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgaWYgKCFpczxDb250
YWluZXJOb2RlPigqbm9kZSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBm
b3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBhIGNvbnRhaW5lciBub2RlIl9zKTsKIAotICAgIGF1dG8g
cXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3Rv
ckFsbChzZWxlY3RvcnMpOwotICAgIGlmIChxdWVyeVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJET00gRXJyb3Igd2hpbGUgcXVlcnlpbmcgd2l0aCBnaXZl
biBzZWxlY3RvcnMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBxdWVyeVJl
c3VsdCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5xdWVyeVNlbGVjdG9yQWxsKHNl
bGVjdG9yKTsKKyAgICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhxdWVy
eVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAogICAgIGF1dG8gbm9kZXMgPSBxdWVyeVJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPGlu
dD46OmNyZWF0ZSgpOworCisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bm9kZXMtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIHJlc3VsdC0+YWRkSXRlbShwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5vZGVzLT5pdGVtKGkpKSk7CisgICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgIHJldHVybiBXVEZN
b3ZlKG5vZGVJZHMpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogewot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9y
ZWQ7CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoaWdub3JlZCwgbm9kZVRvUHVz
aCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChF
cnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kZVRvUHVzaCkKK1Byb3RvY29sOjpET006
Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgQVNT
RVJUKG5vZGVUb1B1c2gpOyAgLy8gSW52YWxpZCBpbnB1dAogCkBAIC02NTYsOCArNjU1LDcgQEAg
aW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
IGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICB9CiAKICAgICAvLyBSZXR1cm4gaWQgaW4gY2Fz
ZSB0aGUgbm9kZSBpcyBrbm93bi4KLSAgICBpbnQgcmVzdWx0ID0gbV9kb2N1bWVudE5vZGVUb0lk
TWFwLmdldChub2RlVG9QdXNoKTsKLSAgICBpZiAocmVzdWx0KQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCkpCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKICAgICBOb2RlKiBub2RlID0gbm9kZVRvUHVzaDsKQEAgLTY3MSw3ICs2Njks
NyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZAogICAgICAgICAgICAgYXV0byBuZXdNYXAgPSBt
YWtlVW5pcXVlPE5vZGVUb0lkTWFwPigpOwogICAgICAgICAgICAgZGFuZ2xpbmdNYXAgPSBuZXdN
YXAuZ2V0KCk7CiAgICAgICAgICAgICBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzLmFwcGVuZChuZXdN
YXAucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgICAgICAgICAg
YXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOwogICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKG5v
ZGUsIDAsIGRhbmdsaW5nTWFwKSk7CiAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
c2V0Q2hpbGROb2RlcygwLCBXVEZNb3ZlKGNoaWxkcmVuKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTY4NiwyMjEgKzY4NCwyNTIgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKIAogICAgIE5v
ZGVUb0lkTWFwKiBtYXAgPSBkYW5nbGluZ01hcCA/IGRhbmdsaW5nTWFwIDogJm1fZG9jdW1lbnRO
b2RlVG9JZE1hcDsKICAgICBmb3IgKGludCBpID0gcGF0aC5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgICBpbnQgbm9kZUlkID0gbWFwLT5nZXQocGF0aC5hdChpKSk7CisgICAgICAg
IGF1dG8gbm9kZUlkID0gbWFwLT5nZXQocGF0aC5hdChpKSk7CiAgICAgICAgIEFTU0VSVChub2Rl
SWQpOwogICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobm9kZUlkKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1hcC0+Z2V0KG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqIG5vZGUpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAg
cmV0dXJuIG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgZWxlbWVudElk
KTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBtX2RvbUVkaXRvci0+c2V0QXR0cmlidXRlKCpl
bGVtZW50LCBuYW1lLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0QXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCB2YWx1ZSwg
ZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nKiBuYW1lKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoUHJvdG9j
b2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChl
cnJvclN0cmluZywgZWxlbWVudElkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBw
YXJzZWRFbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQoZWxlbWVudC0+ZG9jdW1lbnQoKSwgc3Bh
blRhZyk7CiAgICAgYXV0byByZXN1bHQgPSBwYXJzZWRFbGVtZW50LmdldCgpLnNldElubmVySFRN
TCgiPHNwYW4gIiArIHRleHQgKyAiPjwvc3Bhbj4iKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCiAg
ICAgTm9kZSogY2hpbGQgPSBwYXJzZWRFbGVtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFj
aGlsZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcGFyc2UgZ2l2ZW4gdGV4
dCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWNoaWxkKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBwYXJzZSBnaXZlbiB0ZXh0Il9zKTsKIAog
ICAgIEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKTsKLSAg
ICBpZiAoIWNoaWxkRWxlbWVudC0+aGFzQXR0cmlidXRlcygpICYmIG5hbWUpIHsKLSAgICAgICAg
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgKm5hbWUsIGVycm9yU3RyaW5n
KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghY2hpbGRFbGVtZW50LT5oYXNBdHRyaWJ1dGVz
KCkgJiYgISFuYW1lKSB7CisgICAgICAgIGlmICghbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0
ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBib29sIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmYWxzZTsKICAgICBmb3IgKGNvbnN0IEF0
dHJpYnV0ZSYgYXR0cmlidXRlIDogY2hpbGRFbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkg
ewogICAgICAgICAvLyBBZGQgYXR0cmlidXRlIHBhaXIKLSAgICAgICAgZm91bmRPcmlnaW5hbEF0
dHJpYnV0ZSA9IGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgfHwgKG5hbWUgJiYgYXR0cmlidXRlLm5h
bWUoKS50b1N0cmluZygpID09ICpuYW1lKTsKKyAgICAgICAgZm91bmRPcmlnaW5hbEF0dHJpYnV0
ZSA9IGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgfHwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygp
ID09IG5hbWU7CiAgICAgICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVu
dCwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLCBhdHRyaWJ1dGUudmFsdWUoKSwgZXJyb3JT
dHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9CiAKLSAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRy
aWJ1dGUgJiYgbmFtZSAmJiAhbmFtZS0+c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKQotICAg
ICAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCAqbmFtZSwgZXJyb3JT
dHJpbmcpOworICAgIGlmICghZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSAmJiAhbmFtZS5zdHJpcFdo
aXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3Zl
QXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmluZykpCisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1
dGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewot
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcs
IGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIG1fZG9tRWRpdG9yLT5yZW1v
dmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9t
RWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJ
ZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudE5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghcGFyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJD
YW5ub3QgcmVtb3ZlIGRldGFjaGVkIG5vZGUiX3MpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlbW92
ZUNoaWxkKCpwYXJlbnROb2RlLCAqbm9kZSwgZXJyb3JTdHJpbmcpOworICAgIGlmICghbV9kb21F
ZGl0b3ItPnJlbW92ZUNoaWxkKCpwYXJlbnROb2RlLCAqbm9kZSwgZXJyb3JTdHJpbmcpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUsIGludCogbmV3
SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3Bl
Y3RvckRPTUFnZW50OjpzZXROb2RlTmFtZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgKm5ld0lkID0gMDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBSZWZQdHI8Tm9kZT4gb2xkTm9kZSA9IG5v
ZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghaXM8RWxlbWVudD4ob2xkTm9kZSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIG9sZE5vZGUgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghb2xkTm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY3JlYXRlRWxlbWVudFJlc3VsdCA9IG9sZE5vZGUt
PmRvY3VtZW50KCkuY3JlYXRlRWxlbWVudEZvckJpbmRpbmdzKHRhZ05hbWUpOwogICAgIGlmIChj
cmVhdGVFbGVtZW50UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmlu
ZyhjcmVhdGVFbGVtZW50UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCiAgICAgYXV0byBu
ZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIAog
ICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9kZSdzIGF0dHJpYnV0ZXMuCi0gICAgbmV3
RWxlbWVudC0+Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oKm9s
ZE5vZGUpKTsKKyAgICBuZXdFbGVtZW50LT5jbG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudCgqb2xk
Tm9kZSk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBjaGlsZHJlbi4K
ICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQ7CiAgICAgd2hpbGUgKChjaGlsZCA9IG9sZE5vZGUtPmZp
cnN0Q2hpbGQoKSkpIHsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+aW5zZXJ0QmVmb3JlKG5l
d0VsZW1lbnQsICpjaGlsZCwgMCwgZXJyb3JTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9CiAK
ICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgbm9kZSB3aXRoIHRoZSBuZXcgbm9kZQogICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7CiAgICAgaWYg
KCFtX2RvbUVkaXRvci0+aW5zZXJ0QmVmb3JlKCpwYXJlbnQsIG5ld0VsZW1lbnQuY29weVJlZigp
LCBvbGROb2RlLT5uZXh0U2libGluZygpLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICBpZiAoIW1f
ZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50LCAqb2xkTm9kZSwgZXJyb3JTdHJpbmcpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKLSAgICAqbmV3SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBu
ZXdFbGVtZW50LnB0cigpKTsKKyAgICBhdXRvIHJlc3VsdE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5ld0VsZW1lbnQucHRyKCkpOwogICAgIGlmIChtX2NoaWxk
cmVuUmVxdWVzdGVkLmNvbnRhaW5zKG5vZGVJZCkpCi0gICAgICAgIHB1c2hDaGlsZE5vZGVzVG9G
cm9udGVuZCgqbmV3SWQpOworICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQocmVzdWx0
Tm9kZUlkKTsKKworICAgIHJldHVybiByZXN1bHROb2RlSWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldE91dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKIAotICAgICpvdXRlckhUTUwgPSBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwg
U2VyaWFsaXplZE5vZGVzOjpTdWJ0cmVlSW5jbHVkaW5nTm9kZSk7CisgICAgcmV0dXJuIHNlcmlh
bGl6ZUZyYWdtZW50KCpub2RlLCBTZXJpYWxpemVkTm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2Rl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1M
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghbm9k
ZUlkKSB7CiAgICAgICAgIERPTVBhdGNoU3VwcG9ydCB7ICptX2RvbUVkaXRvciwgKm1fZG9jdW1l
bnQgfS5wYXRjaERvY3VtZW50KG91dGVySFRNTCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2Rl
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50LmlzSFRN
TERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQoKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJEb2N1bWVudCBvZiBub2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IEhUTUwv
WE1MIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQuaXNIVE1M
RG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQuaXNYTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkRvY3VtZW50IG9mIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3Qg
SFRNTC9YTUwiX3MpOwogCiAgICAgTm9kZSogbmV3Tm9kZSA9IG51bGxwdHI7CiAgICAgaWYgKCFt
X2RvbUVkaXRvci0+c2V0T3V0ZXJIVE1MKCpub2RlLCBvdXRlckhUTUwsIG5ld05vZGUsIGVycm9y
U3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgaWYgKCFuZXdOb2RlKSB7CiAgICAgICAgIC8vIFRoZSBvbmx5
IGNoaWxkIG5vZGUgaGFzIGJlZW4gZGVsZXRlZC4KLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGludCBuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoZXJyb3JTdHJpbmcsIG5ld05vZGUpOworICAgIGF1dG8gbmV3SWQgPSBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKIAogICAgIGJvb2wgY2hpbGRyZW5SZXF1
ZXN0ZWQgPSBtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKG5vZGVJZCk7CiAgICAgaWYgKGNo
aWxkcmVuUmVxdWVzdGVkKQogICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobmV3SWQp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5zZXJ0
QWRqYWNlbnRIVE1MKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHBvc2l0aW9uLCBjb25zdCBTdHJp
bmcmIGh0bWwpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsK
ICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBhbiBlbGVt
ZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlk
IGlzIG5vdCBhbiBlbGVtZW50Il9zKTsKIAotICAgIG1fZG9tRWRpdG9yLT5pbnNlcnRBZGphY2Vu
dEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JTdHJp
bmcpOworICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEFkamFjZW50SFRNTChkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSksIHBvc2l0aW9uLCBodG1sLCBlcnJvclN0cmluZykpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShQcm90b2NvbDo6
RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0
YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBpZiAoIWlzPFRleHQ+KCpub2RlKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJOb2RlIGZv
ciBnaXZlbiBub2RlSWQgaXMgbm90IHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Tm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zKTsKIAotICAgIG1fZG9tRWRpdG9y
LT5yZXBsYWNlV2hvbGVUZXh0KGRvd25jYXN0PFRleHQ+KCpub2RlKSwgdmFsdWUsIGVycm9yU3Ry
aW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZXBsYWNlV2hvbGVUZXh0KGRvd25jYXN0PFRl
eHQ+KCpub2RlKSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgZXZlbnROYW1lcykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3Vw
cG9ydGVkRXZlbnROYW1lcygpCiB7Ci0gICAgZXZlbnROYW1lcyA9IEpTT046OkFycmF5T2Y8U3Ry
aW5nPjo6Y3JlYXRlKCk7CisgICAgYXV0byBldmVudE5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJp
bmc+OjpjcmVhdGUoKTsKIAogI2RlZmluZSBET01fRVZFTlRfTkFNRVNfQUREKG5hbWUpIGV2ZW50
TmFtZXMtPmFkZEl0ZW0oI25hbWUpOwogICAgIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChET01f
RVZFTlRfTkFNRVNfQUREKQogI3VuZGVmIERPTV9FVkVOVF9OQU1FU19BREQKKworICAgIHJldHVy
biBXVEZNb3ZlKGV2ZW50TmFtZXMpOwogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXREYXRhQmluZGluZ3NG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IC8qIG5vZGVJZCAqLywgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+JiAv
KiBkYXRhQmluZGluZ3MgKi8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RGF0YUJpbmRpbmdzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQpCiB7Ci0gICAgZXJyb3JT
dHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
dCBzdXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBc3NvY2lh
dGVkRGF0YUZvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyogbm9kZUlkICov
LCBPcHRpb25hbDxTdHJpbmc+JiAvKiBhc3NvY2lhdGVkRGF0YSAqLykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFzc29jaWF0ZWREYXRhRm9y
Tm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1
cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3Mp
OwogfQogI2VuZGlmCiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+JiBsaXN0
ZW5lcnNBcnJheSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewotICAgIGxp
c3RlbmVyc0FycmF5ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+OjpjcmVhdGUoKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CiAKICAgICBhdXRvKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+
PiBhbmNlc3RvcnM7CiAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKQEAgLTkyOSw4ICs5NTgs
MTAgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAgICAgICAgfQogICAgIH0KIAorICAgIGF1
dG8gbGlzdGVuZXJzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
Pjo6Y3JlYXRlKCk7CisKICAgICBhdXRvIGFkZExpc3RlbmVyID0gWyZdIChSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBpbmZvKSB7Ci0g
ICAgICAgIGludCBpZGVudGlmaWVyID0gMDsKKyAgICAgICAgUHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcklkIGlkZW50aWZpZXIgPSAwOwogICAgICAgICBib29sIGRpc2FibGVkID0gZmFsc2U7
CiAgICAgICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGJyZWFrcG9pbnQ7CiAKQEAgLTk1Myw3
ICs5ODQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbgogICAgICAgICAgICAgbV9ldmVudExp
c3RlbmVyRW50cmllcy5hZGQoaWRlbnRpZmllciwgaW5zcGVjdG9yRXZlbnRMaXN0ZW5lcik7CiAg
ICAgICAgIH0KIAotICAgICAgICBsaXN0ZW5lcnNBcnJheS0+YWRkSXRlbShidWlsZE9iamVjdEZv
ckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBp
bmZvLmV2ZW50VHlwZSwgZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKKyAgICAgICAgbGlzdGVuZXJz
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaWRlbnRpZmll
ciwgKmluZm8uZXZlbnRUYXJnZXQsIGluZm8uZXZlbnRUeXBlLCBkaXNhYmxlZCwgYnJlYWtwb2lu
dCkpOwogICAgIH07CiAKICAgICAvLyBHZXQgQ2FwdHVyaW5nIExpc3RlbmVycyAoaW4gdGhpcyBv
cmRlcikKQEAgLTk3Niw4MCArMTAwNyw4MSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRF
dmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbgogCiAg
ICAgaWYgKG1faW5zcGVjdGVkTm9kZSA9PSBub2RlKQogICAgICAgICBtX3N1cHByZXNzRXZlbnRM
aXN0ZW5lckNoYW5nZWRFdmVudCA9IGZhbHNlOworCisgICAgcmV0dXJuIFdURk1vdmUobGlzdGVu
ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2Fi
bGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBk
aXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoUHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklk
IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBkaXNhYmxlZCkKIHsKICAgICBhdXRvIGl0ID0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5maW5kKGV2ZW50TGlzdGVuZXJJZCk7Ci0gICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVu
ZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZXZlbnQgbGlzdGVu
ZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfcyk7CiAKICAgICBpdC0+dmFsdWUuZGlzYWJs
ZWQgPSBkaXNhYmxlZDsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldEJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGV2ZW50TGlzdGVuZXJJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5
bG9hZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
SWQgZXZlbnRMaXN0ZW5lcklkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpdCA9IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQpOwotICAgIGlmIChpdCA9
PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmll
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGV2ZW50IGxp
c3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCi0gICAgaWYgKGl0LT52YWx1
ZS5icmVha3BvaW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdp
dmVuIGV2ZW50TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoaXQtPnZhbHVlLmJyZWFrcG9pbnQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIGFscmVhZHkg
ZXhpc3RzIl9zKTsKIAotICAgIGl0LT52YWx1ZS5icmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlv
bnNQYXlsb2FkKTsKKyAgICBpdC0+dmFsdWUuYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KG9wdGlvbnMpKTsKKyAgICBpZiAoIWl0LT52YWx1ZS5icmVha3BvaW50KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZXZlbnRMaXN0ZW5lcklkKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnRG
b3JFdmVudExpc3RlbmVyKFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3Rl
bmVySWQpCiB7CiAgICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVu
dExpc3RlbmVySWQpOwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdp
dmVuIGV2ZW50TGlzdGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
aXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVy
SWQiX3MpOwogCiAgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtwb2ludCkKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIG1pc3NpbmciX3M7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZl
bnRMaXN0ZW5lcklkIG1pc3NpbmciX3MpOwogCiAgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQgPSBu
dWxscHRyOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+PiBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKLSAgICBheFByb3BlcnRpZXMgPSBidWlsZE9iamVjdEZvckFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzKG5vZGUpOworICAgIHJldHVybiBidWlsZE9iamVjdEZvckFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzKCpub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcXVl
cnksIGNvbnN0IEpTT046OkFycmF5KiBub2RlSWRzLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZl
LCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcgLyogc2VhcmNoSWQgKi8sIGludCAvKiByZXN1bHRDb3Vu
dCAqLz4+IEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKGNvbnN0IFN0cmluZyYgcXVl
cnksIFJlZlB0cjxKU09OOjpBcnJheT4mJiBub2RlSWRzLCBPcHRpb25hbDxib29sPiYmIGNhc2VT
ZW5zaXRpdmUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgLy8gRklYTUU6IFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIg
b2YgbWF0Y2hlcyB3aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KICAgICBJbnNwZWN0b3JO
b2RlRmluZGVyIGZpbmRlcihxdWVyeSwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSk7
CiAKICAgICBpZiAobm9kZUlkcykgewogICAgICAgICBmb3IgKGF1dG8mIG5vZGVWYWx1ZSA6ICpu
b2RlSWRzKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGVWYWx1ZSkgewotICAgICAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2Rl
SWRzIl9zOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGludCBub2RlSWQgPSAwOwotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFzSW50ZWdl
cihub2RlSWQpKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBu
b24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3M7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAg
ICAgICAgICAvLyBhc3NlcnROb2RlIHNob3VsZCBoYXZlIGZpbGxlZCB0aGUgZXJyb3JTdHJpbmcg
Zm9yIHVzLgotICAgICAgICAgICAgICAgIEFTU0VSVChlcnJvclN0cmluZy5sZW5ndGgoKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBu
b2RlSWQgPSBub2RlVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICAgICAgaWYgKCFub2RlSWQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1p
bnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfcyk7CisKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCAqbm9kZUlkKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCiAgICAgICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChub2RlKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CkBAIC0xMDU4LDM3ICsxMDkwLDM2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHF1CiAgICAgICAgIGZpbmRlci5wZXJmb3JtU2VhcmNoKG1fZG9jdW1lbnQuZ2V0KCkpOwogICAg
IH0KIAotICAgICpzZWFyY2hJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRlSWRlbnRpZmll
cigpOworICAgIGF1dG8gc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50
aWZpZXIoKTsKIAotICAgIGF1dG8mIHJlc3VsdHNWZWN0b3IgPSBtX3NlYXJjaFJlc3VsdHMuYWRk
KCpzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOworICAg
IGF1dG8mIHJlc3VsdHNWZWN0b3IgPSBtX3NlYXJjaFJlc3VsdHMuYWRkKHNlYXJjaElkLCBWZWN0
b3I8UmVmUHRyPE5vZGU+PigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgZm9yIChhdXRvJiByZXN1
bHQgOiBmaW5kZXIucmVzdWx0cygpKQogICAgICAgICByZXN1bHRzVmVjdG9yLmFwcGVuZChyZXN1
bHQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c1ZlY3Rvci5zaXplKCk7CisgICAgcmV0
dXJuIHsgeyBzZWFyY2hJZCwgcmVzdWx0c1ZlY3Rvci5zaXplKCkgfSB9OwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPGludD4+JiBub2RlSWRzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IEluc3BlY3RvckRP
TUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9t
SW5kZXgsIGludCB0b0luZGV4KQogewogICAgIFNlYXJjaFJlc3VsdHM6Oml0ZXJhdG9yIGl0ID0g
bV9zZWFyY2hSZXN1bHRzLmZpbmQoc2VhcmNoSWQpOwotICAgIGlmIChpdCA9PSBtX3NlYXJjaFJl
c3VsdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzZWFyY2ggcmVz
dWx0IGZvciBnaXZlbiBzZWFyY2hJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3MpOwogCiAg
ICAgaW50IHNpemUgPSBpdC0+dmFsdWUuc2l6ZSgpOwotICAgIGlmIChmcm9tSW5kZXggPCAwIHx8
IHRvSW5kZXggPiBzaXplIHx8IGZyb21JbmRleCA+PSB0b0luZGV4KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkludmFsaWQgc2VhcmNoIHJlc3VsdCByYW5nZSBmb3IgZ2l2ZW4gZnJvbUluZGV4
IGFuZCB0b0luZGV4Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmcm9tSW5k
ZXggPCAwIHx8IHRvSW5kZXggPiBzaXplIHx8IGZyb21JbmRleCA+PSB0b0luZGV4KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQgc2VhcmNoIHJlc3VsdCByYW5nZSBmb3Ig
Z2l2ZW4gZnJvbUluZGV4IGFuZCB0b0luZGV4Il9zKTsKIAotICAgIG5vZGVJZHMgPSBKU09OOjpB
cnJheU9mPGludD46OmNyZWF0ZSgpOworICAgIGF1dG8gbm9kZUlkcyA9IEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChpbnQgaSA9IGZyb21J
bmRleDsgaSA8IHRvSW5kZXg7ICsraSkKICAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CisgICAgcmV0dXJuIFdURk1v
dmUobm9kZUlkcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hS
ZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0
cyhjb25zdCBTdHJpbmcmIHNlYXJjaElkKQogewogICAgIG1fc2VhcmNoUmVzdWx0cy5yZW1vdmUo
c2VhcmNoSWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGFuZGxlTW91c2VQcmVzcygpCkBAIC0xMTE3LDcgKzExNDgsNyBAQCBib29sIEluc3BlY3Rv
ckRPTUFnZW50OjpoYW5kbGVUb3VjaEV2ZW50KE5vZGUmIG5vZGUpCiAKIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6Omluc3BlY3QoTm9kZSogaW5zcGVjdGVkTm9kZSkKIHsKLSAgICBFcnJvclN0cmlu
ZyBpZ25vcmVkOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gaW5zcGVjdGVkTm9kZTsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGln
bm9yZWQsIGZhbHNlLCBudWxscHRyLCBmYWxzZSk7CiAKQEAgLTExNzMsNyArMTIwNCw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCkKICAgICAgICAg
bV9vdmVybGF5LT5oaWdobGlnaHROb2RlKG5vZGUsICptX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29u
ZmlnKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0
KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKK3ZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdo
dEluc3BlY3Rvck9iamVjdCwgYm9vbCBzaG93UnVsZXJzKQogewogICAgIGlmIChtX3NlYXJjaGlu
Z0Zvck5vZGUgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE4MywxMiArMTIxNCwx
MiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibAogICAgIG1fb3ZlcmxheS0+c2V0U2hvd1J1bGVy
c0R1cmluZ0VsZW1lbnRTZWxlY3Rpb24obV9zZWFyY2hpbmdGb3JOb2RlICYmIHNob3dSdWxlcnMp
OwogCiAgICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSkgewotICAgICAgICBtX2luc3BlY3RNb2Rl
SGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJv
clN0cmluZywgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICAgICAgbV9pbnNwZWN0TW9k
ZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJy
b3JTdHJpbmcsIFdURk1vdmUoaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KSk7CiAgICAgICAgIGlm
ICghbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZykKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgaGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKTsKICAgICB9IGVsc2UKLSAgICAgICAgaGlk
ZUhpZ2hsaWdodChlcnJvclN0cmluZyk7CisgICAgICAgIGhpZGVIaWdobGlnaHQoKTsKIAogICAg
IG1fb3ZlcmxheS0+ZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShtX3NlYXJjaGluZ0Zvck5vZGUpOwog
CkBAIC0xMTk2LDcgKzEyMjcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hp
bmdGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibAogICAgICAgICBj
bGllbnQtPmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKG1fc2VhcmNoaW5nRm9yTm9kZSk7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCitzdGQ6OnVuaXF1
ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmln
RnJvbUluc3BlY3Rvck9iamVjdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkKIHsKICAgICBp
ZiAoIWhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJ
bnRlcm5hbCBlcnJvcjogaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGlzIG1pc3Np
bmciX3M7CkBAIC0xMjA0LDgxICsxMjM1LDkzIEBAIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRD
b25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yCiAg
ICAgfQogCiAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBtYWtlVW5pcXVlPEhpZ2hsaWdodENv
bmZpZz4oKTsKLSAgICBib29sIHNob3dJbmZvID0gZmFsc2U7IC8vIERlZmF1bHQ6IGZhbHNlIChk
byBub3Qgc2hvdyBhIHRvb2x0aXApLgotICAgIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdC0+Z2V0
Qm9vbGVhbigic2hvd0luZm8iLCBzaG93SW5mbyk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93
SW5mbyA9IHNob3dJbmZvOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29u
ZmlnQ29sb3IoImNvbnRlbnRDb2xvciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Ci0gICAg
aGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRl
bnRPdXRsaW5lQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdo
dENvbmZpZy0+cGFkZGluZyA9IHBhcnNlQ29uZmlnQ29sb3IoInBhZGRpbmdDb2xvciIsIGhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5ib3JkZXIgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Ci0g
ICAgaGlnaGxpZ2h0Q29uZmlnLT5tYXJnaW4gPSBwYXJzZUNvbmZpZ0NvbG9yKCJtYXJnaW5Db2xv
ciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93
SW5mbyA9IGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6RE9N
OjpIaWdobGlnaHRDb25maWc6OnNob3dJbmZvS2V5KS52YWx1ZU9yKGZhbHNlKTsKKyAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006Okhp
Z2hsaWdodENvbmZpZzo6Y29udGVudENvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0
KTsKKyAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3Rv
Y29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6cGFkZGluZ0NvbG9yS2V5LCAqaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBoaWdobGlnaHRDb25maWctPmJvcmRlciA9IHBhcnNlQ29uZmln
Q29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpib3JkZXJDb2xvcktleSwgKmhp
Z2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5tYXJnaW4gPSBw
YXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6bWFyZ2luQ29s
b3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwogICAgIHJldHVybiBoaWdobGlnaHRD
b25maWc7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9v
bCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVu
YWJsZWQoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZp
ZykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdo
bGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBmYWxzZSk7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgc2V0U2VhcmNoaW5nRm9yTm9k
ZShlcnJvclN0cmluZywgZW5hYmxlZCwgV1RGTW92ZShoaWdobGlnaHRDb25maWcpLCBmYWxzZSk7
CisKKyAgICBpZiAoISFlcnJvclN0cmluZykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAjZWxzZQotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29u
c3QgYm9vbCogc2hvd1J1bGVycykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoYm9vbCBlbmFibGVkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93UnVs
ZXJzKQogewotICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhp
Z2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxwdHIsIHNob3dSdWxlcnMgJiYg
KnNob3dSdWxlcnMpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwor
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGln
aGxpZ2h0Q29uZmlnKSwgc2hvd1J1bGVycyAmJiAqc2hvd1J1bGVycyk7CisKKyAgICBpZiAoISFl
cnJvclN0cmluZykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91
dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29s
b3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYm
IHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBtYWtlVW5pcXVlPEZsb2F0
UXVhZD4oRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICBpbm5lckhpZ2hsaWdo
dFF1YWQoV1RGTW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xvciwgdXNlUGFnZUNvb3JkaW5h
dGVzKTsKKyAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgV1RGTW92ZShjb2xv
ciksIFdURk1vdmUob3V0bGluZUNvbG9yKSwgV1RGTW92ZSh1c2VQYWdlQ29vcmRpbmF0ZXMpKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdo
dFF1YWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgcXVhZEFy
cmF5LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxp
bmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFF1YWQoUmVmPEpTT046
OkFycmF5PiYmIHF1YWRPYmplY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VD
b29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBtYWtlVW5pcXVlPEZsb2F0UXVhZD4oKTsK
LSAgICBpZiAoIXBhcnNlUXVhZChxdWFkQXJyYXksIHF1YWQuZ2V0KCkpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkQXJyYXkiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9y
LCBvdXRsaW5lQ29sb3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaWYgKCFwYXJzZVF1YWQo
V1RGTW92ZShxdWFkT2JqZWN0KSwgcXVhZC5nZXQoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiVW5leHBlY3RlZCBpbnZhbGlkIHF1YWQiX3MpOworCisgICAgaW5uZXJIaWdobGln
aHRRdWFkKFdURk1vdmUocXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xv
ciksIFdURk1vdmUodXNlUGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVf
cHRyPEZsb2F0UXVhZD4gcXVhZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9w
dHI8RmxvYXRRdWFkPiBxdWFkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29v
cmRpbmF0ZXMpCiB7CiAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBtYWtlVW5pcXVlPEhpZ2hs
aWdodENvbmZpZz4oKTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9y
KGNvbG9yKTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xv
cihvdXRsaW5lQ29sb3IpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29s
b3IoV1RGTW92ZShjb2xvcikpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUg
PSBwYXJzZUNvbG9yKFdURk1vdmUob3V0bGluZUNvbG9yKSk7CiAgICAgaGlnaGxpZ2h0Q29uZmln
LT51c2VQYWdlQ29vcmRpbmF0ZXMgPSB1c2VQYWdlQ29vcmRpbmF0ZXMgPyAqdXNlUGFnZUNvb3Jk
aW5hdGVzIDogZmFsc2U7CiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHRRdWFkKFdURk1vdmUocXVh
ZCksICpoaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVj
dCYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5n
LCBjb25zdCBTdHJpbmcqIGZyYW1lSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNv
bnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewotICAgIGF1dG8gaGln
aGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0
cmluZywgJmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCisgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRD
b25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50OwogCi0gICAgaWYgKGZyYW1lSWQpIHsKKyAgICBpZiAo
ISFmcmFtZUlkKSB7CiAgICAgICAgIGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgICAgIGlmICghcGFnZUFnZW50KSB7Ci0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFwYWdlQWdlbnQpCisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfcyk7CiAKLSAgICAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2VydEZyYW1l
KGVycm9yU3RyaW5nLCAqZnJhbWVJZCk7CisgICAgICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50
LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgICAgIGlmICghZnJhbWUp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgICAgIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGRvY3VtZW50ID0gbV9kb2N1bWVudDsKIAotICAgIGlmICghZG9j
dW1lbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFt
ZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZG9jdW1l
bnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3MpOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNl
cigqZG9jdW1lbnQpOwogICAgIENTU1NlbGVjdG9yTGlzdCBzZWxlY3Rvckxpc3Q7CkBAIC0xMzM5
LDE1OCArMTM4MiwxNzMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0
b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjoKICAgICB9CiAKICAgICBt
X292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92
ZShub2RlTGlzdCkpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29u
c3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShSZWY8SlNPTjo6
T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgT3B0aW9uYWw8UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkPiYmIG5vZGVJZCwgY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJiBvYmplY3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBOb2RlKiBub2RlID0gbnVsbHB0cjsKICAgICBpZiAobm9kZUlkKQogICAgICAgICBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7Ci0gICAgZWxzZSBpZiAob2Jq
ZWN0SWQpIHsKLSAgICAgICAgbm9kZSA9IG5vZGVGb3JPYmplY3RJZCgqb2JqZWN0SWQpOwotICAg
ICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUg
Zm9yIGdpdmVuIG9iamVjdElkIl9zOworICAgIGVsc2UgaWYgKCEhb2JqZWN0SWQpIHsKKyAgICAg
ICAgbm9kZSA9IG5vZGVGb3JPYmplY3RJZChvYmplY3RJZCk7CisgICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkVpdGhlciBub2RlSWQgb3Igb2JqZWN0SWQgbXVzdCBiZSBzcGVj
aWZpZWQiX3M7CiAKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxI
aWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hs
aWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUoaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KSk7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqaGlnaGxpZ2h0Q29uZmlnKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5v
ZGVMaXN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIG5vZGVJ
ZHMsIGNvbnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGVM
aXN0KFJlZjxKU09OOjpBcnJheT4mJiBub2RlSWRzLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCkKIHsKLSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAg
ICBmb3IgKGF1dG8mIG5vZGVWYWx1ZSA6IG5vZGVJZHMpIHsKLSAgICAgICAgaWYgKCFub2RlVmFs
dWUpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIg
aXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgICAgIGludCBu
b2RlSWQgPSAwOwotICAgICAgICBpZiAoIW5vZGVWYWx1ZS0+YXNJbnRlZ2VyKG5vZGVJZCkpIHsK
LSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBp
biBnaXZlbiBub2RlSWRzIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
VmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CisgICAgZm9yIChhdXRvJiBub2RlSWRWYWx1ZSA6IG5v
ZGVJZHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBub2RlSWQgPSBub2RlSWRWYWx1ZS0+YXNJbnRl
Z2VyKCk7CisgICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfcyk7
CiAKICAgICAgICAgLy8gSW4gdGhlIGNhc2UgdGhhdCBhIG5vZGUgaXMgcmVtb3ZlZCBpbiB0aGUg
dGltZSBiZXR3ZWVuIHdoZW4gaGlnaGxpZ2h0Tm9kZUxpc3QgaXMgaW52b2tlZAogICAgICAgICAv
LyBieSB0aGUgZnJvbnRlbmQgYW5kIGl0IGlzIGV4ZWN1dGVkIGJ5IHRoZSBiYWNrZW5kLCB3ZSBz
aG91bGQgc3RpbGwgYXR0ZW1wdCB0byBoaWdobGlnaHQKICAgICAgICAgLy8gYXMgbWFueSBub2Rl
cyBhcyBwb3NzaWJsZS4gQXMgc3VjaCwgd2Ugc2hvdWxkIGlnbm9yZSBhbnkgZXJyb3JzIGdlbmVy
YXRlZCB3aGVuIGF0dGVtcHRpbmcKICAgICAgICAgLy8gdG8gZ2V0IGEgTm9kZSBmcm9tIGEgZ2l2
ZW4gbm9kZUlkLiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgTm9kZSog
bm9kZSA9IGFzc2VydE5vZGUoaWdub3JlZCwgbm9kZUlkKTsKKyAgICAgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9y
ZWQsICpub2RlSWQpOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBub2Rlcy5hcHBlbmQoKm5vZGUpOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zy
b21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3Qp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9
IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUo
aGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KSk7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKIAogICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZUxpc3QoU3RhdGljTm9kZUxpc3Q6OmNy
ZWF0ZShXVEZNb3ZlKG5vZGVzKSksICpoaWdobGlnaHRDb25maWcpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKGNvbnN0
IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvcikKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgIGlmICghcGFn
ZUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhZ2VBZ2VudCkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQi
X3MpOwogCiAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2VydEZyYW1lKGVycm9yU3Ry
aW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAoZnJhbWUtPm93
bmVyRWxlbWVudCgpKSB7CiAgICAgICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFrZVVuaXF1
ZTxIaWdobGlnaHRDb25maWc+KCk7CiAgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+c2hvd0luZm8g
PSB0cnVlOyAvLyBBbHdheXMgc2hvdyB0b29sdGlwcyBmb3IgZnJhbWVzLgotICAgICAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgaGlnaGxp
Z2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAg
ICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihXVEZNb3ZlKGNvbG9y
KSk7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KFdURk1vdmUob3V0bGluZUNvbG9yKSk7CiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9k
ZShmcmFtZS0+b3duZXJFbGVtZW50KCksICpoaWdobGlnaHRDb25maWcpOwogICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQo
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmhpZGVIaWdobGlnaHQoKQogewogICAgIG1fb3ZlcmxheS0+aGlkZUhpZ2hsaWdodCgp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bW92ZVRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRhcmdldEVsZW1lbnRJ
ZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6bW92
ZVRvKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpET006Ok5vZGVJZCB0
YXJnZXROb2RlSWQsIE9wdGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBpbnNlcnRCZWZv
cmVOb2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsK
ICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldEVsZW1lbnRJZCk7CisgICAgRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywg
dGFyZ2V0Tm9kZUlkKTsKICAgICBpZiAoIXRhcmdldEVsZW1lbnQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIE5vZGUq
IGFuY2hvck5vZGUgPSAwOwotICAgIGlmIChhbmNob3JOb2RlSWQgJiYgKmFuY2hvck5vZGVJZCkg
ewotICAgICAgICBhbmNob3JOb2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCAq
YW5jaG9yTm9kZUlkKTsKKyAgICBOb2RlKiBhbmNob3JOb2RlID0gbnVsbHB0cjsKKyAgICBpZiAo
aW5zZXJ0QmVmb3JlTm9kZUlkICYmICppbnNlcnRCZWZvcmVOb2RlSWQpIHsKKyAgICAgICAgYW5j
aG9yTm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgKmluc2VydEJlZm9yZU5v
ZGVJZCk7CiAgICAgICAgIGlmICghYW5jaG9yTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKGFuY2hvck5vZGUtPnBhcmVudE5vZGUoKSAhPSB0YXJnZXRFbGVtZW50KSB7Ci0g
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJHaXZlbiBhbmNob3JOb2RlSWQgbXVzdCBiZSBhIGNo
aWxkIG9mIGdpdmVuIHRhcmdldEVsZW1lbnRJZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KyAgICAgICAgaWYgKGFuY2hvck5vZGUtPnBhcmVudE5vZGUoKSAhPSB0YXJnZXRFbGVtZW50KQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJHaXZlbiBpbnNlcnRCZWZvcmVOb2Rl
SWQgbXVzdCBiZSBhIGNoaWxkIG9mIGdpdmVuIHRhcmdldE5vZGVJZCJfcyk7CiAgICAgfQogCiAg
ICAgaWYgKCFtX2RvbUVkaXRvci0+aW5zZXJ0QmVmb3JlKCp0YXJnZXRFbGVtZW50LCAqbm9kZSwg
YW5jaG9yTm9kZSwgZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqbmV3Tm9kZUlkID0gcHVzaE5v
ZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbm9kZSk7CisgICAgcmV0dXJuIHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50Ojp1bmRvKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojp1bmRvKCkKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IG1faGlzdG9yeS0+dW5kbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0g
ICAgICAgIGVycm9yU3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0
b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlZG8oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlZG8oKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9oaXN0b3J5LT5yZWRvKCk7CiAgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSB0b0Vycm9yU3Ry
aW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKSkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6bWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKCkKIHsKICAgICBt
X2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50Ojpmb2N1cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6Zm9jdXMoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0
RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWVsZW1lbnQtPmlzRm9jdXNhYmxlKCkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiRWxlbWVudCBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBmb2N1c2FibGUiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgZm9j
dXNhYmxlIl9zKTsKKwogICAgIGVsZW1lbnQtPmZvY3VzKCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0ZWROb2RlKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CiAKLSAgICBpZiAobm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSAm
JiAhbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgaW4gYSBzaGFkb3cgdHJlZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1Ry
ZWUoKSAmJiAhbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcykKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgaW4gYSBzaGFkb3cg
dHJlZSJfcyk7CiAKICAgICBtX2luc3BlY3RlZE5vZGUgPSBub2RlOwogCkBAIC0xNDk4LDM4ICsx
NTU2LDQ5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RlZE5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgICAgICBjb21tYW5kTGluZUFQSUhv
c3QtPmFkZEluc3BlY3RlZE9iamVjdChtYWtlVW5pcXVlPEluc3BlY3RhYmxlTm9kZT4obm9kZSkp
OwogCiAgICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmpl
Y3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7Ci0gICAg
U3RyaW5nIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogZW1w
dHlTdHJpbmcoKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3QgPSByZXNvbHZlTm9kZShub2RlLCBvYmplY3RH
cm91cE5hbWUpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1p
c3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gb2JqZWN0OworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IG9iamVjdCA9IHJlc29sdmVOb2RlKG5vZGUsIG9iamVjdEdyb3VwKTsKKyAgICBp
ZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlkIl9zKTsKKworICAgIHJldHVybiBvYmplY3QucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRl
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEF0dHJpYnV0ZXMoUHJvdG9j
b2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWxlbWVudChlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHJlc3VsdCA9IGJ1
aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKKyAgICByZXR1cm4gYnVpbGRB
cnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoY29uc3QgUHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gbm9kZUZvck9i
amVjdElkKG9iamVjdElkKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgKm5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAg
Km5vZGVJZCA9IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOworCisgICAgYXV0byBub2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKKyAgICBpZiAo
IW5vZGVJZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKwor
ICAgIHJldHVybiBub2RlSWQ7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1l
bnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtMTU0NCw0NCArMTYxMyw0NCBAQCBz
dGF0aWMgU3RyaW5nIGRvY3VtZW50QmFzZVVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgcmV0dXJuIGRvY3VtZW50LT5jb21wbGV0ZVVSTChlbXB0eVN0cmluZygpKS5zdHJpbmcoKTsK
IH0KIAotc3RhdGljIGJvb2wgcHNldWRvRWxlbWVudFR5cGUoUHNldWRvSWQgcHNldWRvSWQsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZSogdHlwZSkKK3N0YXRpYyBib29sIHBz
ZXVkb0VsZW1lbnRUeXBlKFBzZXVkb0lkIHBzZXVkb0lkLCBQcm90b2NvbDo6RE9NOjpQc2V1ZG9U
eXBlKiB0eXBlKQogewogICAgIHN3aXRjaCAocHNldWRvSWQpIHsKICAgICBjYXNlIFBzZXVkb0lk
OjpCZWZvcmU6Ci0gICAgICAgICp0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpQc2V1
ZG9UeXBlOjpCZWZvcmU7CisgICAgICAgICp0eXBlID0gUHJvdG9jb2w6OkRPTTo6UHNldWRvVHlw
ZTo6QmVmb3JlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRl
cjoKLSAgICAgICAgKnR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGU6
OkFmdGVyOworICAgICAgICAqdHlwZSA9IFByb3RvY29sOjpET006OlBzZXVkb1R5cGU6OkFmdGVy
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dS
b290VHlwZSBzaGFkb3dSb290VHlwZShTaGFkb3dSb290TW9kZSBtb2RlKQorc3RhdGljIFByb3Rv
Y29sOjpET006OlNoYWRvd1Jvb3RUeXBlIHNoYWRvd1Jvb3RUeXBlKFNoYWRvd1Jvb3RNb2RlIG1v
ZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBTaGFkb3dSb290TW9kZTo6VXNl
ckFnZW50OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dS
b290VHlwZTo6VXNlckFnZW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6U2hhZG93
Um9vdFR5cGU6OlVzZXJBZ2VudDsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpDbG9zZWQ6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpD
bG9zZWQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6Q2xv
c2VkOwogICAgIGNhc2UgU2hhZG93Um9vdE1vZGU6Ok9wZW46Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpPcGVuOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6Ok9wZW47CiAgICAgfQogCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKKyAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6U2hh
ZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlIGN1c3RvbUVsZW1lbnRTdGF0ZShjb25zdCBFbGVtZW50
JiBlbGVtZW50KQorc3RhdGljIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZSBjdXN0
b21FbGVtZW50U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVu
dC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6Q3VzdG9tOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpDdXN0b207CiAgICAgaWYgKGVsZW1l
bnQuaXNGYWlsZWRDdXN0b21FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6RmFpbGVkOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpGYWlsZWQ7CiAgICAgaWYgKGVsZW1l
bnQuaXNVbmRlZmluZWRDdXN0b21FbGVtZW50KCkgfHwgZWxlbWVudC5pc0N1c3RvbUVsZW1lbnRV
cGdyYWRlQ2FuZGlkYXRlKCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6V2FpdGluZzsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW47CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OldhaXRpbmc7CisgICAgcmV0dXJu
IFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbjsKIH0KIAogc3RhdGlj
IFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaChjb25zdCBFbGVt
ZW50JiBlbGVtZW50KQpAQCAtMTU5Nyw5ICsxNjY2LDkgQEAgc3RhdGljIFN0cmluZyBjb21wdXRl
Q29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaChjb25zdCBFbGVtZW50JiBlbGVtZW50KQog
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRh
KCksIGRpZ2VzdC5zaXplKCkpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBp
bnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZjxQcm90b2NvbDo6RE9NOjpOb2Rl
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBk
ZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGludCBpZCA9IGJpbmQobm9kZSwg
bm9kZXNNYXApOworICAgIGF1dG8gaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFwKTsKICAgICBTdHJp
bmcgbm9kZU5hbWU7CiAgICAgU3RyaW5nIGxvY2FsTmFtZTsKICAgICBTdHJpbmcgbm9kZVZhbHVl
OwpAQCAtMTYzMCw3ICsxNjk5LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBhdXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlOjpjcmVhdGUoKQorICAgIGF1dG8gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpOb2RlOjpj
cmVhdGUoKQogICAgICAgICAuc2V0Tm9kZUlkKGlkKQogICAgICAgICAuc2V0Tm9kZVR5cGUoc3Rh
dGljX2Nhc3Q8aW50Pihub2RlLT5ub2RlVHlwZSgpKSkKICAgICAgICAgLnNldE5vZGVOYW1lKG5v
ZGVOYW1lKQpAQCAtMTY0MSw3ICsxNzEwLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgogICAg
IGlmIChub2RlLT5pc0NvbnRhaW5lck5vZGUoKSkgewogICAgICAgICBpbnQgbm9kZUNvdW50ID0g
aW5uZXJDaGlsZE5vZGVDb3VudChub2RlKTsKICAgICAgICAgdmFsdWUtPnNldENoaWxkTm9kZUNv
dW50KG5vZGVDb3VudCk7Ci0gICAgICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxk
cmVuKG5vZGUsIGRlcHRoLCBub2Rlc01hcCk7CisgICAgICAgIFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGls
ZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOwogICAgICAgICBpZiAoY2hpbGRyZW4tPmxlbmd0
aCgpID4gMCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVu
KSk7CiAgICAgfQpAQCAtMTY2MSw3ICsxNzMwLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LnNoYWRv
d1Jvb3QoKSkgewotICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBh
dXRvIHNoYWRvd1Jvb3RzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3Jl
YXRlKCk7CiAgICAgICAgICAgICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5v
ZGUocm9vdCwgMCwgbm9kZXNNYXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290
cyhXVEZNb3ZlKHNoYWRvd1Jvb3RzKSk7CiAgICAgICAgIH0KQEAgLTE2NzMsMTYgKzE3NDIsMTYg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgogICAgICAgICAgICAgdmFsdWUtPnNldENvbnRlbnRT
ZWN1cml0eVBvbGljeUhhc2goY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2go
ZWxlbWVudCkpOwogCiAgICAgICAgIGF1dG8gc3RhdGUgPSBjdXN0b21FbGVtZW50U3RhdGUoZWxl
bWVudCk7Ci0gICAgICAgIGlmIChzdGF0ZSAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1
c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbikKKyAgICAgICAgaWYgKHN0YXRlICE9IFByb3RvY29s
OjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbikKICAgICAgICAgICAgIHZhbHVlLT5z
ZXRDdXN0b21FbGVtZW50U3RhdGUoc3RhdGUpOwogCiAgICAgICAgIGlmIChlbGVtZW50LnBzZXVk
b0lkKCkgIT0gUHNldWRvSWQ6Ok5vbmUpIHsKLSAgICAgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlOworICAgICAgICAgICAgUHJvdG9jb2w6OkRP
TTo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlOwogICAgICAgICAgICAgaWYgKHBzZXVkb0VsZW1lbnRU
eXBlKGVsZW1lbnQucHNldWRvSWQoKSwgJnBzZXVkb1R5cGUpKQogICAgICAgICAgICAgICAgIHZh
bHVlLT5zZXRQc2V1ZG9UeXBlKHBzZXVkb1R5cGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKGF1dG8gcHNldWRvRWxlbWVudHMgPSBidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVu
dHMoZWxlbWVudCwgbm9kZXNNYXApKQotICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRQc2V1ZG9F
bGVtZW50cyhXVEZNb3ZlKHBzZXVkb0VsZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgdmFsdWUt
PnNldFBzZXVkb0VsZW1lbnRzKHBzZXVkb0VsZW1lbnRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIGlmIChpczxEb2N1bWVudD4oKm5vZGUpKSB7CiAgICAgICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSk7CkBAIC0xNzIxLDkg
KzE3OTAsOSBAQCBSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZQogICAgIHJldHVybiBhdHRyaWJ1dGVz
VmFsdWU7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4o
Tm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBO
b2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgYXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgYXV0byBj
aGlsZHJlbiA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwog
ICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSB0aGUgb25seSB0
ZXh0IGNoaWxkIC0gcHJldGVuZCB0aGF0IGNvbnRhaW5lcidzIGNoaWxkcmVuIGhhdmUgYmVlbiBy
ZXF1ZXN0ZWQuCiAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBjb250YWluZXItPmZpcnN0Q2hp
bGQoKTsKQEAgLTE3NDUsMTQgKzE4MTQsMTQgQEAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXkKICAg
ICByZXR1cm4gY2hpbGRyZW47CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yUHNl
dWRvRWxlbWVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFw
KQorUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRP
TUFnZW50OjpidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAgIFBzZXVkb0VsZW1lbnQqIGJlZm9yZUVs
ZW1lbnQgPSBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKICAgICBQc2V1ZG9FbGVtZW50
KiBhZnRlckVsZW1lbnQgPSBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgIGlmICgh
YmVmb3JlRWxlbWVudCAmJiAhYWZ0ZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGF1dG8gcHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcHNldWRvRWxlbWVudHMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoYmVm
b3JlRWxlbWVudCkKICAgICAgICAgcHNldWRvRWxlbWVudHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JOb2RlKGJlZm9yZUVsZW1lbnQsIDAsIG5vZGVzTWFwKSk7CiAgICAgaWYgKGFmdGVyRWxlbWVu
dCkKQEAgLTE3NjAsNyArMTgyOSw3IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFyCiAgICAgcmV0
dXJuIHBzZXVkb0VsZW1lbnRzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpF
dmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3Rl
bmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ciwgaW50IGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCwgY29uc3QgQXRvbVN0
cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiYgYnJlYWtwb2ludCkKK1JlZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgUHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCwgY29u
c3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlND
OjpCcmVha3BvaW50PiYgYnJlYWtwb2ludCkKIHsKICAgICBSZWY8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lciA9IHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNhbGxiYWNrKCk7CiAKQEAgLTE4
MjIsNyArMTg5MSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBhdXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVyOjpjcmVhdGUoKQorICAgIGF1dG8gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVyOjpjcmVhdGUoKQogICAgICAgICAuc2V0RXZlbnRMaXN0ZW5lcklkKGlkZW50aWZpZXIpCiAg
ICAgICAgIC5zZXRUeXBlKGV2ZW50VHlwZSkKICAgICAgICAgLnNldFVzZUNhcHR1cmUocmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSgpKQpAQCAtMTgzMyw3ICsxOTAyLDcgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICBlbHNlIGlmIChpczxET01XaW5kb3c+KGV2ZW50VGFy
Z2V0KSkKICAgICAgICAgdmFsdWUtPnNldE9uV2luZG93KHRydWUpOwogICAgIGlmICghc2NyaXB0
SUQuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBsb2NhdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBsb2NhdGlvbiA9
IFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
U2NyaXB0SWQoc2NyaXB0SUQpCiAgICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVy
KQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTE4NTMsNyArMTkyMiw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iamVjdEZvckV2CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmpl
Y3QsIEpTT046OkFycmF5T2Y8aW50PiYgY2hpbGROb2RlSWRzKQordm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0
LCBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD4mIGNoaWxkTm9kZUlkcykKIHsK
ICAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IGF4T2JqZWN0LmNoaWxkcmVuKCk7CiAgICAgaWYg
KCFjaGlsZHJlbi5zaXplKCkpCkBAIC0xODY3LDQzICsxOTM2LDM5IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiBheE9i
amVjdCwgSlNPCiAgICAgfQogfQogICAgIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqIG5vZGUpCitSZWY8UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5v
ZGUpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBpZiAo
IVdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAg
IFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKIAogICAgIE5v
ZGUqIGFjdGl2ZURlc2NlbmRhbnROb2RlID0gbnVsbHB0cjsKICAgICBib29sIGJ1c3kgPSBmYWxz
ZTsKLSAgICBhdXRvIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxpbnQ+PiBjaGlsZE5vZGVJZHM7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4gY29u
dHJvbGxlZE5vZGVJZHM7Ci0gICAgYXV0byBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxzZTsKKyAgICBh
dXRvIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6RmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkPj4gY2hpbGROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD4+IGNvbnRyb2xsZWROb2RlSWRzOworICAgIGF1dG8gY3VycmVudFN0YXRlID0g
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOwog
ICAgIGJvb2wgZXhpc3RzID0gZmFsc2U7CiAgICAgYm9vbCBleHBhbmRlZCA9IGZhbHNlOwogICAg
IGJvb2wgZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBm
bG93ZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+IGZsb3dlZE5vZGVJZHM7CiAgICAgYm9vbCBmb2N1c2VkID0gZmFsc2U7CiAgICAgYm9v
bCBpZ25vcmVkID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZWRCeURlZmF1bHQgPSBmYWxzZTsKLSAg
ICBhdXRvIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAgICBhdXRvIGludmFsaWQgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAgICAgYm9vbCBo
aWRkZW4gPSBmYWxzZTsKICAgICBTdHJpbmcgbGFiZWw7CiAgICAgYm9vbCBsaXZlUmVnaW9uQXRv
bWljID0gZmFsc2U7CiAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gbGl2ZVJlZ2lv
blJlbGV2YW50OwotICAgIGF1dG8gbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsK
KyAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOwogICAgIE5vZGUqIG1vdXNlRXZlbnRO
b2RlID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBvd25lZE5vZGVJ
ZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gb3du
ZWROb2RlSWRzOwogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBudWxscHRyOwogICAgIGJvb2wgcHJl
c3NlZCA9IGZhbHNlOwogICAgIGJvb2wgcmVhZG9ubHkgPSBmYWxzZTsKICAgICBib29sIHJlcXVp
cmVkID0gZmFsc2U7CiAgICAgU3RyaW5nIHJvbGU7CiAgICAgYm9vbCBzZWxlY3RlZCA9IGZhbHNl
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IHNlbGVjdGVkQ2hpbGROb2RlSWRzOwor
ICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD4+IHNlbGVjdGVk
Q2hpbGROb2RlSWRzOwogICAgIGJvb2wgc3VwcG9ydHNDaGVja2VkID0gZmFsc2U7CiAgICAgYm9v
bCBzdXBwb3J0c0V4cGFuZGVkID0gZmFsc2U7CiAgICAgYm9vbCBzdXBwb3J0c0xpdmVSZWdpb24g
PSBmYWxzZTsKQEAgLTE5MTUsOCArMTk4MCw4IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAg
ICAgdW5zaWduZWQgaGllcmFyY2hpY2FsTGV2ZWwgPSAwOwogICAgIHVuc2lnbmVkIGxldmVsID0g
MDsKIAotICAgIGlmIChBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlID0gbm9kZS0+ZG9jdW1l
bnQoKS5heE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgaWYgKEFYQ29yZU9iamVjdCogYXhPYmpl
Y3QgPSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZShub2RlKSkgeworICAgIGlmIChBWE9iamVj
dENhY2hlKiBheE9iamVjdENhY2hlID0gbm9kZS5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKSkg
eworICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUtPmdl
dE9yQ3JlYXRlKCZub2RlKSkgewogCiAgICAgICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBhY3Rp
dmVEZXNjZW5kYW50ID0gYXhPYmplY3QtPmFjdGl2ZURlc2NlbmRhbnQoKSkKICAgICAgICAgICAg
ICAgICBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IGFjdGl2ZURlc2NlbmRhbnQtPm5vZGUoKTsKQEAg
LTE5MzIsNDcgKzE5OTcsNDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAg
IGlmIChzdXBwb3J0c0NoZWNrZWQpIHsKICAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5QnV0
dG9uU3RhdGUgY2hlY2tWYWx1ZSA9IGF4T2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpOyAv
LyBFbGVtZW50IHVzaW5nIGFyaWEtY2hlY2tlZC4KICAgICAgICAgICAgICAgICBpZiAoY2hlY2tW
YWx1ZSA9PSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9uKQotICAgICAgICAgICAgICAgICAg
ICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q2hlY2tlZDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRl
OjpNaXhlZCkKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6Ok1peGVkOworICAgICAg
ICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkNoZWNrZWQ6Ok1peGVkOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF4T2JqZWN0
LT5pc0NoZWNrZWQoKSkgLy8gTmF0aXZlIGNoZWNrYm94LgotICAgICAgICAgICAgICAgICAgICBj
aGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6Q2hlY2tlZDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWF4T2JqZWN0LT5jaGlsZHJlbigp
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5
T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgY2hpbGROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAg
ICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKCpheE9iamVjdCwgKmNoaWxkTm9kZUlkcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50
Kj4gY29udHJvbGxlZEVsZW1lbnRzOwogICAgICAgICAgICAgYXhPYmplY3QtPmVsZW1lbnRzRnJv
bUF0dHJpYnV0ZShjb250cm9sbGVkRWxlbWVudHMsIGFyaWFfY29udHJvbHNBdHRyKTsKICAgICAg
ICAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9sbGVkRWxl
bWVudHMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzLT5hZGRJdGVtKHB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAg
ICBjb250cm9sbGVkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgZm9yIChFbGVtZW50KiBjb250cm9sbGVkRWxl
bWVudCA6IGNvbnRyb2xsZWRFbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byBjb250cm9sbGVkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChjb250cm9sbGVk
RWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVkTm9kZUlkcy0+YWRk
SXRlbShjb250cm9sbGVkRWxlbWVudElkKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXhPYmplY3QtPmN1cnJlbnRT
dGF0ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkZh
bHNlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzOjpDdXJyZW50OjpGYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6UGFnZToKLSAgICAgICAgICAgICAgICBj
dXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpDdXJyZW50OjpQYWdlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpQYWdlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVu
dFN0YXRlOjpTdGVwOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlN0ZXA7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlN0ZXA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkxvY2F0aW9uOgotICAgICAg
ICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkxvY2F0aW9uOworICAgICAgICAgICAgICAgIGN1
cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJy
ZW50OjpMb2NhdGlvbjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RGF0ZToKLSAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpEYXRlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpEYXRlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
OjpUaW1lOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRpbWU7CisgICAgICAg
ICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkN1cnJlbnQ6OlRpbWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlRydWU6Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6Q3VycmVudDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6VHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTk4NiwxMiArMjA1Mywx
NCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQq
PiBmbG93ZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRy
aWJ1dGUoZmxvd2VkRWxlbWVudHMsIGFyaWFfZmxvd3RvQXR0cik7CiAgICAgICAgICAgICBpZiAo
Zmxvd2VkRWxlbWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcyA9
IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChFbGVt
ZW50KiBmbG93ZWRFbGVtZW50IDogZmxvd2VkRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAg
IGZsb3dlZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChmbG93ZWRFbGVt
ZW50KSk7CisgICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgZm9yIChFbGVt
ZW50KiBmbG93ZWRFbGVtZW50IDogZmxvd2VkRWxlbWVudHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gZmxvd2VkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChmbG93
ZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMtPmFkZEl0
ZW0oZmxvd2VkRWxlbWVudElkKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAg
ICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgIHN1cHBvcnRz
Rm9jdXNlZCA9IGF4T2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOwogICAgICAgICAgICAg
ICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWQgPSBh
eE9iamVjdC0+aXNGb2N1c2VkKCk7CkBAIC0yMDAyLDEzICsyMDcxLDEzIEBAIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cmluZyBpbnZhbGlkVmFs
dWUgPSBheE9iamVjdC0+aW52YWxpZFN0YXR1cygpOwogICAgICAgICAgICAgaWYgKGludmFsaWRW
YWx1ZSA9PSAiZmFsc2UiKQotICAgICAgICAgICAgICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAg
ICAgICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgICAgICAgICAgZWxzZSBpZiAoaW52YWxpZFZhbHVl
ID09ICJncmFtbWFyIikKLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6R3JhbW1hcjsKKyAg
ICAgICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkludmFsaWQ6OkdyYW1tYXI7CiAgICAgICAgICAgICBlbHNlIGlmIChpbnZhbGlkVmFs
dWUgPT0gInNwZWxsaW5nIikKLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3BlbGxpbmc7
CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpJbnZhbGlkOjpTcGVsbGluZzsKICAgICAgICAgICAgIGVsc2UgLy8gRnV0dXJl
IHZlcnNpb25zIG9mIEFSSUEgbWF5IGFsbG93IGFkZGl0aW9uYWwgdHJ1dGh5IHZhbHVlcy4gRXgu
IGZvcm1hdCwgb3JkZXIsIG9yIHNpemUuCi0gICAgICAgICAgICAgICAgaW52YWxpZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OlRy
dWU7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoYXhPYmplY3QtPmlzQVhIaWRkZW4oKSB8fCBheE9iamVjdC0+aXNET01IaWRkZW4oKSkKICAg
ICAgICAgICAgICAgICBoaWRkZW4gPSB0cnVlOwpAQCAtMjAyMiw5ICsyMDkxLDkgQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3Bl
Y3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50QXR0
clZhbHVlID0gYXhPYmplY3QtPmxpdmVSZWdpb25SZWxldmFudCgpOwogICAgICAgICAgICAgICAg
IGlmICghYXJpYVJlbGV2YW50QXR0clZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogUGFzcyBlbnVtIHZhbHVlcyByYXRoZXIgdGhhbiBzdHJpbmdzIG9uY2Ug
dW5ibG9ja2VkLiBodHRwOi8vd2Via2l0Lm9yZy9iLzEzMzcxMQotICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgYXJpYVJlbGV2YW50QWRkaXRpb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5z
cGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFkZGl0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAg
IFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFscyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3Bl
Y3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpSZW1vdmFscyk7Ci0gICAgICAgICAgICAgICAgICAgIFN0
cmluZyBhcmlhUmVsZXZhbnRUZXh0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpMaXZl
UmVnaW9uUmVsZXZhbnQ6OlRleHQpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJl
bGV2YW50QWRkaXRpb25zID0gUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KFByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6QWRkaXRpb25zKTsKKyAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudFJlbW92YWxzID0gUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFu
dDo6UmVtb3ZhbHMpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50VGV4
dCA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlRleHQpOwogICAgICAgICAgICAgICAgICAgICBsaXZlUmVn
aW9uUmVsZXZhbnQgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiB2YWx1ZXMgPSBTcGFjZVNwbGl0U3Ry
aW5nKGFyaWFSZWxldmFudEF0dHJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEBhcmlhLXJlbGV2YW50PSJhbGwiIGlzIGV4cG9zZWQgYXMgWyJhZGRpdGlvbnMiLCJyZW1vdmFs
cyIsInRleHQiXSwgaW4gb3JkZXIuCkBAIC0yMDQ1LDkgKzIxMTQsOSBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aQogCiAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFMaXZlID0gYXhPYmplY3Qt
PmxpdmVSZWdpb25TdGF0dXMoKTsKICAgICAgICAgICAgICAgICBpZiAoYXJpYUxpdmUgPT0gImFz
c2VydGl2ZSIpCi0gICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3Rh
dHVzOjpBc3NlcnRpdmU7CisgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6
QXNzZXJ0aXZlOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyaWFMaXZlID09ICJwb2xpdGUi
KQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6UG9s
aXRlOworICAgICAgICAgICAgICAgICAgICBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OlBvbGl0ZTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
PigqYXhPYmplY3QpKQpAQCAtMjA1Nyw5ICsyMTI2LDExIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpCiAgICAgICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBvd25lZEVsZW1lbnRzOwogICAg
ICAgICAgICAgICAgIGF4T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUob3duZWRFbGVtZW50
cywgYXJpYV9vd25zQXR0cik7CiAgICAgICAgICAgICAgICAgaWYgKG93bmVkRWxlbWVudHMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93bmVkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8
aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogb3duZWRF
bGVtZW50IDogb3duZWRFbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAgICAgIG93bmVkTm9k
ZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG93bmVkRWxlbWVudCkpOworICAg
ICAgICAgICAgICAgICAgICBvd25lZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQq
IG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvIG93bmVkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChvd25lZEVs
ZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVkTm9kZUlkcy0+YWRkSXRl
bShvd25lZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKQEAgLTIwODMsMTAgKzIxNTQsMTIgQEAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRP
TUFnZW50OjpidWkKICAgICAgICAgICAgIEFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47CiAgICAgICAgICAgICBheE9iamVjdC0+c2VsZWN0
ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKICAgICAgICAgICAgIGlmIChzZWxlY3RlZENo
aWxkcmVuLnNpemUoKSkgewotICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRzID0g
SlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RlZENo
aWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3RlZENoaWxkT2JqZWN0IDogc2Vs
ZWN0ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoTm9kZSogc2VsZWN0ZWRD
aGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0LT5ub2RlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBz
ZWxlY3RlZENoaWxkTm9kZSA9IHNlbGVjdGVkQ2hpbGRPYmplY3QtPm5vZGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRDaGlsZE5vZGVJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoc2VsZWN0ZWRDaGlsZE5vZGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRzLT5hZGRJdGVtKHNlbGVjdGVkQ2hpbGROb2RlSWQp
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0yMDk4LDU0ICsyMTcxLDYwIEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Y3JlYXRlKCkKKyAgICBSZWY8UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IHZhbHVlID0gUHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRFeGlzdHMo
ZXhpc3RzKQogICAgICAgICAuc2V0TGFiZWwobGFiZWwpCiAgICAgICAgIC5zZXRSb2xlKHJvbGUp
Ci0gICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSkKKyAgICAg
ICAgLnNldE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKSkKICAgICAgICAgLnJl
bGVhc2UoKTsKIAogICAgIGlmIChleGlzdHMpIHsKLSAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRh
bnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldEFjdGl2ZURlc2NlbmRhbnROb2RlSWQocHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChhY3RpdmVEZXNjZW5kYW50Tm9kZSkpOworICAgICAgICBpZiAo
YWN0aXZlRGVzY2VuZGFudE5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGFjdGl2ZURlc2Nl
bmRhbnROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGFjdGl2ZURlc2NlbmRhbnROb2Rl
KSkKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0QWN0aXZlRGVzY2VuZGFudE5vZGVJZChhY3Rp
dmVEZXNjZW5kYW50Tm9kZUlkKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYnVzeSkKICAgICAg
ICAgICAgIHZhbHVlLT5zZXRCdXN5KGJ1c3kpOwogICAgICAgICBpZiAoc3VwcG9ydHNDaGVja2Vk
KQogICAgICAgICAgICAgdmFsdWUtPnNldENoZWNrZWQoY2hlY2tlZCk7CiAgICAgICAgIGlmIChj
aGlsZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlSWRzKGNoaWxkTm9k
ZUlkcyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlSWRzKGNoaWxkTm9kZUlkcy5y
ZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKGNvbnRyb2xsZWROb2RlSWRzKQotICAgICAg
ICAgICAgdmFsdWUtPnNldENvbnRyb2xsZWROb2RlSWRzKGNvbnRyb2xsZWROb2RlSWRzKTsKLSAg
ICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxzZSkKKyAgICAgICAgICAgIHZhbHVlLT5z
ZXRDb250cm9sbGVkTm9kZUlkcyhjb250cm9sbGVkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q3VycmVu
dChjdXJyZW50U3RhdGUpOwogICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0RGlzYWJsZWQoZGlzYWJsZWQpOwogICAgICAgICBpZiAoc3VwcG9ydHNFeHBhbmRlZCkK
ICAgICAgICAgICAgIHZhbHVlLT5zZXRFeHBhbmRlZChleHBhbmRlZCk7CiAgICAgICAgIGlmIChm
bG93ZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldEZsb3dlZE5vZGVJZHMoZmxvd2Vk
Tm9kZUlkcyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0Rmxvd2VkTm9kZUlkcyhmbG93ZWROb2Rl
SWRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBpZiAoc3VwcG9ydHNGb2N1c2VkKQogICAg
ICAgICAgICAgdmFsdWUtPnNldEZvY3VzZWQoZm9jdXNlZCk7CiAgICAgICAgIGlmIChpZ25vcmVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldElnbm9yZWQoaWdub3JlZCk7CiAgICAgICAgIGlmIChp
Z25vcmVkQnlEZWZhdWx0KQogICAgICAgICAgICAgdmFsdWUtPnNldElnbm9yZWRCeURlZmF1bHQo
aWdub3JlZEJ5RGVmYXVsdCk7Ci0gICAgICAgIGlmIChpbnZhbGlkICE9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlKQorICAg
ICAgICBpZiAoaW52YWxpZCAhPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6SW52YWxpZDo6RmFsc2UpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0SW52YWxpZChpbnZhbGlk
KTsKICAgICAgICAgaWYgKGhpZGRlbikKICAgICAgICAgICAgIHZhbHVlLT5zZXRIaWRkZW4oaGlk
ZGVuKTsKICAgICAgICAgaWYgKHN1cHBvcnRzTGl2ZVJlZ2lvbikgewogICAgICAgICAgICAgdmFs
dWUtPnNldExpdmVSZWdpb25BdG9taWMobGl2ZVJlZ2lvbkF0b21pYyk7CiAgICAgICAgICAgICBp
ZiAobGl2ZVJlZ2lvblJlbGV2YW50LT5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICB2YWx1ZS0+
c2V0TGl2ZVJlZ2lvblJlbGV2YW50KGxpdmVSZWdpb25SZWxldmFudCk7CisgICAgICAgICAgICAg
ICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChsaXZlUmVnaW9uUmVsZXZhbnQucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB2YWx1ZS0+c2V0TGl2ZVJlZ2lvblN0YXR1cyhsaXZl
UmVnaW9uU3RhdHVzKTsKICAgICAgICAgfQotICAgICAgICBpZiAobW91c2VFdmVudE5vZGUpCi0g
ICAgICAgICAgICB2YWx1ZS0+c2V0TW91c2VFdmVudE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKG1vdXNlRXZlbnROb2RlKSk7CisgICAgICAgIGlmIChtb3VzZUV2ZW50Tm9kZSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8gbW91c2VFdmVudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQobW91c2VFdmVudE5vZGUpKQorICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRNb3VzZUV2ZW50
Tm9kZUlkKG1vdXNlRXZlbnROb2RlSWQpOworICAgICAgICB9CiAgICAgICAgIGlmIChvd25lZE5v
ZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0T3duZWROb2RlSWRzKG93bmVkTm9kZUlkcyk7
Ci0gICAgICAgIGlmIChwYXJlbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldFBhcmVudE5v
ZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHBhcmVudE5vZGUpKTsKKyAgICAgICAgICAgIHZh
bHVlLT5zZXRPd25lZE5vZGVJZHMob3duZWROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOworICAg
ICAgICBpZiAocGFyZW50Tm9kZSkgeworICAgICAgICAgICAgaWYgKGF1dG8gcGFyZW50Tm9kZUlk
ID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+c2V0UGFyZW50Tm9kZUlkKHBhcmVudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAgICAg
aWYgKHN1cHBvcnRzUHJlc3NlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRQcmVzc2VkKHByZXNz
ZWQpOwogICAgICAgICBpZiAocmVhZG9ubHkpCkBAIC0yMTU1LDcgKzIyMzQsNyBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICBpZiAoc2VsZWN0ZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOwogICAgICAgICBpZiAoc2VsZWN0ZWRDaGlsZE5vZGVJ
ZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0U2VsZWN0ZWRDaGlsZE5vZGVJZHMoc2VsZWN0ZWRD
aGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hpbGROb2RlSWRz
KHNlbGVjdGVkQ2hpbGROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAKICAgICAg
ICAgLy8gSDEgLS0gSDYgYWx3YXlzIGhhdmUgYSBoZWFkaW5nTGV2ZWwgcHJvcGVydHkgdGhhdCBj
YW4gYmUgY29tcGxpbWVudGVkIGJ5IGEgaGllcmFyY2hpY2FsTGV2ZWwKICAgICAgICAgLy8gcHJv
cGVydHkgd2hlbiBhcmlhLWxldmVsIGlzIHNldCBvbiB0aGUgZWxlbWVudCwgaW4gd2hpY2ggY2Fz
ZSB3ZSB3YW50IHRvIHJlbWFpbiBjYWxsaW5nCkBAIC0yMjM1LDIyICsyMzE0LDIyIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENvbW1pdExvYWQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
IGlmICghZnJhbWVPd25lcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGZyYW1lT3duZXJJ
ZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZnJhbWVPd25lcik7CisgICAgYXV0byBmcmFt
ZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGZyYW1lT3duZXIpOwogICAgIGlm
ICghZnJhbWVPd25lcklkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBSZS1hZGQgZnJhbWUg
b3duZXIgZWxlbWVudCB0b2dldGhlciB3aXRoIGl0cyBuZXcgY2hpbGRyZW4uCi0gICAgaW50IHBh
cmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUoZnJhbWVP
d25lci5nZXQoKSkpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KGlubmVyUGFyZW50Tm9kZShmcmFtZU93bmVyLmdldCgpKSk7CiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmNoaWxkTm9kZVJlbW92ZWQocGFyZW50SWQsIGZyYW1lT3duZXJJZCk7CiAgICAg
dW5iaW5kKGZyYW1lT3duZXIuZ2V0KCksICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogCi0gICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBidWlsZE9iamVjdEZv
ck5vZGUoZnJhbWVPd25lci5nZXQoKSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAg
UmVmPFByb3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKGZyYW1l
T3duZXIuZ2V0KCksIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogICAgIE5vZGUqIHByZXZp
b3VzU2libGluZyA9IGlubmVyUHJldmlvdXNTaWJsaW5nKGZyYW1lT3duZXIuZ2V0KCkpOwotICAg
IGludCBwcmV2SWQgPSBwcmV2aW91c1NpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KHByZXZpb3VzU2libGluZykgOiAwOworICAgIGF1dG8gcHJldklkID0gcHJldmlvdXNTaWJsaW5n
ID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwg
V1RGTW92ZSh2YWx1ZSkpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlkZW50aWZpZXJG
b3JOb2RlKE5vZGUmIG5vZGUpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlkZW50aWZpZXJGb3JOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoJm5vZGUpOwogfQpAQCAtMjMwNyw3ICsyMzg2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogICAgIGlmICghcGFy
ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KHBhcmVudCk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2Rl
VG9JZE1hcC5nZXQocGFyZW50KTsKICAgICAvLyBSZXR1cm4gaWYgcGFyZW50IGlzIG5vdCBtYXBw
ZWQgeWV0LgogICAgIGlmICghcGFyZW50SWQpCiAgICAgICAgIHJldHVybjsKQEAgLTIzMTgsOCAr
MjM5Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKICAgICB9IGVsc2UgewogICAgICAgICAvLyBDaGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVz
dGVkIC0+IHJldHVybiB2YWx1ZSBvZiBhIG5ldyBjaGlsZC4KICAgICAgICAgTm9kZSogcHJldlNp
YmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZygmbm9kZSk7Ci0gICAgICAgIGludCBwcmV2SWQg
PSBwcmV2U2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldlNpYmxpbmcpIDog
MDsKLSAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBi
dWlsZE9iamVjdEZvck5vZGUoJm5vZGUsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOworICAg
ICAgICBhdXRvIHByZXZJZCA9IHByZXZTaWJsaW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChwcmV2U2libGluZykgOiAwOworICAgICAgICBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFs
dWUgPSBidWlsZE9iamVjdEZvck5vZGUoJm5vZGUsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXAp
OwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50
SWQsIHByZXZJZCwgV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KIH0KQEAgLTIzMzUsNyArMjQxNCw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkK
ICAgICBpZiAoIW1fZG9jdW1lbnROb2RlVG9JZE1hcC5jb250YWlucyhwYXJlbnQpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KHBhcmVudCk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQo
cGFyZW50KTsKIAogICAgIGlmICghbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhwYXJlbnRJ
ZCkpIHsKICAgICAgICAgLy8gTm8gY2hpbGRyZW4gYXJlIG1hcHBlZCB5ZXQgLT4gb25seSBub3Rp
Znkgb24gY2hhbmdlcyBvZiBoYXNDaGlsZHJlbi4KQEAgLTIzNTgsNyArMjQzNyw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgQXRvbVN0cmluZyYgbmFtCiAgICAgaWYgKHNob3VsZFN1cHByZXNzRXZlbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGludCBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRv
IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOwogICAgIGlmICghaWQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjM3MCw3ICsyNDQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9k
aWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW0KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewotICAgIGludCBpZCA9IGJvdW5kTm9kZUlkKCZlbGVt
ZW50KTsKKyAgICBhdXRvIGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOwogICAgIGlmICghaWQp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjM4Miw5ICsyNDYxLDkgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3Ry
aW5nJiBuYW0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1dGVJbnZhbGlk
YXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykKIHsKLSAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudHMpIHsKLSAgICAgICAgaW50IGlkID0gYm91bmROb2RlSWQo
ZWxlbWVudCk7CisgICAgICAgIGF1dG8gaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsKICAgICAg
ICAgaWYgKCFpZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yMzk4LDcgKzI0NzcsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFy
YWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFjdGVyRGF0YSkKIHsKLSAgICBp
bnQgaWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZjaGFyYWN0ZXJEYXRhKTsKKyAgICBh
dXRvIGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmY2hhcmFjdGVyRGF0YSk7CiAgICAg
aWYgKCFpZCkgewogICAgICAgICAvLyBQdXNoIHRleHQgbm9kZSBpZiBpdCBpcyBiZWluZyBjcmVh
dGVkLgogICAgICAgICBkaWRJbnNlcnRET01Ob2RlKGNoYXJhY3RlckRhdGEpOwpAQCAtMjQwOSw3
ICsyNDg4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVk
KENoYXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpbnQgaWQg
PSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKKyAgICBhdXRvIGlkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNDIwLDIyICsyNDk5LDIyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoRWxlbWVudCYgZWxlbWVudCkKIAogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkUHVzaFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYg
cm9vdCkKIHsKLSAgICBpbnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9z
dCk7CisgICAgYXV0byBob3N0SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsK
ICAgICBpZiAoaG9zdElkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2hhZG93Um9v
dFB1c2hlZChob3N0SWQsIGJ1aWxkT2JqZWN0Rm9yTm9kZSgmcm9vdCwgMCwgJm1fZG9jdW1lbnRO
b2RlVG9JZE1hcCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3aWxsUG9wU2hhZG93
Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQogewotICAgIGludCBob3N0SWQg
PSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKLSAgICBpbnQgcm9vdElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldCgmcm9vdCk7CisgICAgYXV0byBob3N0SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKKyAgICBhdXRvIHJvb3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJnJvb3QpOwogICAgIGlmIChob3N0SWQgJiYgcm9vdElkKQogICAgICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2hhZG93Um9vdFBvcHBlZChob3N0SWQsIHJvb3RJZCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENoYW5nZUN1c3RvbUVsZW1lbnRTdGF0
ZShFbGVtZW50JiBlbGVtZW50KQogewotICAgIGludCBlbGVtZW50SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKKyAgICBhdXRvIGVsZW1lbnRJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOwogICAgIGlmICghZWxlbWVudElkKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTI0NjIsNyArMjU0MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBz
ZXVkb0VsZW1lbnRDcmVhdGVkKFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiAgICAgaWYg
KCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVu
dE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwogICAgIGlmICghcGFyZW50SWQpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjQ3MiwxNCArMjU1MSwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
c2V1ZG9FbGVtZW50Q3JlYXRlZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBzZXVkb0VsZW1lbnQm
IHBzZXVkb0VsZW1lbnQpCiB7Ci0gICAgaW50IHBzZXVkb0VsZW1lbnRJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJnBzZXVkb0VsZW1lbnQpOworICAgIGF1dG8gcHNldWRvRWxlbWVudElk
ID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmcHNldWRvRWxlbWVudCk7CiAgICAgaWYgKCFw
c2V1ZG9FbGVtZW50SWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIGEgUHNldWRvRWxl
bWVudCBpcyBib3VuZCwgaXRzIHBhcmVudCBlbGVtZW50IG11c3QgaGF2ZSBiZWVuIGJvdW5kLgog
ICAgIEVsZW1lbnQqIHBhcmVudCA9IHBzZXVkb0VsZW1lbnQuaG9zdEVsZW1lbnQoKTsKICAgICBB
U1NFUlQocGFyZW50KTsKLSAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KHBhcmVudCk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQocGFyZW50KTsKICAgICBBU1NFUlQocGFyZW50SWQpOwogCiAgICAgdW5iaW5kKCZwc2V1ZG9F
bGVtZW50LCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKQEAgLTI0OTUsNyArMjU3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEFkZEV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmIHRh
cmdldCkKICAgICBpZiAoIW5vZGUuY29udGFpbnMobV9pbnNwZWN0ZWROb2RlLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW50IG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKKyAg
ICBhdXRvIG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKICAgICBpZiAoIW5vZGVJZCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yNTE2LDcgKzI1OTUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojp3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBB
dG9tUwogICAgIGlmICghbm9kZS5jb250YWlucyhtX2luc3BlY3RlZE5vZGUuZ2V0KCkpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgbm9kZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOworICAg
IGF1dG8gbm9kZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOwogICAgIGlmICghbm9kZUlkKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI1NjYsNyArMjY0NSw3IEBAIFJlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IEluc3BlY3RvckRPTUFnZW50OjpicmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFdmVudFRh
cmdlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6aWRG
b3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKK1Byb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXJJZCBJbnNwZWN0b3JET01BZ2VudDo6aWRGb3JFdmVudExpc3Rl
bmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKIHsKICAgICBmb3IgKGF1dG8mIGlu
c3BlY3RvckV2ZW50TGlzdGVuZXIgOiBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLnZhbHVlcygpKSB7
CiAgICAgICAgIGlmIChpbnNwZWN0b3JFdmVudExpc3RlbmVyLm1hdGNoZXModGFyZ2V0LCBldmVu
dFR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKSkKQEAgLTI2MDQsOCArMjY4Myw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6Om1lZGlhTWV0cmljc1RpbWVyRmlyZWQoKQogICAgICAgICBpZiAoaXRl
cmF0b3ItPnZhbHVlLmlzUG93ZXJFZmZpY2llbnQgIT0gaXNQb3dlckVmZmljaWVudCkgewogICAg
ICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLmlzUG93ZXJFZmZpY2llbnQgPSBpc1Bvd2VyRWZmaWNp
ZW50OwogCi0gICAgICAgICAgICBpbnQgbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZCht
ZWRpYUVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKG5vZGVJZCkgeworICAgICAgICAgICAgaWYg
KGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtZWRpYUVsZW1lbnQpKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0
b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwogICAgICAgICAgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5wb3dlckVmZmljaWVudFBsYXliYWNrU3RhdGVDaGFuZ2VkKG5vZGVJ
ZCwgdGltZXN0YW1wLCBpdGVyYXRvci0+dmFsdWUuaXNQb3dlckVmZmljaWVudCk7CiAgICAgICAg
ICAgICB9CkBAIC0yNjU5LDcgKzI3MzcsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9k
ZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBub2RlOwogfQogCi1Ob2Rl
KiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvck9iamVjdElkKGNvbnN0IFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CiAgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKQpAQCAtMjY2OCwxNSArMjc0NiwyMCBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
bm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiAgICAgcmV0dXJuIHNjcmlw
dFZhbHVlQXNOb2RlKGluamVjdGVkU2NyaXB0LmZpbmRPYmplY3RCeUlkKG9iamVjdElkKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckRP
TUFnZW50OjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRoKQogewot
ICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZvclBhdGgocGF0aCkpCi0gICAgICAgICpub2RlSWQg
PSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKLSAgICBlbHNlCi0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gcGF0aCJfczsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBpZiAoTm9kZSogbm9k
ZSA9IG5vZGVGb3JQYXRoKHBhdGgpKSB7CisgICAgICAgIGlmIChhdXRvIG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJu
IG5vZGVJZDsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4g
cGF0aCJfcyk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKQorUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlLCBjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9ICZub2RlLT5k
b2N1bWVudCgpOwogICAgIGlmIChhdXRvKiB0ZW1wbGF0ZUhvc3QgPSBkb2N1bWVudC0+dGVtcGxh
dGVEb2N1bWVudEhvc3QoKSkKQEAgLTI3MDYsOSArMjc4OSwxMSBAQCBKU0M6OkpTVmFsdWUgSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0
YXRlLCBObwogICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZSgmc3RhdGUpLCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2Rl
KHN0YXRlLCBub2RlKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEFsbG93RWRp
dGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKEVycm9yU3RyaW5nJiwgYm9vbCBhbGxvdykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBbGxvd0VkaXRp
bmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhib29sIGFsbG93KQogewogICAgIG1fYWxsb3dFZGl0aW5n
VXNlckFnZW50U2hhZG93VHJlZXMgPSBhbGxvdzsKKworICAgIHJldHVybiB7IH07CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCAzZTM3NzA3YWZlY2Y3OGY0MjE4YWE4MzAx
ZTFlYTJkNDFjNzI1MTcyLi43ZjI4NzJkZjQ5ZTBkNDBhYjAyMGNkOTg4NGRlZDAwMzA4ZjFhMmE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5oCkBAIC03NiwxNCArNzYsMTIgQEAgY2xhc3MgU2hhZG93Um9vdDsKIAogc3RydWN0
IEhpZ2hsaWdodENvbmZpZzsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNz
IEluc3BlY3RvckRPTUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVi
bGljIEluc3BlY3Rvcjo6RE9NQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JET01BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQoUGFnZUFnZW50Q29udGV4dCYs
IEluc3BlY3Rvck92ZXJsYXkqKTsKLSAgICB+SW5zcGVjdG9yRE9NQWdlbnQoKSBvdmVycmlkZTsK
KyAgICB+SW5zcGVjdG9yRE9NQWdlbnQoKTsKIAogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0
cmluZyhFeGNlcHRpb25Db2RlKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoRXhj
ZXB0aW9uJiYpOwpAQCAtMTAyLDYyICsxMDAsNjIgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIE5vZGUqKTsK
IAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gRE9NQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5n
JiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIGludCogZWxlbWVudElkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4m
IHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXREb2N1bWVudChFcnJvclN0cmluZyYsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3Qg
aW50KiBkZXB0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0
cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5n
JiwgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIG5hbWUp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nJiwgaW50IGVs
ZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZU5v
ZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE5vZGVO
YW1lKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQqIG5l
d0lkKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldE91dGVySFRNTChFcnJvclN0cmluZyYsIGludCBu
b2RlSWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0T3V0
ZXJIVE1MKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwp
IG92ZXJyaWRlOwotICAgIHZvaWQgaW5zZXJ0QWRqYWNlbnRIVE1MKEVycm9yU3RyaW5nJiwgaW50
IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U3VwcG9ydGVkRXZlbnRO
YW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBldmVudE5h
bWVzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBxdWVyeVNlbGVjdG9yKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHF1ZXJ5U2VsZWN0b3JBbGwoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGdldERvY3VtZW50KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiByZXF1ZXN0Q2hpbGROb2RlcyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCwgT3B0aW9uYWw8aW50PiYmIGRlcHRoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEF0dHJpYnV0ZVZhbHVlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QXR0cmli
dXRlc0FzVGV4dChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlQXR0cmlidXRlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gc2V0Tm9kZU5hbWUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBnZXRPdXRlckhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gc2V0T3V0ZXJIVE1MKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBT
dHJpbmcmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGlu
c2VydEFkamFjZW50SFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldE5vZGVWYWx1ZShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gZ2V0U3VwcG9ydGVk
RXZlbnROYW1lcygpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIHZvaWQgZ2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RGF0YUJp
bmRpbmc+PiYgZGF0YUFycmF5KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFzc29jaWF0ZWREYXRh
Rm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIE9wdGlvbmFsPFN0cmluZz4mIGFzc29j
aWF0ZWREYXRhKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRp
bmc+Pj4gZ2V0RGF0YUJpbmRpbmdzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdl
dEFzc29jaWF0ZWREYXRhRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7
CiAjZW5kaWYKLSAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RXZlbnRMaXN0ZW5lcj4+JiBsaXN0ZW5lcnNBcnJheSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklk
LCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRGb3JFdmVu
dExpc3RlbmVyKEVycm9yU3RyaW5nJiwgaW50IGV2ZW50TGlzdGVuZXJJZCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnRGb3JFdmVu
dExpc3RlbmVyKEVycm9yU3RyaW5nJiwgaW50IGV2ZW50TGlzdGVuZXJJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4mIGF4UHJvcGVydGllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtU2Vh
cmNoKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgSlNPTjo6QXJyYXkq
IG5vZGVJZHMsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIFN0cmluZyogc2VhcmNoSWQsIGlu
dCogcmVzdWx0Q291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0b0lu
ZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
Y2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBdHRy
aWJ1dGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4mIHJlc3VsdCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50
TGlzdGVuZXI+Pj4gZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEV2ZW50TGlzdGVuZXJEaXNhYmxlZChJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXJJZCwgYm9vbCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25z
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUJy
ZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcklkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPj4gZ2V0QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
U3RyaW5nIC8qIHNlYXJjaElkICovLCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBwZXJmb3JtU2Vh
cmNoKGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheT4mJiBub2RlSWRzLCBP
cHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+Pj4gZ2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBkaXNjYXJkU2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcmIHNlYXJjaElk
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+Pj4gZ2V0QXR0cmlidXRlcyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChF
cnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRD
b25maWcpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
aGlnaGxpZ2h0Q29uZmlnKTsKICNlbHNlCi0gICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
RXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0
Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEluc3BlY3RNb2RlRW5hYmxlZChib29s
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8Ym9vbD4m
JiBzaG93UnVsZXJzKTsKICNlbmRpZgotICAgIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGludCogbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBj
b2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBh
Z2VDb29yZGluYXRlcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRRdWFkKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIHF1YWQsIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3Is
IGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJp
bmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodENvbmZpZywgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKSBvdmVycmlkZTsKLSAgICB2b2lk
IGhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdo
dENvbmZpZywgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpIG92ZXJy
aWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZUxpc3QoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSYgbm9kZUlkcywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRDb25maWcpIG92
ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVj
dCogb3V0bGluZUNvbG9yKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdmVUbyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGludCB0YXJnZXROb2RlSWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBp
bnQqIG5ld05vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmRvKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZWRvKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
YXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9jdXMo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEluc3BlY3Rl
ZE5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEFs
bG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKEVycm9yU3RyaW5nJiwgYm9vbCBhbGxvdykg
ZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZD4gcmVxdWVzdE5vZGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBwdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZGVIaWdobGlnaHQoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3Is
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVz
ZVBhZ2VDb29yZGluYXRlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBoaWdobGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
T3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0U2VsZWN0b3IoUmVmPEpTT046Ok9i
amVjdD4mJiBoaWdobGlnaHRDb25maWcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodE5vZGUoUmVmPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiYmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3RJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gaGlnaGxpZ2h0Tm9kZUxpc3QoUmVmPEpTT046OkFycmF5PiYmIG5vZGVJZHMsIFJlZjxKU09O
OjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodEZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gbW92ZVRv
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZD4mJiBpbnNlcnRCZWZvcmVOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gdW5kbygpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVkbygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbWFya1VuZG9hYmxlU3RhdGUoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvY3VzKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldEluc3BlY3RlZE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QWxsb3dF
ZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoYm9vbCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24KLSAgICBpbnQgaWRlbnRpZmllckZvck5vZGUoTm9kZSYpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGlkZW50aWZpZXJGb3JOb2RlKE5vZGUmKTsKICAg
ICB2b2lkIGFkZEV2ZW50TGlzdGVuZXJzVG9Ob2RlKE5vZGUmKTsKICAgICB2b2lkIGRpZEluc2Vy
dERPTU5vZGUoTm9kZSYpOwogICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlJik7CkBAIC0x
ODUsMTIgKzE4MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQXR0cmlidXRlSW52YWxp
ZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpOwogCi0gICAgaW50IHB1c2hO
b2RlVG9Gcm9udGVuZChOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0
cmluZyYsIGludCBkb2N1bWVudE5vZGVJZCwgTm9kZSopOwotICAgIGludCBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKE5vZGUqKTsKLSAgICBpbnQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0
cmluZywgTm9kZSopOwotICAgIE5vZGUqIG5vZGVGb3JJZChpbnQgbm9kZUlkKTsKLSAgICBpbnQg
Ym91bmROb2RlSWQoY29uc3QgTm9kZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIHB1c2hOb2RlVG9Gcm9udGVuZChOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVUb0Zyb250ZW5kKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgZG9jdW1lbnROb2Rl
SWQsIE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nLCBOb2RlKik7CisgICAgTm9kZSogbm9kZUZvcklkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBib3VuZE5v
ZGVJZChjb25zdCBOb2RlKik7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiByZXNvbHZlTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCk7CiAgICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzKCk7CkBAIC0yMDIsMTIgKzIwMCwx
MiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gZG9jdW1lbnRzKCk7CiAgICAgdm9p
ZCByZXNldCgpOwogCi0gICAgTm9kZSogYXNzZXJ0Tm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQpOwotICAgIEVsZW1lbnQqIGFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
KTsKLSAgICBEb2N1bWVudCogYXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
KTsKKyAgICBOb2RlKiBhc3NlcnROb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEVsZW1lbnQqIGFzc2Vy
dEVsZW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgRG9jdW1lbnQqIGFzc2VydERvY3VtZW50KEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQpOwogCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gYnJlYWtwb2ludEZvckV2ZW50
TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50
TGlzdGVuZXImLCBib29sIGNhcHR1cmUpOwotICAgIGludCBpZEZvckV2ZW50TGlzdGVuZXIoRXZl
bnRUYXJnZXQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBi
b29sIGNhcHR1cmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cklkIGlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7CiAKIHByaXZhdGU6CiAjaWYg
RU5BQkxFKFZJREVPKQpAQCAtMjE1LDMzICsyMTMsMzMgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAg
ICAgdm9pZCBoaWdobGlnaHRNb3VzZWRPdmVyTm9kZSgpOwotICAgIHZvaWQgc2V0U2VhcmNoaW5n
Rm9yTm9kZShFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGJvb2wgc2hvd1J1bGVycyk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhp
Z2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAg
ICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmln
LCBib29sIHNob3dSdWxlcnMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+
IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCk7CiAKICAgICAvLyBOb2RlLXJlbGF0ZWQgbWV0aG9kcy4KLSAgICB0eXBlZGVmIEhhc2hN
YXA8UmVmUHRyPE5vZGU+LCBpbnQ+IE5vZGVUb0lkTWFwOwotICAgIGludCBiaW5kKE5vZGUqLCBO
b2RlVG9JZE1hcCopOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBOb2RlVG9JZE1hcDsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZCBiaW5kKE5vZGUqLCBOb2RlVG9JZE1hcCopOwogICAgIHZvaWQg
dW5iaW5kKE5vZGUqLCBOb2RlVG9JZE1hcCopOwogCi0gICAgTm9kZSogYXNzZXJ0RWRpdGFibGVO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRWxlbWVudCogYXNzZXJ0RWRpdGFi
bGVFbGVtZW50KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7CisgICAgTm9kZSogYXNzZXJ0RWRp
dGFibGVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEVsZW1lbnQqIGFzc2VydEVkaXRhYmxlRWxlbWVu
dChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkKTsKIAotICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBu
b2RlSWQsIGludCBkZXB0aCA9IDEpOworICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBpbnQgZGVwdGggPSAxKTsKIAogICAg
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IGJ1aWxkT2JqZWN0Rm9yTm9kZShO
b2RlKiwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCopOwogICAgIFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50Kik7CiAgICAgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gYnVpbGRBcnJh
eUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9J
ZE1hcCogbm9kZXNNYXApOwogICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4+IGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhjb25zdCBFbGVt
ZW50JiwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBpbnQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0cjxK
U0M6OkJyZWFrcG9pbnQ+Jik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXMoTm9kZSopOwotICAgIHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENv
cmVPYmplY3QmLCBKU09OOjpBcnJheU9mPGludD4mKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29u
c3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4m
KTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4gYnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlJik7CisgICAg
dm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYsIEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Jik7CiAgICAgCiAgICAgTm9k
ZSogbm9kZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICBOb2RlKiBub2RlRm9yT2Jq
ZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCk7CisgICAgTm9kZSogbm9kZUZvck9iamVjdElk
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CiAK
ICAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygpOwogCi0gICAgdm9pZCBpbm5lckhpZ2hsaWdodFF1
YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4sIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3Is
IGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpOworICAgIHZvaWQgaW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxG
bG9hdFF1YWQ+LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMp
OwogCiAgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkRPTUZyb250ZW5kRGlz
cGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CkBAIC0yNTEsMTAgKzI0OSwxMCBAQCBwcml2
YXRlOgogICAgIE5vZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsKICAgICAvLyBPd25z
IG5vZGUgbWFwcGluZ3MgZm9yIGRhbmdsaW5nIG5vZGVzLgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8Tm9kZVRvSWRNYXA+PiBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzOwotICAgIEhhc2hNYXA8
aW50LCBOb2RlKj4gbV9pZFRvTm9kZTsKLSAgICBIYXNoTWFwPGludCwgTm9kZVRvSWRNYXAqPiBt
X2lkVG9Ob2Rlc01hcDsKLSAgICBIYXNoU2V0PGludD4gbV9jaGlsZHJlblJlcXVlc3RlZDsKLSAg
ICBpbnQgbV9sYXN0Tm9kZUlkIHsgMSB9OworICAgIEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQsIE5vZGUqPiBtX2lkVG9Ob2RlOworICAgIEhhc2hNYXA8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7Cisg
ICAgSGFzaFNldDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gbV9jaGlsZHJlblJl
cXVlc3RlZDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBtX2xhc3ROb2Rl
SWQgeyAxIH07CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+PiBTZWFyY2hSZXN1bHRzOwogICAg
IFNlYXJjaFJlc3VsdHMgbV9zZWFyY2hSZXN1bHRzOwpAQCAtMjg1LDcgKzI4Myw3IEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogICAgIHN0cnVjdCBJbnNwZWN0b3JFdmVudExpc3RlbmVyIHsKLSAgICAg
ICAgaW50IGlkZW50aWZpZXIgeyAxIH07CisgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIgeyAxIH07CiAgICAgICAgIFJlZlB0cjxFdmVu
dFRhcmdldD4gZXZlbnRUYXJnZXQ7CiAgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyOwogICAgICAgICBBdG9tU3RyaW5nIGV2ZW50VHlwZTsKQEAgLTI5NSw3ICsyOTMs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgIEluc3BlY3RvckV2ZW50TGlzdGVuZXIoKSB7IH0KIAot
ICAgICAgICBJbnNwZWN0b3JFdmVudExpc3RlbmVyKGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdl
dCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5l
ciwgYm9vbCBjYXB0dXJlKQorICAgICAgICBJbnNwZWN0b3JFdmVudExpc3RlbmVyKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVy
LCBib29sIGNhcHR1cmUpCiAgICAgICAgICAgICA6IGlkZW50aWZpZXIoaWRlbnRpZmllcikKICAg
ICAgICAgICAgICwgZXZlbnRUYXJnZXQoJnRhcmdldCkKICAgICAgICAgICAgICwgZXZlbnRMaXN0
ZW5lcigmbGlzdGVuZXIpCkBAIC0zMjEsOCArMzE5LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgRXZlbnRGaXJlZENhbGxiYWNrOwogCiAgICAgSGFzaFNldDxjb25zdCBFdmVudCo+IG1f
ZGlzcGF0Y2hlZEV2ZW50czsKLSAgICBIYXNoTWFwPGludCwgSW5zcGVjdG9yRXZlbnRMaXN0ZW5l
cj4gbV9ldmVudExpc3RlbmVyRW50cmllczsKLSAgICBpbnQgbV9sYXN0RXZlbnRMaXN0ZW5lcklk
IHsgMSB9OworICAgIEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVySWQsIEluc3BlY3RvckV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lckVudHJpZXM7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgbV9sYXN0RXZlbnRM
aXN0ZW5lcklkIHsgMSB9OwogCiAgICAgYm9vbCBtX3NlYXJjaGluZ0Zvck5vZGUgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9zdXBwcmVzc0F0dHJpYnV0ZU1vZGlmaWVkRXZlbnQgeyBmYWxzZSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMDc5YTExNjg2ZTQ5OGI4NDc5OTU1OWNmM2Nk
OGFmMmY3YzA5MTgxNy4uYzMyZTVhMzkxNGU3OWYzMGJjMTRlNjhkZDZjZmJkMzFiMDA1NDlkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC0xMjgsMTA5ICsxMjgsOTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoKQogICAgICAgICBt
X3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQtPnJlc2V0SGl0Q291bnQoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlU3RyaW5nLCBjb25z
dCBTdHJpbmcqIGV2ZW50TmFtZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OnNldEV2ZW50QnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2lu
dFR5cGUgYnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKGJyZWFrcG9pbnRUeXBlU3RyaW5nLmlz
RW1wdHkoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJicmVha3BvaW50VHlwZSBpcyBlbXB0
eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CiAKLSAgICBhdXRvIGJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlPihicmVha3BvaW50
VHlwZVN0cmluZyk7Ci0gICAgaWYgKCFicmVha3BvaW50VHlwZSkgewotICAgICAgICBlcnJvclN0
cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2ludFR5cGU6ICJfcywgYnJlYWtwb2lu
dFR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBicmVha3Bv
aW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
LSAgICBpZiAoZXZlbnROYW1lICYmICFldmVudE5hbWUtPmlzRW1wdHkoKSkgewotICAgICAgICBp
ZiAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmICgh
bV9saXN0ZW5lckJyZWFrcG9pbnRzLmFkZCgqZXZlbnROYW1lLCBicmVha3BvaW50LnJlbGVhc2VO
b25OdWxsKCkpKQotICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgd2l0
aCBldmVudE5hbWUgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47CisgICAg
aWYgKCFldmVudE5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9
PSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7
CisgICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJCcmVha3BvaW50cy5hZGQoZXZlbnROYW1lLCBi
cmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQnJlYWtwb2ludCB3aXRoIGV2ZW50TmFtZSBhbHJlYWR5IGV4aXN0cyJfcyk7
CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiVW5leHBlY3RlZCBldmVudE5hbWUiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIGV2ZW50TmFtZSJfcyk7CiAgICAgfQog
Ci0gICAgc3dpdGNoIChicmVha3BvaW50VHlwZS52YWx1ZSgpKSB7Ci0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6QW5pbWF0aW9u
RnJhbWU6Ci0gICAgICAgIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywg
V1RGTW92ZShicmVha3BvaW50KSk7Ci0gICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAoYnJlYWtw
b2ludFR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6CisgICAgICAgIGlmICghc2V0QW5pbWF0aW9uRnJhbWVC
cmVha3BvaW50KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGJyZWFrcG9pbnQpKSkKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFr
cG9pbnRUeXBlOjpJbnRlcnZhbDoKLSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxJbnRlcnZhbHNC
cmVha3BvaW50KQotICAgICAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCA9
IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkJyZWFrcG9pbnQgZm9yIEludGVydmFsIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50
VHlwZTo6SW50ZXJ2YWw6CisgICAgICAgIGlmIChtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3Bv
aW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBJ
bnRlcnZhbCBhbHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbEludGVydmFs
c0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6TGlzdGVuZXI6Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJl
YWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQgPSBX
VEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBMaXN0ZW5lciBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5
cGU6Okxpc3RlbmVyOgorICAgICAgICBpZiAobV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2lu
dCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgTGlz
dGVuZXIgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3BhdXNlT25BbGxMaXN0ZW5lcnNC
cmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2lu
dFR5cGU6OlRpbWVvdXQ6Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3Bv
aW50KQotICAgICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50ID0gV1RGTW92
ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgVGltZW91dCBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OlRp
bWVvdXQ6CisgICAgICAgIGlmIChtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXQgYWxy
ZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQg
PSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1
cHBvcnRlZCIpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUV2
ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludFR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyogZXZlbnROYW1lKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRC
cmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSBicmVh
a3BvaW50VHlwZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgaWYgKGJyZWFrcG9p
bnRUeXBlU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJicmVha3Bv
aW50VHlwZSBpcyBlbXB0eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBhdXRvIGJyZWFrcG9pbnRUeXBlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRU
eXBlPihicmVha3BvaW50VHlwZVN0cmluZyk7Ci0gICAgaWYgKCFicmVha3BvaW50VHlwZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2ludFR5cGU6
ICJfcywgYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGV2ZW50TmFtZSAmJiAhZXZlbnROYW1lLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYg
KGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1f
bGlzdGVuZXJCcmVha3BvaW50cy5yZW1vdmUoKmV2ZW50TmFtZSkpCi0gICAgICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnROYW1lIG1pc3NpbmciX3M7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCFldmVudE5hbWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9PSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7CisgICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJC
cmVha3BvaW50cy5yZW1vdmUoZXZlbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TmFtZSBtaXNzaW5nIl9zKTsK
KyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmV4cGVjdGVkIGV2ZW50TmFtZSJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zKTsKICAgICB9CiAK
LSAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRpb25G
cmFtZToKLSAgICAgICAgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7CisgICAgc3dpdGNoIChicmVha3BvaW50VHlwZSkgewor
ICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmlt
YXRpb25GcmFtZToKKyAgICAgICAgaWYgKCFzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoZXJy
b3JTdHJpbmcsIG51bGxwdHIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgorICAg
IGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpJbnRlcnZh
bDoKICAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50KQotICAgICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWxzIG1pc3NpbmciX3M7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIEludGVy
dmFscyBtaXNzaW5nIl9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2lu
dCA9IG51bGxwdHI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlw
ZTo6TGlzdGVuZXI6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6Okxpc3RlbmVyOgogICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbExpc3RlbmVyc0Jy
ZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBMaXN0
ZW5lcnMgbWlzc2luZyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJl
YWtwb2ludCBmb3IgTGlzdGVuZXJzIG1pc3NpbmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxM
aXN0ZW5lcnNCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpF
dmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgogICAgICAgICBpZiAoIW1fcGF1c2VP
bkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIFRpbWVvdXRzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXRzIG1pc3NpbmciX3MpOwogICAgICAgICBt
X3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsSGFuZGxlRXZlbnQoRXZlbnQmIGV2ZW50LCBj
b25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIpCkBA
IC0zMjksNDUgKzMxNCw1MCBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpZEZp
cmVUaW1lcihib29sIG9uZVNob3QpCiAgICAgbV9kZWJ1Z2dlckFnZW50LT5jYW5jZWxQYXVzZUZv
clNwZWNpYWxCcmVha3BvaW50KCpicmVha3BvaW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpzZXRVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogewotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9h
ZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgYXV0byBi
cmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJv
bVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtw
b2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFtX3Bh
dXNlT25BbGxVUkxzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbFVSTHNCcmVh
a3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFsbFVSTHNCcmVha3BvaW50
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBhbGwg
VVJMcyBhbHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbFVSTHNCcmVha3Bv
aW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVnZXgpIHsKKyAgICBpZiAo
aXNSZWdleCAmJiAqaXNSZWdleCkgewogICAgICAgICBpZiAoIW1fdXJsUmVnZXhCcmVha3BvaW50
cy5hZGQodXJsLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXggYWxyZWFkeSBleGlzdHMiX3M7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVu
IHJlZ2V4IGFscmVhZHkgZXhpc3RzIl9zKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1f
dXJsVGV4dEJyZWFrcG9pbnRzLmFkZCh1cmwsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkp
Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBVUkwgYWxy
ZWFkeSBleGlzdHMiX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIFVSTCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAgICAgfQorCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVVUkxC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZVVSTEJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkKIHsKICAgICBpZiAodXJsLmlzRW1w
dHkoKSkgewogICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbFVSTHNCcmVha3BvaW50KQotICAgICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgbWlzc2luZyJfczsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgYWxsIFVS
THMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbFVSTHNCcmVha3BvaW50ID0gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IGlmIChvcHRpb25hbElzUmVnZXggJiYgKm9wdGlvbmFsSXNSZWdleCkgeworICAgIGlmIChpc1Jl
Z2V4ICYmICppc1JlZ2V4KSB7CiAgICAgICAgIGlmICghbV91cmxSZWdleEJyZWFrcG9pbnRzLnJl
bW92ZSh1cmwpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBicmVha3BvaW50
IGZvciBnaXZlbiByZWdleCJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
TWlzc2luZyBicmVha3BvaW50IGZvciBnaXZlbiByZWdleCJfcyk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFtX3VybFRleHRCcmVha3BvaW50cy5yZW1vdmUodXJsKSkKLSAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gVVJMIl9zOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGJyZWFrcG9pbnQgZm9yIGdp
dmVuIFVSTCJfcyk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpicmVha09uVVJMSWZOZWVkZWQoY29uc3QgU3RyaW5nJiB1cmws
IFVSTEJyZWFrcG9pbnRTb3VyY2Ugc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaAppbmRleCA0
ZWMwZjA4YzliNWExYzI3ZGQ0M2VhODU0MDRlY2U2MmM5MzZmMWZhLi44OTYwOWVjZmMwZDg3OTY3
NDFkNDU1YTAzZTdkYWMwOTFlOGRjYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaApAQCAtNTAs
OCArNTAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFdmVudDsKIGNsYXNzIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xh
c3MgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2Us
IHB1YmxpYyBJbnNwZWN0b3I6OkRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NSwxMCArNjMsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0VVJMQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBpc1JlZ2V4LCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlVVJMQnJlYWtwb2ludChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAg
ICB2b2lkIHNldEV2ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyogZXZlbnROYW1lLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlRXZlbnRCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlwZSwgY29uc3QgU3RyaW5nKiBldmVudE5h
bWUpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0VVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8Ym9vbD4mJiBpc1Jl
Z2V4LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlVVJMQnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEV2ZW50QnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSwgY29u
c3QgU3RyaW5nJiBldmVudE5hbWUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmlu
YWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVF
dmVudEJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJl
YWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKSBmaW5hbDsKIAogICAgIC8vIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyCiAgICAgdm9pZCBkZWJ1Z2dlcldhc0VuYWJs
ZWQoKSBvdmVycmlkZTsKQEAgLTg4LDcgKzg2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBlbmFibGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSgpOwogCi0gICAgdmlydHVh
bCB2b2lkIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYsIFJlZlB0cjxK
U0M6OkJyZWFrcG9pbnQ+JiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0QW5pbWF0aW9uRnJh
bWVCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpT
Qzo6QnJlYWtwb2ludD4mJikgPSAwOwogCiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KiBtX2RlYnVnZ2VyQWdlbnQgeyBudWxscHRyIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcAppbmRleCBlNTkxZTkxNjlkZjMwNDU0NTYyMGI1NDAzMmI2MmZhMmJhZGVjYjZlLi4wM2E3
ZmQwOGQyMDU3YzIyY2FjZGNmODUwNThmMWU0ZGYwNGRkN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQuY3BwCkBAIC03MCw0MSArNzAsMzkgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm8KIAogdm9p
ZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5h
YmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdl
QWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTVN0b3JhZ2UgZG9t
YWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdlQWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTVN0b3JhZ2UgZG9tYWluIGFscmVhZHkg
ZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZERPTVN0
b3JhZ2VBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJs
ZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFnZUFn
ZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET01TdG9yYWdlIGRvbWFp
biBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICht
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpICE9IHRoaXMpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBk
aXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZERPTVN0
b3JhZ2VBZ2VudChudWxscHRyKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4mIGl0ZW1zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTVN0b3JhZ2U6Okl0ZW0+Pj4gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4m
JiBzdG9yYWdlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEg
PSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzdG9yYWdl
IGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmlu
ZywgV1RGTW92ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc3Rv
cmFnZUl0ZW1zID0gSlNPTjo6QXJyYXlPZjxKU09OOjpBcnJheU9mPFN0cmluZz4+OjpjcmVhdGUo
KTsKLQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlQXJlYS0+bGVuZ3RoKCk7
ICsraSkgewogICAgICAgICBTdHJpbmcga2V5ID0gc3RvcmFnZUFyZWEtPmtleShpKTsKICAgICAg
ICAgU3RyaW5nIHZhbHVlID0gc3RvcmFnZUFyZWEtPml0ZW0oa2V5KTsKQEAgLTExNCw0NyArMTEy
LDUyIEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgICAgIGVudHJ5LT5hZGRJdGVtKHZh
bHVlKTsKICAgICAgICAgc3RvcmFnZUl0ZW1zLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAg
ICB9Ci0KLSAgICBpdGVtcyA9IFdURk1vdmUoc3RvcmFnZUl0ZW1zKTsKKyAgICByZXR1cm4gV1RG
TW92ZShzdG9yYWdlSXRlbXMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnNldERPTVN0b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFn
ZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9yIGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0
b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBp
ZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbiA9IGZhbHNlOwogICAgIHN0b3JhZ2VBcmVh
LT5zZXRJdGVtKGZyYW1lLCBrZXksIHZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CiAgICAgaWYgKHF1
b3RhRXhjZXB0aW9uKQotICAgICAgICBlcnJvclN0cmluZyA9IERPTUV4Y2VwdGlvbjo6bmFtZShR
dW90YUV4Y2VlZGVkRXJyb3IpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRE9NRXhj
ZXB0aW9uOjpuYW1lKFF1b3RhRXhjZWVkZWRFcnJvcikpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNv
bnN0IFN0cmluZyYga2V5KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYm
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0cjxTdG9yYWdl
QXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJ
ZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYg
KCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKIAogICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGZyYW1lLCBrZXkpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRE9NU3Rv
cmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBz
dG9yYWdlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmNsZWFyRE9NU3RvcmFnZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFn
ZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZy
YW1lKiBmcmFtZTsKLSAgICBhdXRvIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9y
U3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlm
ICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoZnJhbWUpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAogU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2Um
IHN0b3JhZ2UpCkBAIC0xNjgsOSArMTcxLDkgQEAgU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6c3RvcmFnZUlkKFN0b3JhZ2UmIHN0b3JhZ2UpCiAgICAgcmV0dXJuIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKHNlY3VyaXR5T3JpZ2luLnB0cigpLCBpc0xvY2FsU3Rv
cmFnZSktPnRvSlNPTlN0cmluZygpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJ
ZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2UpCitS
ZWY8UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29sIGlzTG9j
YWxTdG9yYWdlKQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpET01TdG9yYWdlOjpT
dG9yYWdlSWQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9y
aWdpbi0+dG9SYXdTdHJpbmcoKSkKICAgICAgICAgLnNldElzTG9jYWxTdG9yYWdlKGlzTG9jYWxT
dG9yYWdlKQogICAgICAgICAucmVsZWFzZSgpOwpAQCAtMTc4LDI4ICsxODEsMjggQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpzdG8KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZERp
c3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IGlkID0gSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4sIHN0b3JhZ2VUeXBlID09IFN0b3JhZ2VU
eXBlOjpMb2NhbCk7CisgICAgYXV0byBpZCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3Rv
cmFnZUlkKHNlY3VyaXR5T3JpZ2luLCBzdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6TG9jYWwp
OwogCiAgICAgaWYgKGtleS5pc051bGwoKSkKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQoaWQpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZG9tU3RvcmFnZUl0ZW1zQ2xlYXJlZChXVEZNb3ZlKGlkKSk7CiAgICAgZWxzZSBpZiAobmV3
VmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdl
SXRlbVJlbW92ZWQoaWQsIGtleSk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21T
dG9yYWdlSXRlbVJlbW92ZWQoV1RGTW92ZShpZCksIGtleSk7CiAgICAgZWxzZSBpZiAob2xkVmFs
dWUuaXNOdWxsKCkpCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRl
bUFkZGVkKGlkLCBrZXksIG5ld1ZhbHVlKTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmRvbVN0b3JhZ2VJdGVtQWRkZWQoV1RGTW92ZShpZCksIGtleSwgbmV3VmFsdWUpOwogICAgIGVs
c2UKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChp
ZCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKFdURk1vdmUoaWQpLCBrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSk7CiB9CiAKLVJlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFtZSkKK1JlZlB0cjxTdG9yYWdlQXJl
YT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3RvcmFnZUFyZWEoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIEZy
YW1lKiYgdGFyZ2V0RnJhbWUpCiB7Ci0gICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luOwotICAgIGlm
ICghc3RvcmFnZUlkLmdldFN0cmluZygic2VjdXJpdHlPcmlnaW4iX3MsIHNlY3VyaXR5T3JpZ2lu
KSkgeworICAgIGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBzdG9yYWdlSWQtPmdldFN0cmluZyhQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpzZWN1cml0eU9yaWdpbktleSk7CisgICAgaWYg
KCFzZWN1cml0eU9yaWdpbikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNlY3Vy
aXR5T3JpZ2luIGluIGdpdmVuIHN0b3JhZ2VJZCI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSBmYWxzZTsKLSAgICBpZiAoIXN0b3Jh
Z2VJZC5nZXRCb29sZWFuKCJpc0xvY2FsU3RvcmFnZSJfcywgaXNMb2NhbFN0b3JhZ2UpKSB7Cisg
ICAgYXV0byBpc0xvY2FsU3RvcmFnZSA9IHN0b3JhZ2VJZC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6
RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjppc0xvY2FsU3RvcmFnZUtleSk7CisgICAgaWYgKCFpc0xv
Y2FsU3RvcmFnZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGlzTG9jYWxTdG9y
YWdlIGluIGdpdmVuIHN0b3JhZ2VJZCI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
QEAgLTIxMCw3ICsyMTMsNyBAQCBSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvcgogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoIWlzTG9jYWxTdG9yYWdlKQorICAgIGlmICgh
KmlzTG9jYWxTdG9yYWdlKQogICAgICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLnNlc3Npb25T
dG9yYWdlKCktPnN0b3JhZ2VBcmVhKHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLmRhdGEoKSk7CiAgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS5zdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIoKS5sb2NhbFN0b3JhZ2VBcmVhKCp0YXJnZXRGcmFtZS0+ZG9jdW1lbnQoKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRleCBkZGJiNWQ1MzQ3ZjNiZWFiZTNjZmFiMjAxZDY4
MzhjODk2ZDIxZTM5Li4zMzg2Y2I4NzlmMTE3OGMxYjk2MzU3NzVjOWEwZTg2NGY1Yjk0YzUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTQ1LDM2ICs0NSwzNCBAQCBjbGFzcyBQYWdlOwogY2xh
c3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTdG9yYWdlOwogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50IGZpbmFsIDogcHVibGlj
IEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RE9NU3RvcmFnZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91
dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAg
IC8vIERPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEpTT046OkFycmF5
T2Y8U3RyaW5nPj4+JiBpdGVtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRET01TdG9yYWdlSXRl
bShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVE
T01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlk
LCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhckRPTVN0b3JhZ2VJ
dGVtcyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkKSBvdmVycmlk
ZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6SXRlbT4+PiBnZXRET01TdG9yYWdl
SXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RE9NU3RvcmFnZUl0ZW0oUmVmPEpTT046Ok9i
amVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURP
TVN0b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcm
IGtleSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVh
ckRPTVN0b3JhZ2VJdGVtcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCk7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZERpc3BhdGNoRE9NU3RvcmFn
ZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBT
dHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgIC8v
IENvbW1hbmRMaW5lQVBJCiAgICAgc3RhdGljIFN0cmluZyBzdG9yYWdlSWQoU3RvcmFnZSYpOwot
ICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFn
ZUlkPiBzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qLCBib29sIGlzTG9jYWxTdG9yYWdlKTsKKyAg
ICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4g
c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBpc0xvY2FsU3RvcmFnZSk7CiAKIHByaXZh
dGU6Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcm
LCBjb25zdCBKU09OOjpPYmplY3QmLCBGcmFtZSomKTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+
IGZpbmRTdG9yYWdlQXJlYShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZjxK
U09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBGcmFtZSomKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNw
YXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDRiOWE1NWRl
NTU3YmU5NDY3MTZmNWUwMjExMTQ0MzcxMTgyZDZkNTIuLjI5YzExNGYyNjc2ODNkMjUwNjUyN2Fk
N2NmOWQ1N2ZiYjFlOTJmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcApAQCAtNTksNyArNTksNyBA
QCBuYW1lc3BhY2UgewogCiB2b2lkIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKEV4ZWN1dGVTUUxD
YWxsYmFjayYgcmVxdWVzdENhbGxiYWNrLCBTUUxFcnJvciYgZXJyb3IpCiB7Ci0gICAgYXV0byBl
cnJvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3JlYXRl
KCkKKyAgICBhdXRvIGVycm9yT2JqZWN0ID0gUHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3Jl
YXRlKCkKICAgICAgICAgLnNldE1lc3NhZ2UoZXJyb3IubWVzc2FnZUlzb2xhdGVkQ29weSgpKQog
ICAgICAgICAuc2V0Q29kZShlcnJvci5jb2RlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0y
MzAsNTEgKzIzMCw0OCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dAogCiB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2Fi
bGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSA9PSB0aGlzKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiRGF0YWJhc2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZERhdGFiYXNlQWdlbnQodGhpcyk7CiAKICAgICBm
b3IgKGF1dG8mIGRhdGFiYXNlIDogRGF0YWJhc2VUcmFja2VyOjpzaW5nbGV0b24oKS5vcGVuRGF0
YWJhc2VzKCkpCiAgICAgICAgIGRpZE9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0
YWJhc2VBZ2VudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRGF0
YWJhc2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWREYXRhYmFzZUFnZW50KG51bGxwdHIpOwogCiAgICAgbV9yZXNvdXJj
ZXMuY2xlYXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYg
bmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
Pj4gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKGNvbnN0IFBy
b3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCYgZGF0YWJhc2VJZCkKIHsKLSAgICBpZiAobV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOworICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFi
YXNlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRhdGFi
YXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCisgICAgYXV0byBuYW1lcyA9IEpTT046
OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgaWYgKGF1dG8qIGRhdGFiYXNlID0gZGF0
YWJhc2VGb3JJZChkYXRhYmFzZUlkKSkgewogICAgICAgICBmb3IgKGF1dG8mIHRhYmxlTmFtZSA6
IGRhdGFiYXNlLT50YWJsZU5hbWVzKCkpCiAgICAgICAgICAgICBuYW1lcy0+YWRkSXRlbSh0YWJs
ZU5hbWUpOwogICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShuYW1lcyk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKGNvbnN0IFBy
b3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCYgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpICE9IHRoaXMp
IHsKICAgICAgICAgcmVxdWVzdENhbGxiYWNrLT5zZW5kRmFpbHVyZSgiRGF0YWJhc2UgZG9tYWlu
IG11c3QgYmUgZW5hYmxlZCJfcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmluZGV4IDQzMDUwMzE5MWNkY2I5
ODc5ZmRiNjU1MTM5YzE0YmI3N2E3Mzc0MmYuLjAxY2VmNDM5YjRhYzZkYWQyZTQxMjZiNTQzNDE2
YzUzOTQzMmNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC00MSwyNCArNDEsMjIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJ
bnNwZWN0b3I6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JEYXRhYmFzZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KFdlYkFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JEYXRhYmFzZUFnZW50KCkgb3ZlcnJpZGU7CisgICAg
fkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQot
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFz
b24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7Cisg
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pOwogCiAgICAgLy8gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAg
ICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgbmFtZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2Fs
bGJhY2s+JiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkJik7CisgICAgdm9pZCBl
eGVjdXRlU1FMKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlk
JiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJik7CiAKICAg
ICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZENvbW1pdExvYWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggZmY4ZjMwZjQwM2Y4NWM3ZGRiZTMxYjEwZTAzY2Vm
NWZjZGY3ZjAwNi4uYTE0NWUwNGViMjE4ZGU4YTQyZmY4OTgyOThiOGJlYTY4MmM0ZWRlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTcwLDI2ICs3MCw2IEBACiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgog
Ci11c2luZyBKU09OOjpBcnJheU9mOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhl
ZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29s
OjpJbmRleGVkREI6OkRhdGFFbnRyeTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5OwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRo
OwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTsKLXVzaW5n
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU7Ci11c2luZyBJbnNw
ZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg7Ci0KLXR5cGVkZWYg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIFJlcXVlc3RDYWxsYmFj
azsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFj
azsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrIFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrOwotdHlwZWRl
ZiBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERh
dGFDYWxsYmFjayBSZXF1ZXN0RGF0YUNhbGxiYWNrOwotdHlwZWRlZiBJbnNwZWN0b3I6OkluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrIENs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjazsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdXNpbmcgRXJyb3JTdHJpbmdPciA9IEV4cGVjdGVkPFQs
IEVycm9yU3RyaW5nPjsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwpAQCAtMTAzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkV4ZWN1
dGFibGVXaXRoRGF0YWJhc2UoKSA9IGRlZmF1bHQ7CiAgICAgdm9pZCBzdGFydChJREJGYWN0b3J5
KiwgU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGUoSURCRGF0YWJhc2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZXF1ZXN0
Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpID0gMDsKKyAgICB2aXJ0dWFsIEJhY2tlbmREaXNw
YXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFjaygpID0gMDsKICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CiBw
cml2YXRlOgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKQEAgLTE3MSwy
MCArMTUxLDIwIEBAIHZvaWQgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZTo6c3RhcnQoSURCRmFjdG9y
eSogaWRiRmFjdG9yeSwgU2VjdXJpdHlPcmlnaW4qLCBjb25zCiB9CiAKIAotc3RhdGljIFJlZlB0
cjxLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0
aD4mIGlkYktleVBhdGgpCitzdGF0aWMgUmVmPFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg+
IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgaWRiS2V5
UGF0aCkKIHsKICAgICBpZiAoIWlkYktleVBhdGgpCi0gICAgICAgIHJldHVybiBLZXlQYXRoOjpj
cmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6Ok51bGwpLnJlbGVhc2UoKTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6VHlwZTo6TnVsbCkucmVsZWFzZSgpOwogCiAgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBTdHJpbmcmIHN0cmluZykg
ewotICAgICAgICBhdXRvIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBh
dGg6OlR5cGU6OlN0cmluZykucmVsZWFzZSgpOworICAgICAgICBhdXRvIGtleVBhdGggPSBQcm90
b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKFByb3RvY29sOjpJbmRl
eGVkREI6OktleVBhdGg6OlR5cGU6OlN0cmluZykucmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRo
LT5zZXRTdHJpbmcoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7CiAgICAgfSwgW10o
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikgewogICAgICAgICBhdXRvIGFycmF5ID0gSlNP
Tjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChhdXRvJiBzdHJpbmcg
OiB2ZWN0b3IpCiAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbShzdHJpbmcpOwotICAgICAgICBh
dXRvIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OkFy
cmF5KS5yZWxlYXNlKCk7CisgICAgICAgIGF1dG8ga2V5UGF0aCA9IFByb3RvY29sOjpJbmRleGVk
REI6OktleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0
aDo6VHlwZTo6QXJyYXkpLnJlbGVhc2UoKTsKICAgICAgICAga2V5UGF0aC0+c2V0QXJyYXkoV1RG
TW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9KTsKQEAgLTIxNyw3
ICsxOTcsNyBAQCBzdGF0aWMgUmVmUHRyPElEQkluZGV4PiBpbmRleEZvck9iamVjdFN0b3JlKElE
Qk9iamVjdFN0b3JlKiBpZGJPYmplY3RTdG9yZSwgY29ucwogCiBjbGFzcyBEYXRhYmFzZUxvYWRl
ciBmaW5hbCA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPERhdGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykK
KyAgICBzdGF0aWMgUmVmPERhdGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVx
dWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VMb2FkZXIoY29udGV4dCwgV1RGTW92ZShyZXF1
ZXN0Q2FsbGJhY2spKSk7CiAgICAgfQpAQCAtMjMwLDE3ICsyMTAsMTcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgICAgICBhdXRvJiBkYXRhYmFzZUluZm8gPSBkYXRh
YmFzZS5pbmZvKCk7Ci0gICAgICAgIGF1dG8gb2JqZWN0U3RvcmVzID0gSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPjo6Y3JlYXRlKCk7Cisg
ICAgICAgIGF1dG8gb2JqZWN0U3RvcmVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhl
ZERCOjpPYmplY3RTdG9yZT46OmNyZWF0ZSgpOwogICAgICAgICBhdXRvIG9iamVjdFN0b3JlTmFt
ZXMgPSBkYXRhYmFzZUluZm8ub2JqZWN0U3RvcmVOYW1lcygpOwogICAgICAgICBmb3IgKGF1dG8m
IG5hbWUgOiBvYmplY3RTdG9yZU5hbWVzKSB7CiAgICAgICAgICAgICBhdXRvKiBvYmplY3RTdG9y
ZUluZm8gPSBkYXRhYmFzZUluZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUobmFtZSk7CiAg
ICAgICAgICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgYXV0byBpbmRleGVzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIGF1dG8gaW5kZXhlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6
T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwogICAgIAogICAgICAgICAgICAgZm9yIChhdXRv
JiBpbmRleEluZm8gOiBvYmplY3RTdG9yZUluZm8tPmluZGV4TWFwKCkudmFsdWVzKCkpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIG9iamVjdFN0b3JlSW5kZXggPSBPYmplY3RTdG9yZUluZGV4Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVJbmRleCA9IFByb3RvY29s
OjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAg
ICAgIC5zZXROYW1lKGluZGV4SW5mby5uYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRL
ZXlQYXRoKGtleVBhdGhGcm9tSURCS2V5UGF0aChpbmRleEluZm8ua2V5UGF0aCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgLnNldFVuaXF1ZShpbmRleEluZm8udW5pcXVlKCkpCkBAIC0yNDksNyAr
MjI5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGluZGV4ZXMtPmFkZEl0ZW0oV1RGTW92
ZShvYmplY3RTdG9yZUluZGV4KSk7CiAgICAgICAgICAgICB9CiAgICAgCi0gICAgICAgICAgICBh
dXRvIG9iamVjdFN0b3JlID0gT2JqZWN0U3RvcmU6OmNyZWF0ZSgpCisgICAgICAgICAgICBhdXRv
IG9iamVjdFN0b3JlID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldE5hbWUob2JqZWN0U3RvcmVJbmZvLT5uYW1lKCkpCiAgICAg
ICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5UGF0aEZyb21JREJLZXlQYXRoKG9iamVjdFN0b3Jl
SW5mby0+a2V5UGF0aCgpKSkKICAgICAgICAgICAgICAgICAuc2V0QXV0b0luY3JlbWVudChvYmpl
Y3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSkKQEAgLTI1OCw3ICsyMzgsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBvYmplY3RTdG9yZXMtPmFkZEl0ZW0oV1RGTW92ZShvYmplY3RTdG9yZSkp
OwogICAgICAgICB9CiAgICAgCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gRGF0YWJhc2VXaXRoT2Jq
ZWN0U3RvcmVzOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpJbmRl
eGVkREI6OkRhdGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5z
ZXROYW1lKGRhdGFiYXNlSW5mby5uYW1lKCkpCiAgICAgICAgICAgICAuc2V0VmVyc2lvbihkYXRh
YmFzZUluZm8udmVyc2lvbigpKQogICAgICAgICAgICAgLnNldE9iamVjdFN0b3JlcyhXVEZNb3Zl
KG9iamVjdFN0b3JlcykpCkBAIC0yNjYsOTIgKzI0Niw5NiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0KIAot
ICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxs
YmFjay5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQorICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRh
YmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0
aERhdGFiYXNlKGNvbnRleHQpCiAgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShy
ZXF1ZXN0Q2FsbGJhY2spKSB7IH0KLSAgICBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+IG1f
cmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKLXN0
YXRpYyBSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEpTT046Ok9iamVj
dCoga2V5KQorc3RhdGljIFJlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qo
UmVmPEpTT046Ok9iamVjdD4mJiBrZXkpCiB7Ci0gICAgU3RyaW5nIHR5cGU7Ci0gICAgaWYgKCFr
ZXktPmdldFN0cmluZygidHlwZSIsIHR5cGUpKQorICAgIGF1dG8gdHlwZVN0cmluZyA9IGtleS0+
Z2V0U3RyaW5nKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6dHlwZUtleSk7CisgICAgaWYgKCF0
eXBlU3RyaW5nKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG51bWJlclR5cGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
Im51bWJlciIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzdHJp
bmdUeXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJzdHJpbmciKSk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZGF0ZVR5cGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoImRhdGUiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYXJy
YXlUeXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJhcnJheSIpKTsKKyAgICBhdXRvIHR5cGUg
PSBQcm90b2NvbDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpJ
bmRleGVkREI6OktleTo6VHlwZT4odHlwZVN0cmluZyk7CisgICAgaWYgKCF0eXBlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleTsKLSAgICBpZiAo
dHlwZSA9PSBudW1iZXJUeXBlKSB7Ci0gICAgICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgICAgIGlm
ICgha2V5LT5nZXREb3VibGUoIm51bWJlciIsIG51bWJlcikpCisgICAgc3dpdGNoICgqdHlwZSkg
eworICAgIGNhc2UgUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpOdW1iZXI6IHsKKyAg
ICAgICAgYXV0byBudW1iZXIgPSBrZXktPmdldERvdWJsZShQcm90b2NvbDo6SW5kZXhlZERCOjpL
ZXk6Om51bWJlcktleSk7CisgICAgICAgIGlmICghbnVtYmVyKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKG51bWJlcik7
Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IHN0cmluZ1R5cGUpIHsKLSAgICAgICAgU3RyaW5nIHN0
cmluZzsKLSAgICAgICAgaWYgKCFrZXktPmdldFN0cmluZygic3RyaW5nIiwgc3RyaW5nKSkKKyAg
ICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKCpudW1iZXIpOworICAgIH0KKworICAg
IGNhc2UgUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAg
YXV0byBzdHJpbmcgPSBrZXktPmdldFN0cmluZyhQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OnN0
cmluZ0tleSk7CisgICAgICAgIGlmICghc3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlU3RyaW5nKHN0cmluZyk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlID09IGRhdGVUeXBlKSB7Ci0gICAgICAgIGRvdWJsZSBkYXRlOwotICAg
ICAgICBpZiAoIWtleS0+Z2V0RG91YmxlKCJkYXRlIiwgZGF0ZSkpCisgICAgICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZVN0cmluZyhzdHJpbmcpOworICAgIH0KKworICAgIGNhc2UgUHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpEYXRlOiB7CisgICAgICAgIGF1dG8gZGF0ZSA9IGtleS0+
Z2V0RG91YmxlKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6ZGF0ZUtleSk7CisgICAgICAgIGlm
ICghZGF0ZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJ
REJLZXk6OmNyZWF0ZURhdGUoZGF0ZSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IGFycmF5VHlw
ZSkgeworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKCpkYXRlKTsKKyAgICB9CisK
KyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6QXJyYXk6IHsKKyAgICAg
ICAgYXV0byBhcnJheSA9IGtleS0+Z2V0QXJyYXkoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5Ojph
cnJheUtleSk7CisgICAgICAgIGlmICghYXJyYXkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKwogICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IGtleUFycmF5OwotICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBpZiAoIWtleS0+Z2V0QXJyYXkoImFy
cmF5IiwgYXJyYXkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBhcnJheS0+Z2V0KGkpOwotICAgICAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmpl
Y3Qob2JqZWN0KSkKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0ID0gYXJyYXktPmdldChpKS0+YXNP
YmplY3QoKTsKKyAgICAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAga2V5QXJyYXkuYXBwZW5kKGlkYktleUZyb21JbnNwZWN0
b3JPYmplY3Qob2JqZWN0LmdldCgpKSk7CisgICAgICAgICAgICBrZXlBcnJheS5hcHBlbmQoaWRi
S2V5RnJvbUluc3BlY3Rvck9iamVjdChvYmplY3QucmVsZWFzZU5vbk51bGwoKSkpOwogICAgICAg
ICB9Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlQXJyYXkoa2V5QXJyYXkpOwotICAg
IH0gZWxzZQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlQXJyYXkoa2V5QXJyYXkpOworICAgIH0KKyAgICB9CiAKLSAgICByZXR1cm4gaWRiS2V5
OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1z
dGF0aWMgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5nZShjb25zdCBK
U09OOjpPYmplY3QqIGtleVJhbmdlKQorc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5
UmFuZ2VGcm9tS2V5UmFuZ2UoSlNPTjo6T2JqZWN0JiBrZXlSYW5nZSkKIHsKICAgICBSZWZQdHI8
SURCS2V5PiBpZGJMb3dlcjsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBsb3dlcjsKLSAgICBp
ZiAoa2V5UmFuZ2UtPmdldE9iamVjdCgibG93ZXIiX3MsIGxvd2VyKSkgewotICAgICAgICBpZGJM
b3dlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIuZ2V0KCkpOworICAgIGlmIChh
dXRvIGxvd2VyID0ga2V5UmFuZ2UuZ2V0T2JqZWN0KFByb3RvY29sOjpJbmRleGVkREI6OktleVJh
bmdlOjpsb3dlcktleSkpIHsKKyAgICAgICAgaWRiTG93ZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9y
T2JqZWN0KGxvd2VyLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBpZiAoIWlkYkxvd2VyKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQktleT4g
aWRiVXBwZXI7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdXBwZXI7Ci0gICAgaWYgKGtleVJh
bmdlLT5nZXRPYmplY3QoInVwcGVyIl9zLCB1cHBlcikpIHsKLSAgICAgICAgaWRiVXBwZXIgPSBp
ZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KHVwcGVyLmdldCgpKTsKKyAgICBpZiAoYXV0byB1cHBl
ciA9IGtleVJhbmdlLmdldE9iamVjdChQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6dXBw
ZXJLZXkpKSB7CisgICAgICAgIGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1
cHBlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKCFpZGJVcHBlcikKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGJvb2wgbG93ZXJPcGVuOwotICAgIGlm
ICgha2V5UmFuZ2UtPmdldEJvb2xlYW4oImxvd2VyT3BlbiJfcywgbG93ZXJPcGVuKSkKKyAgICBh
dXRvIGxvd2VyT3BlbiA9IGtleVJhbmdlLmdldEJvb2xlYW4oUHJvdG9jb2w6OkluZGV4ZWREQjo6
S2V5UmFuZ2U6Omxvd2VyT3BlbktleSk7CisgICAgaWYgKCFsb3dlck9wZW4pCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgYm9vbCB1cHBlck9wZW47Ci0gICAgaWYgKCFrZXlSYW5nZS0+
Z2V0Qm9vbGVhbigidXBwZXJPcGVuIl9zLCB1cHBlck9wZW4pKQorICAgIGF1dG8gdXBwZXJPcGVu
ID0ga2V5UmFuZ2UuZ2V0Qm9vbGVhbihQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6dXBw
ZXJPcGVuS2V5KTsKKyAgICBpZiAoIXVwcGVyT3BlbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZShXVEZNb3ZlKGlkYkxvd2VyKSwgV1RG
TW92ZShpZGJVcHBlciksIGxvd2VyT3BlbiwgdXBwZXJPcGVuKTsKKyAgICByZXR1cm4gSURCS2V5
UmFuZ2U6OmNyZWF0ZShXVEZNb3ZlKGlkYkxvd2VyKSwgV1RGTW92ZShpZGJVcHBlciksICpsb3dl
ck9wZW4sICp1cHBlck9wZW4pOwogfQogCiBjbGFzcyBPcGVuQ3Vyc29yQ2FsbGJhY2sgZmluYWwg
OiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPcGVuQ3Vy
c29yQ2FsbGJhY2s+IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPFJl
cXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNp
Z25lZCBwYWdlU2l6ZSkKKyAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gY3JlYXRl
KEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50
IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBPcGVuQ3Vyc29yQ2FsbGJhY2soaW5qZWN0ZWRTY3JpcHQsIFdURk1vdmUocmVx
dWVzdENhbGxiYWNrKSwgc2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KQEAgLTQwNSwxMyAr
Mzg5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIGxleGljYWxHbG9i
YWxPYmplY3QgPSBjb250ZXh0LmV4ZWNTdGF0ZSgpOwotICAgICAgICBhdXRvIGtleSA9ICB0b0pT
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5rZXko
KSk7Ci0gICAgICAgIGF1dG8gcHJpbWFyeUtleSA9IHRvSlMoKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPnByaW1hcnlLZXkoKSk7Ci0gICAgICAgIGF1
dG8gdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjdXJzb3ItPnZhbHVlKCkpOwotICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IERhdGFFbnRy
eTo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2Jq
ZWN0KGtleSwgU3RyaW5nKCksIHRydWUpKQotICAgICAgICAgICAgLnNldFByaW1hcnlLZXkobV9p
bmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHByaW1hcnlLZXksIFN0cmluZygpLCB0cnVlKSkKLSAg
ICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIFN0
cmluZygpLCB0cnVlKSkKKworICAgICAgICBhdXRvIGtleSA9IG1faW5qZWN0ZWRTY3JpcHQud3Jh
cE9iamVjdCh0b0pTKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y3Vyc29yLT5rZXkoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAgaWYgKCFrZXkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBwcmltYXJ5S2V5ID0gbV9pbmplY3RlZFNj
cmlwdC53cmFwT2JqZWN0KHRvSlMoKmxleGljYWxHbG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjdXJzb3ItPnByaW1hcnlLZXkoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAg
aWYgKCFwcmltYXJ5S2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gdmFs
dWUgPSBtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNW
YWx1ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT52YWx1ZSgpKSwgU3RyaW5nKCksIHRy
dWUpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGF1dG8gZGF0YUVudHJ5ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgLnNldEtleShrZXkucmVsZWFzZU5vbk51bGwoKSkKKyAgICAgICAgICAg
IC5zZXRQcmltYXJ5S2V5KHByaW1hcnlLZXkucmVsZWFzZU5vbk51bGwoKSkKKyAgICAgICAgICAg
IC5zZXRWYWx1ZSh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKICAgICAgICAgbV9yZXN1bHQtPmFkZEl0ZW0oV1RGTW92ZShkYXRhRW50cnkpKTsKICAgICB9
CkBAIC00MjQsMjUgKzQxOCwyNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE9w
ZW5DdXJzb3JDYWxsYmFjayhJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPFJlcXVl
c3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25l
ZCBwYWdlU2l6ZSkKKyAgICBPcGVuQ3Vyc29yQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3RE
YXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBw
YWdlU2l6ZSkKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50
TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1faW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHQp
CiAgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQot
ICAgICAgICAsIG1fcmVzdWx0KEpTT046OkFycmF5T2Y8RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCisg
ICAgICAgICwgbV9yZXN1bHQoSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRh
RW50cnk+OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX3NraXBDb3VudChza2lwQ291bnQpCiAgICAg
ICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkKICAgICB7CiAgICAgfQogICAgIEluamVjdGVkU2Ny
aXB0IG1faW5qZWN0ZWRTY3JpcHQ7Ci0gICAgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVx
dWVzdENhbGxiYWNrOwotICAgIFJlZjxKU09OOjpBcnJheU9mPERhdGFFbnRyeT4+IG1fcmVzdWx0
OworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRh
Q2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpJbmRleGVkREI6OkRhdGFFbnRyeT4+IG1fcmVzdWx0OwogICAgIGludCBtX3NraXBDb3Vu
dDsKICAgICB1bnNpZ25lZCBtX3BhZ2VTaXplOwogfTsKIAogY2xhc3MgRGF0YUxvYWRlciBmaW5h
bCA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERhdGFMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVk
U2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNv
bnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYgaWRiS2V5UmFuZ2Us
IGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIHN0YXRpYyBSZWY8RGF0YUxv
YWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxJbmRleGVk
REJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElE
QktleVJhbmdlPiYmIGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFMb2FkZXIoY29udGV4
dCwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVO
YW1lLCBpbmRleE5hbWUsIFdURk1vdmUoaWRiS2V5UmFuZ2UpLCBza2lwQ291bnQsIHBhZ2VTaXpl
KSk7CiAgICAgfQpAQCAtNDk4LDggKzQ5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgaWRiUmVxdWVz
dC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBXVEZNb3ZlKG9w
ZW5DdXJzb3JDYWxsYmFjayksIGZhbHNlKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2sm
IHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdl
dCgpOyB9Ci0gICAgRGF0YUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ss
IGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+
IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7
IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQorICAgIERhdGFMb2FkZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPEluZGV4ZWREQkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2Fs
bGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5
UmFuZ2U+IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKICAg
ICAgICAgOiBFeGVjdXRhYmxlV2l0aERhdGFiYXNlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQogICAg
ICAgICAsIG1faW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHQpCkBAIC01MDgsNyArNTAyLDcg
QEAgcHVibGljOgogICAgICAgICAsIG1faWRiS2V5UmFuZ2UoV1RGTW92ZShpZGJLZXlSYW5nZSkp
CiAgICAgICAgICwgbV9za2lwQ291bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUo
cGFnZVNpemUpIHsgfQotICAgIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0
RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKICAgICBJbmplY3RlZFNjcmlwdCBtX2lu
amVjdGVkU2NyaXB0OwogICAgIFN0cmluZyBtX29iamVjdFN0b3JlTmFtZTsKICAgICBTdHJpbmcg
bV9pbmRleE5hbWU7CkBAIC01MzUsMTkgKzUyOSwyMCBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWRE
QkFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dQogCiB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjplbmFibGUoKQog
eworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRp
c2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OmRpc2FibGUoKQogeworICAgIHJldHVybiB7IH07CiB9CiAKLXN0
YXRpYyBFcnJvclN0cmluZ09yPERvY3VtZW50Kj4gZG9jdW1lbnRGcm9tRnJhbWUoRnJhbWUqIGZy
YW1lKQorc3RhdGljIFByb3RvY29sOjpFcnJvclN0cmluZ09yPERvY3VtZW50Kj4gZG9jdW1lbnRG
cm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
ID8gZnJhbWUtPmRvY3VtZW50KCkgOiBudWxscHRyOwogICAgIGlmICghZG9jdW1lbnQpCkBAIC01
NTYsNyArNTUxLDcgQEAgc3RhdGljIEVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZy
b21GcmFtZShGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGRvY3VtZW50OwogfQogCi1zdGF0aWMg
RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9yeUZyb21Eb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCitzdGF0aWMgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+
IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIERPTVdp
bmRvdyogZG9tV2luZG93ID0gZG9jdW1lbnQtPmRvbVdpbmRvdygpOwogICAgIGlmICghZG9tV2lu
ZG93KQpAQCAtNTcxLDEzICs1NjYsMTMgQEAgc3RhdGljIEVycm9yU3RyaW5nT3I8SURCRmFjdG9y
eSo+IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogCiBzdGF0aWMg
Ym9vbCBnZXREb2N1bWVudEFuZElEQkZhY3RvcnlGcm9tRnJhbWVPclNlbmRGYWlsdXJlKEZyYW1l
KiBmcmFtZSwgRG9jdW1lbnQqJiBvdXRfZG9jdW1lbnQsIElEQkZhY3RvcnkqJiBvdXRfaWRiRmFj
dG9yeSwgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgY2FsbGJhY2spCiB7Ci0gICAg
RXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50ID0gZG9jdW1lbnRGcm9tRnJhbWUoZnJh
bWUpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPERvY3VtZW50Kj4gZG9jdW1lbnQgPSBk
b2N1bWVudEZyb21GcmFtZShmcmFtZSk7CiAgICAgaWYgKCFkb2N1bWVudC5oYXNfdmFsdWUoKSkg
ewogICAgICAgICBjYWxsYmFjay5zZW5kRmFpbHVyZShkb2N1bWVudC5lcnJvcigpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+
IGlkYkZhY3RvcnkgPSBJREJGYWN0b3J5RnJvbURvY3VtZW50KGRvY3VtZW50LnZhbHVlKCkpOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPElEQkZhY3RvcnkqPiBpZGJGYWN0b3J5ID0gSURC
RmFjdG9yeUZyb21Eb2N1bWVudChkb2N1bWVudC52YWx1ZSgpKTsKICAgICBpZiAoIWlkYkZhY3Rv
cnkuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgY2FsbGJhY2suc2VuZEZhaWx1cmUoaWRiRmFjdG9y
eS5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjIwLDcgKzYxNSw3IEBAIHZv
aWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZShjb25zdCBTdHJpbmcm
IHNlY3VyaXR5T3JpZ2luLCBjb25zCiAgICAgZGF0YWJhc2VMb2FkZXItPnN0YXJ0KGlkYkZhY3Rv
cnksICZkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50
IHBhZ2VTaXplLCBjb25zdCBKU09OOjpPYmplY3QqIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVl
c3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRl
eE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAg
YXV0byogZnJhbWUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZpbmRGcmFtZVdpdGhTZWN1cml0eU9y
aWdpbihtX2luc3BlY3RlZFBhZ2UsIHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQ7CkBAIC02MjksNyArNjI0LDcgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6
cmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3QKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihtYWluV29ybGRFeGVjU3RhdGUoZnJh
bWUpKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlID0ga2V5UmFuZ2UgPyBp
ZGJLZXlSYW5nZUZyb21LZXlSYW5nZShrZXlSYW5nZSkgOiBudWxscHRyOworICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBrZXlSYW5nZSA/IGlkYktleVJhbmdlRnJvbUtleVJh
bmdlKCprZXlSYW5nZSkgOiBudWxscHRyOwogICAgIGlmIChrZXlSYW5nZSAmJiAhaWRiS2V5UmFu
Z2UpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgcGFyc2Uga2V5
IHJhbmdlLiJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTY0NCw3ICs2MzksNyBAQCBuYW1lc3Bh
Y2UgewogY2xhc3MgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyIGZpbmFsIDogcHVibGljIEV2ZW50
TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENsZWFyT2JqZWN0U3RvcmVMaXN0
ZW5lcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI+
IGNyZWF0ZShSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCisg
ICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI+IGNyZWF0ZShSZWY8SW5kZXhl
ZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFy
T2JqZWN0U3RvcmVMaXN0ZW5lcihXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CkBA
IC02NjgsMjMgKzY2MywyMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5z
ZW5kU3VjY2VzcygpOwogICAgIH0KIHByaXZhdGU6Ci0gICAgQ2xlYXJPYmplY3RTdG9yZUxpc3Rl
bmVyKFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAg
IENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAg
ICAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUp
CiAgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQog
ICAgIHsKICAgICB9CiAKLSAgICBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVl
c3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpD
bGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogY2xhc3Mg
Q2xlYXJPYmplY3RTdG9yZSBmaW5hbCA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwg
UmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3Rh
dGljIFJlZjxDbGVhck9iamVjdFN0b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxJbmRleGVkREJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0
Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhck9iamVj
dFN0b3JlKGNvbnRleHQsIG9iamVjdFN0b3JlTmFtZSwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2sp
KSk7CiAgICAgfQogCi0gICAgQ2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0
U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmplY3RTdG9yZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
TmFtZSwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RT
dG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0
aERhdGFiYXNlKGNvbnRleHQpCiAgICAgICAgICwgbV9vYmplY3RTdG9yZU5hbWUob2JqZWN0U3Rv
cmVOYW1lKQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUocmVxdWVzdENhbGxi
YWNrKSkKQEAgLTcyMywxMCArNzE4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgaWRiVHJhbnNhY3Rp
b24tPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIENsZWFyT2Jq
ZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSksIGZh
bHNlKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6CiAgICAgY29uc3QgU3RyaW5n
IG1fb2JqZWN0U3RvcmVOYW1lOwotICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1f
cmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiB9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAppbmRleCBkYjI5N2JkOWNk
YThkYTZjMDQ3YWI4MmZmMzUwYTJmNGY1NzQ4ZmU5Li5lNTQ0ZjljNmYyNTM5YzQxMTcyZDVjNjky
ZTRkMjgwZTU0MzAyMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCkBAIC00NSwyNiArNDUsMjQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQYWdlOwogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckluZGV4
ZWREQkFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3Rv
ckluZGV4ZWREQkFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckluZGV4ZWREQkFnZW50
KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZXF1ZXN0RGF0YWJhc2VOYW1lcyhjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZXF1ZXN0RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUs
IGNvbnN0IEpTT046Ok9iamVjdCoga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOwor
ICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdp
biwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVxdWVz
dERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVx
dWVzdERhdGEoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjaz4mJik7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmNwcAppbmRleCBiYjk5NGJmOTlmYzI1MTY2OWY4ZDczYTRkZjBiNTVlYzBmNTZjNjEzLi41MmQz
ZmQ3MGY2YTI5OWQ5YWYwNDY5MjRmNGJhZTNkZDVkNjBiMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmNwcApAQCAtNjEsOCArNjEsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdQogCiB2b2lkIElu
c3BlY3RvckxheWVyVHJlZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAg
ICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6cmVzZXQoKQpAQCAtNzQsMTYgKzczLDIwIEBAIHZvaWQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OnJlc2V0KCkKICAgICBtX3N1cHByZXNzTGF5ZXJDaGFuZ2VFdmVudHMg
PSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjplbmFibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVk
TGF5ZXJUcmVlQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpkaXNhYmxlKCkKIHsKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZExheWVyVHJlZUFnZW50KG51bGxwdHIp
OwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OmxheWVyVHJlZURpZENoYW5nZSgpCkBAIC0xMDYsNTEgKzEwOSw0OSBA
QCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBz
ZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbgogICAgIHVuYmluZFBzZXVkb0VsZW1lbnQoJnBzZXVk
b0VsZW1lbnQpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JO
b2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6TGF5ZXJU
cmVlOjpMYXllcj4+PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6bGF5ZXJzRm9yTm9kZShQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewotICAgIGxheWVycyA9IEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj46OmNyZWF0ZSgpOwotCiAgICAg
YXV0byogbm9kZSA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+
bm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKICAgICBhdXRvKiByZW5kZXJlciA9IG5v
ZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJNaXNzaW5nIHJlbmRlcmVyIG9mIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVuZGVyZXIgb2Ygbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9z
KTsKIAogICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVyKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVuZGVyZXIgb2Yg
ZWxlbWVudCBmb3IgZ2l2ZW4gbm9kZUlkIl9zKTsKIAotICAgIGdhdGhlckxheWVyc1VzaW5nUmVu
ZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pigq
cmVuZGVyZXIpLCBsYXllcnMpOworICAgIGF1dG8gbGF5ZXJzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj46OmNyZWF0ZSgpOworCisgICAgZ2F0aGVyTGF5ZXJzVXNp
bmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVy
KSwgbGF5ZXJzKTsKIAogICAgIG1fc3VwcHJlc3NMYXllckNoYW5nZUV2ZW50cyA9IGZhbHNlOwor
CisgICAgcmV0dXJuIFdURk1vdmUobGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCit2
b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVj
dEhpZXJhcmNoeShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgSlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4mIGxheWVycykKIHsKICAgICBpZiAocmVuZGVyZXIuaGFzTGF5
ZXIoKSkgewotICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVy
cm9yU3RyaW5nLCBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5
ZXIoKSwgbGF5ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJh
cmNoeShkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5ZXIoKSwg
bGF5ZXJzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpCi0gICAgICAgIGdhdGhl
ckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCBjaGlsZCwgbGF5
ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoY2hp
bGQsIGxheWVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxh
eWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZW5kZXJMYXllciogcmVuZGVyTGF5ZXIsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQordm9pZCBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShSZW5kZXJM
YXllciogcmVuZGVyTGF5ZXIsIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5
ZXI+JiBsYXllcnMpCiB7CiAgICAgaWYgKHJlbmRlckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKLSAg
ICAgICAgbGF5ZXJzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoZXJyb3JTdHJpbmcsIHJl
bmRlckxheWVyKSk7CisgICAgICAgIGxheWVycy5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTGF5ZXIo
cmVuZGVyTGF5ZXIpKTsKIAogICAgIGZvciAocmVuZGVyTGF5ZXIgPSByZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpOyByZW5kZXJMYXllcjsgcmVuZGVyTGF5ZXIgPSByZW5kZXJMYXllci0+bmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShl
cnJvclN0cmluZywgcmVuZGVyTGF5ZXIsIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkocmVuZGVyTGF5ZXIsIGxheWVycyk7CiB9CiAKLVJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKK1JlZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJl
bmRlckxheWVyKQogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAmcmVuZGVyTGF5ZXIt
PnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5
ZXItPmJhY2tpbmcoKTsKQEAgLTE3MCw5ICsxNzEsOSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0
RgogICAgICAgICBub2RlID0gcmVuZGVyZXItPnBhcmVudCgpLT5lbGVtZW50KCk7CiAKICAgICAv
LyBCYXNpYyBzZXQgb2YgcHJvcGVydGllcy4KLSAgICBhdXRvIGxheWVyT2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcjo6Y3JlYXRlKCkKKyAgICBhdXRvIGxheWVy
T2JqZWN0ID0gUHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRMYXllcklkKGJpbmQocmVuZGVyTGF5ZXIpKQotICAgICAgICAuc2V0Tm9kZUlkKGlkRm9yTm9k
ZShlcnJvclN0cmluZywgbm9kZSkpCisgICAgICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKG5vZGUp
KQogICAgICAgICAuc2V0Qm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChyZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpCiAgICAgICAgIC5zZXRNZW1vcnkoYmFja2luZy0+YmFj
a2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUoKSkKICAgICAgICAgLnNldENvbXBvc2l0ZWRCb3VuZHMo
YnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYmFja2luZy0+Y29tcG9zaXRl
ZEJvdW5kcygpKSkpCkBAIC0yMDksMjUgKzIxMCwyNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0
RgogICAgIHJldHVybiBsYXllck9iamVjdDsKIH0KIAotaW50IEluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjppZEZvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjppZEZvck5vZGUoTm9k
ZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3Rl
bnRET01BZ2VudCgpOwogICAgIAotICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2Rl
SWQobm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQobm9kZSk7
CiAgICAgaWYgKCFub2RlSWQpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5v
cmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVt
ZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1l
bnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKLSAgICAgICAgbm9kZUlkID0gZG9tQWdlbnQt
PnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZu
b2RlLT5kb2N1bWVudCgpKSwgbm9kZSk7CisgICAgICAgIG5vZGVJZCA9IGRvbUFnZW50LT5wdXNo
Tm9kZVRvRnJvbnRlbmQobm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5vZGVJZDsKIH0KIAot
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
UmVmPFByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0OjpjcmVhdGUoKQorICAg
IHJldHVybiBQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0OjpjcmVhdGUoKQogICAgICAgICAu
c2V0WChyZWN0LngoKSkKICAgICAgICAgLnNldFkocmVjdC55KCkpCiAgICAgICAgIC5zZXRXaWR0
aChyZWN0LndpZHRoKCkpCkBAIC0yMzUsMTcgKzIzNiwxNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRP
YmplYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYgY29tcG9zaXRpbmdSZWFzb25zUmVzdWx0KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5n
UmVhc29ucz4+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdM
YXllcihjb25zdCBQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkJiBsYXllcklkKQogewogICAg
IGNvbnN0IFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklk
KTsKIAotICAgIGlmICghcmVuZGVyTGF5ZXIpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyByZW5kZXIgbGF5ZXIgZm9yIGdpdmVuIGxheWVySWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFyZW5kZXJMYXllcikKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIHJlbmRlciBsYXllciBmb3IgZ2l2ZW4gbGF5ZXJJZCJfcyk7CiAKICAgICBP
cHRpb25TZXQ8Q29tcG9zaXRpbmdSZWFzb24+IHJlYXNvbnMgPSByZW5kZXJMYXllci0+Y29tcG9z
aXRvcigpLnJlYXNvbnNGb3JDb21wb3NpdGluZygqcmVuZGVyTGF5ZXIpOwotICAgIGF1dG8gY29t
cG9zaXRpbmdSZWFzb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3Np
dGluZ1JlYXNvbnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAgICBhdXRvIGNvbXBvc2l0aW5nUmVh
c29ucyA9IFByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29uczo6Y3JlYXRlKCku
cmVsZWFzZSgpOwogCiAgICAgaWYgKHJlYXNvbnMuY29udGFpbnMoQ29tcG9zaXRpbmdSZWFzb246
OlRyYW5zZm9ybTNEKSkKICAgICAgICAgY29tcG9zaXRpbmdSZWFzb25zLT5zZXRUcmFuc2Zvcm0z
RCh0cnVlKTsKQEAgLTMyNCw3ICszMjMsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAg
IGlmIChyZWFzb25zLmNvbnRhaW5zKENvbXBvc2l0aW5nUmVhc29uOjpSb290KSkKICAgICAgICAg
Y29tcG9zaXRpbmdSZWFzb25zLT5zZXRSb290KHRydWUpOwogCi0gICAgY29tcG9zaXRpbmdSZWFz
b25zUmVzdWx0ID0gV1RGTW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOworICAgIHJldHVybiBXVEZN
b3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6YmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKaW5k
ZXggODcyMzU4MGM2NTMwMTBlMWVlYTYwZDQwZTljZDlkNzMyMzU4ZDlmYi4uNWYxMTUzMWNjNjQ0
NDI5ZjQ4ZDFkNmQ4MTU1MWRkODRiOWY5NGNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaApAQCAtNDIs
MjQgKzQyLDIyIEBAIGNsYXNzIFBzZXVkb0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJFbGVtZW50Owog
Y2xhc3MgUmVuZGVyTGF5ZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFz
cyBJbnNwZWN0b3JMYXllclRyZWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYyBJbnNwZWN0b3I6OkxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckxheWVyVHJl
ZUFnZW50KFdlYkFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JMYXllclRyZWVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JMYXllclRyZWVBZ2VudCgpOwogCiAgICAgLy8gSW5z
cGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBv
dmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBMYXllclRyZWVCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgbGF5ZXJz
Rm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGxheWVySWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0
aW5nUmVhc29ucz4mKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpM
YXllcj4+PiBsYXllcnNGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4+IHJlYXNvbnNGb3JDb21wb3Np
dGluZ0xheWVyKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZCYp
OwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBsYXllclRyZWVE
aWRDaGFuZ2UoKTsKQEAgLTcyLDEzICs3MCwxMyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBiaW5k
KGNvbnN0IFJlbmRlckxheWVyKik7CiAgICAgdm9pZCB1bmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIq
KTsKIAotICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJy
b3JTdHJpbmcmLCBSZW5kZXJFbGVtZW50JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jik7Ci0gICAgdm9pZCBnYXRoZXJMYXllcnNV
c2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5nJiwgUmVuZGVyTGF5ZXIqLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
KTsKKyAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KFJlbmRl
ckVsZW1lbnQmLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+Jik7CisgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5
KFJlbmRlckxheWVyKiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiYpOwogCi0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciopOwor
ICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBidWlsZE9iamVj
dEZvckxheWVyKFJlbmRlckxheWVyKik7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Okxh
eWVyVHJlZTo6SW50UmVjdD4gYnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3QmKTsK
IAotICAgIGludCBpZEZvck5vZGUoRXJyb3JTdHJpbmcmLCBOb2RlKik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgaWRGb3JOb2RlKE5vZGUqKTsKIAogICAgIFN0cmluZyBi
aW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50Kik7CiAgICAgdm9pZCB1bmJpbmRQc2V1ZG9F
bGVtZW50KFBzZXVkb0VsZW1lbnQqKTsKQEAgLTg2LDExICs4NCwxMSBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkxheWVyVHJlZUZyb250ZW5kRGlzcGF0Y2hlcj4g
bV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6TGF5ZXJUcmVlQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAKLSAgICBIYXNoTWFwPGNvbnN0
IFJlbmRlckxheWVyKiwgU3RyaW5nPiBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBjb25zdCBSZW5kZXJMYXllcio+IG1faWRUb0xheWVyOworICAgIEhhc2hNYXA8
Y29uc3QgUmVuZGVyTGF5ZXIqLCBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
SWQ+IG1fZG9jdW1lbnRMYXllclRvSWRNYXA7CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVySWQsIGNvbnN0IFJlbmRlckxheWVyKj4gbV9pZFRvTGF5ZXI7
CiAKLSAgICBIYXNoTWFwPFBzZXVkb0VsZW1lbnQqLCBTdHJpbmc+IG1fcHNldWRvRWxlbWVudFRv
SWRNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFBzZXVkb0VsZW1lbnQqPiBtX2lkVG9Qc2V1ZG9F
bGVtZW50OworICAgIEhhc2hNYXA8UHNldWRvRWxlbWVudCosIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6UHNldWRvRWxlbWVudElkPiBtX3BzZXVkb0VsZW1lbnRUb0lkTWFwOworICAg
IEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpQc2V1ZG9FbGVtZW50SWQs
IFBzZXVkb0VsZW1lbnQqPiBtX2lkVG9Qc2V1ZG9FbGVtZW50OwogCiAgICAgYm9vbCBtX3N1cHBy
ZXNzTGF5ZXJDaGFuZ2VFdmVudHMgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXgg
ZDBlOGFhNjg4MzM2NTllNjRhZmU1NTM0N2NiNTZmNzczZWI3ZDdhNS4uMTRjZTY3MDk2YTI0MjQ0
OTRjNTkyNDY2MDg2YTFkMWUyODc3NDEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTU0LDQwICs1
NCwzOSBAQCB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJh
Y2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRAogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNh
YmxlKCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudE1lbW9yeUFn
ZW50KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yTWVtb3J5QWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1lbW9yeSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1lbW9yeUFnZW50KCkg
PT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNZW1vcnkgZG9tYWluIGFs
cmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxl
ZE1lbW9yeUFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JNZW1vcnlBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlzYWJsZSgpCiB7
Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1lbW9yeSBkb21haW4gYWxyZWFkeSBkaXNh
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRNZW1vcnlBZ2VudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTWVtb3J5QWdlbnQobnVsbHB0cik7CiAKICAg
ICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVP
YnNlcnZlcih0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVt
b3J5QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAg
IGlmIChtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjphZGRPYnNlcnZlcih0aGlzLCBNZW1vcnksIFt0aGlz
XSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBs
ZShkYXRhKTsKQEAgLTk2LDI0ICs5NSwyOCBAQCB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojpz
dGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIAogICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KG1fZW52aXJvbm1lbnQuZXhlY3V0
aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RvcFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50
OjpzdG9wVHJhY2tpbmcoKQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3Zl
T2JzZXJ2ZXIodGhpcyk7CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0
b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpZEhhbmRsZU1lbW9yeVByZXNzdXJlKENy
aXRpY2FsIGNyaXRpY2FsKQogewogICAgIE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJp
dHkgc2V2ZXJpdHkgPSBjcml0aWNhbCA9PSBDcml0aWNhbDo6WWVzID8gTWVtb3J5RnJvbnRlbmRE
aXNwYXRjaGVyOjpTZXZlcml0eTo6Q3JpdGljYWwgOiBNZW1vcnlGcm9udGVuZERpc3BhdGNoZXI6
OlNldmVyaXR5OjpOb25Dcml0aWNhbDsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bWVtb3J5
UHJlc3N1cmUobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgp
LnNlY29uZHMoKSwgc2V2ZXJpdHkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZW1vcnlQ
cmVzc3VyZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCku
c2Vjb25kcygpLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2V2ZXJp
dHkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25z
dCBSZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaAppbmRleCBjNDQ3NzJkYmVhYmY5
MTE0Y2ZhNDQ3ZmU5NmU4NGUzZDJiNTI2MjhlLi4xYTc2NDA4ZWY5M2M5NjFiNWEwMGFhYzFmOTI1
YTg5MzY0MzI5NDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck1lbW9yeUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCkBAIC0zNSwyNCArMzUsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5z
cGVjdG9yTWVtb3J5QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJs
aWMgSW5zcGVjdG9yOjpNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvck1lbW9yeUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JNZW1vcnlBZ2VudChQYWdlQWdlbnRD
b250ZXh0Jik7Ci0gICAgfkluc3BlY3Rvck1lbW9yeUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfklu
c3BlY3Rvck1lbW9yeUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVy
KiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZv
aWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKTsKIAogICAgIC8vIE1lbW9yeUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNr
aW5nKCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZEhh
bmRsZU1lbW9yeVByZXNzdXJlKENyaXRpY2FsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAppbmRleCAwOWYy
NzdmMTk1ZDM1NmNmNmQzMTRmYmY3MmNmY2JlYWQ2NjdlMTVjLi4wOWU2YzZkNGM5NmQ2NDQxODIz
ZGQwNTEwYmY5ZGM5MjY4NDk3MDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCkBAIC0xNzIsOSArMTcy
LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zdGF0dXNDb2RlOwogfTsKIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBidWlsZFdlYlNvY2tldE1lc3Nh
Z2UoY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQorUmVmPFByb3RvY29sOjpOZXR3b3JrOjpX
ZWJTb2NrZXRGcmFtZT4gYnVpbGRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFdlYlNvY2tldEZyYW1l
JiBmcmFtZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0RnJhbWU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJT
b2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAg
ICAgICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKICAgICAgICAgLnNldFBheWxvYWREYXRhKGZy
YW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFt
ZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZShmcmFtZS5wYXls
b2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKQEAgLTIwMSwyMCArMjAxLDIxIEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlCiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQorc3RhdGljIFJlZjxQcm90b2NvbDo6TmV0d29y
azo6SGVhZGVycz4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhl
YWRlcnMpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gaGVhZGVyc09iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBoZWFkZXJzVmFsdWUgPSBQcm90b2NvbDo6TmV0d29y
azo6SGVhZGVyczo6Y3JlYXRlKCkucmVsZWFzZSgpOwogCisgICAgYXV0byBoZWFkZXJzT2JqZWN0
ID0gaGVhZGVyc1ZhbHVlLT5hc09iamVjdCgpOwogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVy
IDogaGVhZGVycykKICAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGhlYWRlci5rZXks
IGhlYWRlci52YWx1ZSk7Ci0gICAgcmV0dXJuIGhlYWRlcnNPYmplY3Q7CisKKyAgICByZXR1cm4g
aGVhZGVyc1ZhbHVlOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
b3VyY2VUaW1pbmc+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JUaW1pbmco
Y29uc3QgTmV0d29ya0xvYWRNZXRyaWNzKiB0aW1pbmcsIFJlc291cmNlTG9hZGVyJiByZXNvdXJj
ZUxvYWRlcikKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JUaW1pbmcoY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzKiB0aW1pbmcsIFJlc291cmNlTG9hZGVyJiByZXNvdXJjZUxvYWRlcikKIHsKICAgICBhdXRv
JiBsb2FkVGltaW5nID0gcmVzb3VyY2VMb2FkZXIubG9hZFRpbWluZygpOwogCkBAIC0yMjcsNyAr
MjI4LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5n
PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2IKICAgICAgICAgdGltaW5nID0gJmVtcHR5
LnZhbHVlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OlJlc291cmNlVGltaW5nOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29y
azo6UmVzb3VyY2VUaW1pbmc6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGFydFRpbWUoZWxhcHNl
ZFRpbWVTaW5jZShsb2FkVGltaW5nLnN0YXJ0VGltZSgpKSkKICAgICAgICAgLnNldFJlZGlyZWN0
U3RhcnQoZWxhcHNlZFRpbWVTaW5jZShsb2FkVGltaW5nLnJlZGlyZWN0U3RhcnQoKSkpCiAgICAg
ICAgIC5zZXRSZWRpcmVjdEVuZChlbGFwc2VkVGltZVNpbmNlKGxvYWRUaW1pbmcucmVkaXJlY3RF
bmQoKSkpCkBAIC0yNDMsMjYgKzI0NCwyNiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYgogICAg
ICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6TWV0cmljczo6UHJpb3JpdHkgdG9Qcm90b2NvbChOZXR3b3JrTG9hZFByaW9yaXR5IHByaW9y
aXR5KQorc3RhdGljIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eSB0b1Byb3Rv
Y29sKE5ldHdvcmtMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCiB7CiAgICAgc3dpdGNoIChwcmlvcml0
eSkgewogICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6TG93OgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkxvdzsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TG93Owog
ICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6TWVkaXVtOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6Ok1lZGl1bTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVt
OwogICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6SGlnaDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpIaWdoOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpIaWdoOwog
ICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6VW5rbm93bjoKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CisgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVtOwogfQogCi1SZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBuZXR3
b3JrTG9hZE1ldHJpY3MpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYgbmV0d29ya0xvYWRNZXRyaWNzKQogewotICAgIGF1dG8gbWV0cmljcyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAgICBh
dXRvIG1ldHJpY3MgPSBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6Y3JlYXRlKCkucmVsZWFz
ZSgpOwogCiAgICAgaWYgKCFuZXR3b3JrTG9hZE1ldHJpY3MucHJvdG9jb2wuaXNOdWxsKCkpCiAg
ICAgICAgIG1ldHJpY3MtPnNldFByb3RvY29sKG5ldHdvcmtMb2FkTWV0cmljcy5wcm90b2NvbCk7
CkBAIC0yODYsNyArMjg3LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1l
dHJpY3M+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3IKICAgICBpZiAobmV0
d29ya0xvYWRNZXRyaWNzLnJlc3BvbnNlQm9keURlY29kZWRTaXplICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgoKSkKICAgICAgICAgbWV0cmljcy0+c2V0UmVzcG9uc2VCb2R5
RGVjb2RlZFNpemUobmV0d29ya0xvYWRNZXRyaWNzLnJlc3BvbnNlQm9keURlY29kZWRTaXplKTsK
IAotICAgIGF1dG8gY29ubmVjdGlvblBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZWN1
cml0eTo6Q29ubmVjdGlvbjo6Y3JlYXRlKCkKKyAgICBhdXRvIGNvbm5lY3Rpb25QYXlsb2FkID0g
UHJvdG9jb2w6OlNlY3VyaXR5OjpDb25uZWN0aW9uOjpjcmVhdGUoKQogICAgICAgICAucmVsZWFz
ZSgpOwogCiAgICAgaWYgKCFuZXR3b3JrTG9hZE1ldHJpY3MudGxzUHJvdG9jb2wuaXNFbXB0eSgp
KQpAQCAtMzAwLDkgKzMwMSw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpN
ZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yCiAgICAgcmV0dXJu
IG1ldHJpY3M7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQorc3RhdGljIFJlZjxQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdD4gYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQogewotICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3Q6OmNyZWF0ZSgpCisgICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gUHJvdG9jb2w6
Ok5ldHdvcms6OlJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwocmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkKICAgICAgICAgLnNldE1ldGhvZChyZXF1ZXN0Lmh0dHBNZXRob2QoKSkKICAg
ICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpKSkKQEAgLTMxNCw0NCArMzE1LDQyIEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3Qo
CiAgICAgcmV0dXJuIHJlcXVlc3RPYmplY3Q7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlIHJlc3BvbnNlU291cmNlKFJlc291cmNlUmVz
cG9uc2U6OlNvdXJjZSBzb3VyY2UpCitzdGF0aWMgUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
OjpTb3VyY2UgcmVzcG9uc2VTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHNvdXJjZSkK
IHsKICAgICBzd2l0Y2ggKHNvdXJjZSkgewogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291
cmNlOjpET01DYWNoZToKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6QXBwbGlj
YXRpb25DYWNoZToKICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBBcHBsaWNhdGlv
bkNhY2hlIGluIGluc3BlY3Rvci4KICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6
VW5rbm93bjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpTb3VyY2U6OlVua25vd247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U6OlNvdXJjZTo6VW5rbm93bjsKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZTo6TmV0d29yazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yazsKICAgICBjYXNlIFJlc291cmNl
UmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNl
OjpTb3VyY2U6Ok1lbW9yeUNhY2hlQWZ0ZXJWYWxpZGF0aW9uOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGU7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6TWVt
b3J5Q2FjaGU7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZToK
ICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlQWZ0ZXJWYWxpZGF0
aW9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9u
c2U6OlNvdXJjZTo6RGlza0NhY2hlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZTsKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZTo6U2VydmljZVdvcmtlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXI7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcjsK
ICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291
cmNlOjpJbnNwZWN0b3JPdmVycmlkZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3Jr
OjpSZXNwb25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZTsKICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U6OlNvdXJjZTo6VW5rbm93bjsKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9i
amVjdEZvclJlc291cmNlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK1JlZlB0cjxQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JSZXNvdXJj
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgaWYgKHJlc3BvbnNlLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGhlYWRlcnMgPSBidWls
ZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpKTsKLQotICAgIGF1
dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc3BvbnNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHJlc3BvbnNlLnVybCgpLnN0cmlu
ZygpKQogICAgICAgICAuc2V0U3RhdHVzKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpCiAgICAg
ICAgIC5zZXRTdGF0dXNUZXh0KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCi0gICAgICAgIC5z
ZXRIZWFkZXJzKFdURk1vdmUoaGVhZGVycykpCisgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2Jq
ZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQogICAgICAgICAuc2V0
TWltZVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkKICAgICAgICAgLnNldFNvdXJjZShyZXNwb25z
ZVNvdXJjZShyZXNwb25zZS5zb3VyY2UoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0zNjAs
MTEgKzM1OSwxMSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9u
c2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplYwogICAgICAgICByZXNwb25zZU9i
amVjdC0+c2V0VGltaW5nKGJ1aWxkT2JqZWN0Rm9yVGltaW5nKHJlc3BvbnNlLmRlcHJlY2F0ZWRO
ZXR3b3JrTG9hZE1ldHJpY3NPck51bGwoKSwgKnJlc291cmNlTG9hZGVyKSk7CiAKICAgICBpZiAo
YXV0byYgY2VydGlmaWNhdGVJbmZvID0gcmVzcG9uc2UuY2VydGlmaWNhdGVJbmZvKCkpIHsKLSAg
ICAgICAgYXV0byBzZWN1cml0eVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZWN1cml0
eTo6U2VjdXJpdHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gc2VjdXJpdHlQYXlsb2FkID0gUHJv
dG9jb2w6OlNlY3VyaXR5OjpTZWN1cml0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKICAgICAgICAgaWYgKGF1dG8gY2VydGlmaWNhdGVTdW1tYXJ5SW5mbyA9IGNlcnRpZmlj
YXRlSW5mby52YWx1ZSgpLnN1bW1hcnkoKSkgewotICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0
ZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZWN1cml0eTo6Q2VydGlmaWNhdGU6OmNy
ZWF0ZSgpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlUGF5bG9hZCA9IFByb3RvY29sOjpT
ZWN1cml0eTo6Q2VydGlmaWNhdGU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKIAogICAgICAgICAgICAgY2VydGlmaWNhdGVQYXlsb2FkLT5zZXRTdWJqZWN0KGNlcnRpZmlj
YXRlU3VtbWFyeUluZm8udmFsdWUoKS5zdWJqZWN0KTsKQEAgLTM5NiwxNiArMzk1LDE2IEBAIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpidWlsZE9iamVjCiAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0OwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNl
PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogewotICAgIGF1dG8gcmVzb3VyY2VPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkK
KyAgICBhdXRvIHJlc291cmNlT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291
cmNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKS5zdHJp
bmcoKSkKICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZVR5cGVKU09OKCpjYWNoZWRSZXNvdXJjZSkpCiAgICAgICAgIC5zZXRCb2R5U2l6ZShjYWNoZWRS
ZXNvdXJjZS0+ZW5jb2RlZFNpemUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgIGF1dG8g
cmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjYWNoZWRS
ZXNvdXJjZS0+cmVzcG9uc2UoKSwgY2FjaGVkUmVzb3VyY2UtPmxvYWRlcigpKTsKLSAgICByZXNv
dXJjZU9iamVjdC0+c2V0UmVzcG9uc2UoV1RGTW92ZShyZXNvdXJjZVJlc3BvbnNlKSk7CisgICAg
aWYgKGF1dG8gcmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgY2FjaGVkUmVzb3VyY2UtPmxvYWRlcigpKSkK
KyAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKHJlc291cmNlUmVzcG9uc2UucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9IEluc3BlY3Rv
clBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UpOwogICAg
IGlmICghc291cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkpCkBAIC00MjksOSArNDI4LDkgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIERvY3VtZW50TG8KICAgICBkb3VibGUgc2VuZFRpbWVzdGFtcCA9IHRpbWVzdGFt
cCgpOwogICAgIFdhbGxUaW1lIHdhbGx0aW1lID0gV2FsbFRpbWU6Om5vdygpOwogCi0gICAgU3Ry
aW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIp
OwotICAgIFN0cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3Ry
aW5nIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihsb2FkZXIpOworICAgIGF1dG8gcmVxdWVz
dElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7CisgICAgYXV0
byBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CisgICAgYXV0byBsb2FkZXJJZCA9
IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKICAgICBTdHJpbmcgdGFyZ2V0SWQgPSByZXF1ZXN0
LmluaXRpYXRvcklkZW50aWZpZXIoKTsKIAogICAgIGlmICh0eXBlID09IEluc3BlY3RvclBhZ2VB
Z2VudDo6T3RoZXJSZXNvdXJjZSkgewpAQCAtNDYyLDcgKzQ2MSwxMCBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMbwogICAgIGF1dG8gaW5pdGlhdG9yT2JqZWN0ID0gYnVpbGRJbml0aWF0b3JPYmpl
Y3QoZG9jdW1lbnQsICZyZXF1ZXN0KTsKIAogICAgIFN0cmluZyB1cmwgPSBsb2FkZXIgPyBsb2Fk
ZXItPnVybCgpLnN0cmluZygpIDogcmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKLSAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVzdElkLCBmcmFtZUlkLCBsb2Fk
ZXJJZCwgdXJsLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgc2VuZFRp
bWVzdGFtcCwgd2FsbHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCksIGluaXRpYXRv
ck9iamVjdCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2Us
IG51bGxwdHIpLCB0eXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSA/ICZw
cm90b2NvbFJlc291cmNlVHlwZSA6IG51bGxwdHIsIHRhcmdldElkLmlzRW1wdHkoKSA/IG51bGxw
dHIgOiAmdGFyZ2V0SWQpOworICAgIE9wdGlvbmFsPFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5
cGU+IHR5cGVQYXlsb2FkOworICAgIGlmICh0eXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3Ro
ZXJSZXNvdXJjZSkKKyAgICAgICAgdHlwZVBheWxvYWQgPSBwcm90b2NvbFJlc291cmNlVHlwZTsK
KyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVzdElkLCBm
cmFtZUlkLCBsb2FkZXJJZCwgdXJsLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChyZXF1
ZXN0KSwgc2VuZFRpbWVzdGFtcCwgd2FsbHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRz
KCksIFdURk1vdmUoaW5pdGlhdG9yT2JqZWN0KSwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKHJlZGlyZWN0UmVzcG9uc2UsIG51bGxwdHIpLCBXVEZNb3ZlKHR5cGVQYXlsb2FkKSwgdGFy
Z2V0SWQpOwogfQogCiBzdGF0aWMgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlRm9yQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAt
NTE0LDcgKzUxNiw4IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVz
cG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVuCiAgICAgICAgIH0pOwogICAg
IH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4g
cmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWFsUmVz
cG9uc2UgPyAqcmVhbFJlc3BvbnNlIDogcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKKyAgICBS
ZWZQdHI8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJjZVJlc3BvbnNlID0gYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlYWxSZXNwb25zZSA/ICpyZWFsUmVzcG9uc2Ug
OiByZXNwb25zZSwgcmVzb3VyY2VMb2FkZXIpOworICAgIEFTU0VSVChyZXNvdXJjZVJlc3BvbnNl
KTsKIAogICAgIGJvb2wgaXNOb3RNb2RpZmllZCA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
PT0gMzA0OwogCkBAIC01MjcsNyArNTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW4KICAg
ICBpZiAoY2FjaGVkUmVzb3VyY2UpIHsKICAgICAgICAgLy8gVXNlIG1pbWUgdHlwZSBmcm9tIGNh
Y2hlZCByZXNvdXJjZSBpbiBjYXNlIHRoZSBvbmUgaW4gcmVzcG9uc2UgaXMgZW1wdHkuCiAgICAg
ICAgIGlmIChyZXNvdXJjZVJlc3BvbnNlICYmIHJlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpNaW1lVHlwZSwgY2FjaGVkUmVzb3VyY2UtPnJlc3Bv
bnNlKCkubWltZVR5cGUoKSk7CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJp
bmcoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjptaW1lVHlwZUtleSwgY2FjaGVkUmVzb3Vy
Y2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7CiAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+YWRk
Q2FjaGVkUmVzb3VyY2UocmVxdWVzdElkLCBjYWNoZWRSZXNvdXJjZSk7CiAgICAgfQogCkBAIC01
NDksMjEgKzU1MiwyMSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbgogICAgICAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+bWF5YmVBZGRSZXNvdXJjZURhdGEocmVxdWVzdElkLCBwcmV2aW91
c0J1ZmZlci0+ZGF0YSgpLCBwcmV2aW91c0J1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJt
aW1lVHlwZSJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPm1pbWVUeXBlKCkpOworICAgICAgICAg
ICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6bWltZVR5cGVLZXksIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5taW1lVHlwZSgpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0SW50ZWdlcigic3RhdHVz
Il9zLCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAg
ICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoInN0YXR1c1RleHQiX3MsIHByZXZpb3VzUmVz
b3VyY2VEYXRhLT5odHRwU3RhdHVzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9u
c2UtPnNldEludGVnZXIoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpzdGF0dXNLZXksIHBy
ZXZpb3VzUmVzb3VyY2VEYXRhLT5odHRwU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIHJlc291
cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnN0YXR1
c1RleHRLZXksIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5odHRwU3RhdHVzVGV4dCgpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJzb3VyY2Ui
X3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZSkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6c291cmNlS2V5LCBQcm90b2NvbDo6SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU3RyaW5nIGZyYW1lSWQgPSBmcmFt
ZUlkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlm
aWVyKGxvYWRlcik7CisgICAgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZCA9IGZy
YW1lSWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBs
b2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKIAogICAgIG1fcmVzb3VyY2VzRGF0
YS0+cmVzcG9uc2VSZWNlaXZlZChyZXF1ZXN0SWQsIGZyYW1lSWQsIHJlc3BvbnNlLCB0eXBlLCBz
aG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSk7CiAKLSAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+cmVzcG9uc2VSZWNlaXZlZChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRl
cklkLCB0aW1lc3RhbXAoKSwgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKU09OKHR5
cGUpLCByZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzcG9u
c2VSZWNlaXZlZChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB0aW1lc3RhbXAoKSwgSW5z
cGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKU09OKHR5cGUpLCByZXNvdXJjZVJlc3BvbnNl
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgLy8gSWYgd2UgcmV2YWxpZGF0ZWQgdGhlIHJlc291
cmNlIGFuZCBnb3QgTm90IG1vZGlmaWVkLCBzZW5kIGNvbnRlbnQgbGVuZ3RoIGZvbGxvd2luZyBk
aWRSZWNlaXZlUmVzcG9uc2UKICAgICAvLyBhcyB0aGVyZSB3aWxsIGJlIG5vIGNhbGxzIHRvIGRp
ZFJlY2VpdmVEYXRhIGZyb20gdGhlIG5ldHdvcmsgc3RhY2suCkBAIC02MjEsOSArNjI0LDkgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAgICAgICAgIHJlYWxNZXRyaWNzID0gcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPm5ldHdvcmtNZXRyaWNzRnJvbVJlc291
cmNlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllcikuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgIH0p
OwogICAgIH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
cz4gbWV0cmljcyA9IGJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhyZWFsTWV0cmljcyA/ICpyZWFsTWV0
cmljcyA6IG5ldHdvcmtMb2FkTWV0cmljcyk7CisgICAgUmVmUHRyPFByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzPiBtZXRyaWNzID0gYnVpbGRPYmplY3RGb3JNZXRyaWNzKHJlYWxNZXRyaWNzID8g
KnJlYWxNZXRyaWNzIDogbmV0d29ya0xvYWRNZXRyaWNzKTsKIAotICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5sb2FkaW5nRmluaXNoZWQocmVxdWVzdElkLCBlbGFwc2VkRmluaXNoVGltZSwgIXNv
dXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpID8gJnNvdXJjZU1hcHBpbmdVUkwgOiBudWxscHRyLCBt
ZXRyaWNzKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZpbmlzaGVkKHJlcXVl
c3RJZCwgZWxhcHNlZEZpbmlzaFRpbWUsIHNvdXJjZU1hcHBpbmdVUkwsIFdURk1vdmUobWV0cmlj
cykpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKQEAgLTY0Miw4ICs2NDUsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVu
dExvYQogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBjYW5jZWxlZCA9IGVycm9yLmlzQ2Fu
Y2VsbGF0aW9uKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxvYWRpbmdGYWlsZWQocmVx
dWVzdElkLCB0aW1lc3RhbXAoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgY2FuY2Vs
ZWQgPyAmY2FuY2VsZWQgOiBudWxscHRyKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9h
ZGluZ0ZhaWxlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpLCBlcnJvci5pc0NhbmNlbGxhdGlvbigpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciog
bG9hZGVyLCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCkBAIC02NTQsOCArNjU2LDggQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShE
b2N1bWVudExvYWRlciogbG9hZGUKIAogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IGxv
YWRlci0+ZnJhbWUoKS0+cGFnZSgpLT5wcm9ncmVzcygpLmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIo
KTsKICAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQo
aWRlbnRpZmllcik7Ci0gICAgU3RyaW5nIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihsb2Fk
ZXIpOwotICAgIFN0cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CisgICAg
UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihs
b2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWQgPSBmcmFtZUlk
ZW50aWZpZXIobG9hZGVyKTsKIAogICAgIG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VDcmVhdGVk
KHJlcXVlc3RJZCwgbG9hZGVySWQsIHJlc291cmNlKTsKIApAQCAtNjY1LDcgKzY2Nyw3IEBAIHZv
aWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUo
RG9jdW1lbnRMb2FkZXIqIGxvYWRlCiAgICAgLy8gaW5zdGVhZCBvZiB3aGF0ZXZlciBSZXNvdXJj
ZVJlc3BvbnNlOjpTb3VyY2UgdGhlIENhY2hlZFJlc291cmNlcydzIHJlc3BvbnNlIGhhcy4KICAg
ICAvLyBUaGUgZnJvbnRlbmQgYWxyZWFkeSBrbm93cyBmb3IgY2VydGFpbiB0aGF0IHRoaXMgd2Fz
IHNlcnZlZCBmcm9tIHRoZSBtZW1vcnkgY2FjaGUuCiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+cmVxdWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZShyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRl
cklkLCBsb2FkZXItPnVybCgpLnN0cmluZygpLCB0aW1lc3RhbXAoKSwgaW5pdGlhdG9yT2JqZWN0
LCBidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKCZyZXNvdXJjZSkpOworICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5yZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZCwgZnJh
bWVJZCwgbG9hZGVySWQsIGxvYWRlci0+dXJsKCkuc3RyaW5nKCksIHRpbWVzdGFtcCgpLCBXVEZN
b3ZlKGluaXRpYXRvck9iamVjdCksIGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoJnJlc291
cmNlKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJbml0aWFsU2NyaXB0
Q29udGVudCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3Ry
aW5nKQpAQCAtNzI5LDI2ICs3MzEsMjYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRp
ZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICAgICAg
bV9zdHlsZVJlY2FsY3VsYXRpb25Jbml0aWF0b3IgPSBidWlsZEluaXRpYXRvck9iamVjdCgmZG9j
dW1lbnQpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlh
dG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0KiByZXNvdXJjZVJlcXVlc3QpCitSZWY8
UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWls
ZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCogcmVzb3VyY2VSZXF1ZXN0KQogewogICAgIC8vIEZJWE1FOiBXb3JrZXIgc3VwcG9ydC4KICAg
ICBpZiAoIWlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQorICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVy
KQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3Q7CisgICAgUmVm
UHRyPFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGluaXRpYXRvck9iamVjdDsKIAogICAg
IFJlZjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2UgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2so
SlNFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpKTsKICAgICBpZiAoc3RhY2tUcmFjZS0+c2l6ZSgp
ID4gMCkgewotICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6OlNjcmlwdCkKKyAgICAgICAg
aW5pdGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkK
KyAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6
OlNjcmlwdCkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGluaXRpYXRvck9iamVj
dC0+c2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLT5idWlsZEluc3BlY3RvckFycmF5KCkpOwogICAg
IH0gZWxzZSBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNl
cigpKSB7Ci0gICAgICAgIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6UGFyc2VyKQorICAgICAgICBp
bml0aWF0b3JPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQor
ICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6
UGFyc2VyKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0
LT5zZXRVcmwoZG9jdW1lbnQtPnVybCgpLnN0cmluZygpKTsKICAgICAgICAgaW5pdGlhdG9yT2Jq
ZWN0LT5zZXRMaW5lTnVtYmVyKGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKS0+
dGV4dFBvc2l0aW9uKCkubV9saW5lLm9uZUJhc2VkSW50KCkpOwpAQCAtNzU4LDggKzc2MCw4IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0CiAgICAgaWYgKGRvbUFnZW50ICYmIHJlc291cmNlUmVx
dWVzdCkgewogICAgICAgICBpZiAoYXV0byBpbnNwZWN0b3JJbml0aWF0b3JOb2RlSWRlbnRpZmll
ciA9IHJlc291cmNlUmVxdWVzdC0+aW5zcGVjdG9ySW5pdGlhdG9yTm9kZUlkZW50aWZpZXIoKSkg
ewogICAgICAgICAgICAgaWYgKCFpbml0aWF0b3JPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBp
bml0aWF0b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCisgICAgICAgICAgICAgICAgaW5p
dGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAg
ICAgICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6
VHlwZTo6T3RoZXIpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAg
ICB9CiAKQEAgLTc2OCwxMyArNzcwLDEzIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0CiAgICAg
fQogCiAgICAgaWYgKGluaXRpYXRvck9iamVjdCkKLSAgICAgICAgcmV0dXJuIGluaXRpYXRvck9i
amVjdDsKKyAgICAgICAgcmV0dXJuIGluaXRpYXRvck9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwog
CiAgICAgaWYgKG1faXNSZWNhbGN1bGF0aW5nU3R5bGUgJiYgbV9zdHlsZVJlY2FsY3VsYXRpb25J
bml0aWF0b3IpCi0gICAgICAgIHJldHVybiBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcjsK
KyAgICAgICAgcmV0dXJuICptX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcjsKIAotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0g
ICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6
VHlwZTo6T3RoZXIpCisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNy
ZWF0ZSgpCisgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5
cGU6Ok90aGVyKQogICAgICAgICAucmVsZWFzZSgpOwogfQogCkBAIC03ODUsNyArNzg3LDcgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFUKIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6Ondp
bGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBhdXRvIHJlcXVlc3RPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0OjpjcmVh
dGUoKQorICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhl
YWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQogICAgICAgICAucmVsZWFzZSgpOwog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVl
c3QoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgp
LCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCksIFdURk1vdmUo
cmVxdWVzdE9iamVjdCkpOwpAQCAtNzkzLDcgKzc5NSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBp
ZGVuCiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFu
ZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCisgICAgYXV0
byByZXNwb25zZU9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKQog
ICAgICAgICAuc2V0U3RhdHVzVGV4dChyZXNwb25zZS5odHRwU3RhdHVzVGV4dCgpKQogICAgICAg
ICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpKSkKQEAgLTgyMCwxMiArODIyLDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZUVycm9yKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmkKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVFcnJvcihJZGVudGlmaWVyc0Zh
Y3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIGVycm9yTWVzc2FnZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQot
ewotICAgIGVuYWJsZSgpOwotfQotCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5hYmxl
KCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZW5hYmxlKCkKIHsKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5zZXRFbmFibGVkTmV0d29ya0FnZW50KHRoaXMpOwpAQCAtODU3LDkgKzg1NCwxMSBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5hYmxlKCkKICAgICAgICAgICAgICAgICBkaWRD
bG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaXNhYmxlKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV9pbnRlcmNlcHRp
b25FbmFibGVkID0gZmFsc2U7CkBAIC04NzIsOSArODcxLDExIEBAIHZvaWQgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBjb250aW51ZVBlbmRpbmdSZXNw
b25zZXMoKTsKIAogICAgIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGZhbHNlKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLWJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRl
cmNlcHQoVVJMIHVybCwgTmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSkKK2Jvb2wgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHQoVVJMIHVybCwgUHJvdG9jb2w6Ok5ldHdvcms6
Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UpCiB7CiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOwogCkBAIC05MTEsNTYgKzkxMiw1NSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6Y29udGludWVQZW5kaW5nUmVzcG9uc2VzKCkKICAgICBtX3BlbmRpbmdJbnRlcmNlcHRS
ZXNwb25zZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEV4
dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhlYWRlcnMp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNl
dEV4dHJhSFRUUEhlYWRlcnMoUmVmPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKQogewotICAgIGZv
ciAoYXV0byYgZW50cnkgOiBoZWFkZXJzKSB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsK
LSAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpCisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGhlYWRlcnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1
ZSA9IGVudHJ5LnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoISFzdHJpbmdWYWx1ZSkK
ICAgICAgICAgICAgIG1fZXh0cmFSZXF1ZXN0SGVhZGVycy5zZXQoZW50cnkua2V5LCBzdHJpbmdW
YWx1ZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgYm9vbCAvKiBiYXNl
NjRFbmNvZGVkICovPj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRSZXNwb25zZUJvZHkoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIE5ldHdv
cmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGEgY29uc3QqIHJlc291cmNlRGF0YSA9IG1fcmVz
b3VyY2VzRGF0YS0+ZGF0YShyZXF1ZXN0SWQpOwotICAgIGlmICghcmVzb3VyY2VEYXRhKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJ
ZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlc291cmNlRGF0YSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlc291cmNlIGZvciBnaXZlbiBy
ZXF1ZXN0SWQiX3MpOwogCi0gICAgaWYgKHJlc291cmNlRGF0YS0+aGFzQ29udGVudCgpKSB7Ci0g
ICAgICAgICpiYXNlNjRFbmNvZGVkID0gcmVzb3VyY2VEYXRhLT5iYXNlNjRFbmNvZGVkKCk7Ci0g
ICAgICAgICpjb250ZW50ID0gcmVzb3VyY2VEYXRhLT5jb250ZW50KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHJlc291cmNlRGF0YS0+aGFzQ29udGVudCgpKQorICAgICAgICBy
ZXR1cm4geyB7IHJlc291cmNlRGF0YS0+Y29udGVudCgpLCByZXNvdXJjZURhdGEtPmJhc2U2NEVu
Y29kZWQoKSB9IH07CiAKLSAgICBpZiAocmVzb3VyY2VEYXRhLT5pc0NvbnRlbnRFdmljdGVkKCkp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUmVzb3VyY2UgY29udGVudCB3YXMgZXZpY3RlZCBm
cm9tIGluc3BlY3RvciBjYWNoZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
cmVzb3VyY2VEYXRhLT5pc0NvbnRlbnRFdmljdGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiUmVzb3VyY2UgY29udGVudCB3YXMgZXZpY3RlZCBmcm9tIGluc3BlY3RvciBjYWNo
ZSJfcyk7CiAKICAgICBpZiAocmVzb3VyY2VEYXRhLT5idWZmZXIoKSAmJiAhcmVzb3VyY2VEYXRh
LT50ZXh0RW5jb2RpbmdOYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgKmJhc2U2NEVuY29kZWQg
PSBmYWxzZTsKLSAgICAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29u
dGVudChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpLCByZXNvdXJjZURhdGEtPnRleHRFbmNvZGluZ05h
bWUoKSwgKmJhc2U2NEVuY29kZWQsIGNvbnRlbnQpKQotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBTdHJpbmcgYm9keTsKKyAgICAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVk
QnVmZmVyQ29udGVudChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpLCByZXNvdXJjZURhdGEtPnRleHRF
bmNvZGluZ05hbWUoKSwgZmFsc2UsICZib2R5KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgYm9k
eSwgZmFsc2UgfSB9OwogICAgIH0KIAogICAgIGlmIChyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291
cmNlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3Vy
Y2VDb250ZW50KCpyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCksIGNvbnRlbnQsIGJhc2U2
NEVuY29kZWQpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcgYm9keTsKKyAg
ICAgICAgYm9vbCBiYXNlNjRFbmNvZGVkOworICAgICAgICBpZiAoSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoKnJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2Uo
KSwgJmJvZHksICZiYXNlNjRFbmNvZGVkKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgYm9keSwg
YmFzZTY0RW5jb2RlZCB9IH07CiAgICAgfQogCi0gICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBj
b250ZW50IG9mIHJlc291cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7CisgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIGNvbnRlbnQgb2YgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVl
c3RJZCJfcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNh
Y2hpbmdEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiB7Ci0gICAgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJs
ZWQoZGlzYWJsZWQpOworICAgIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJhbChkaXNh
YmxlZCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6bG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojpsb2FkUmVzb3VyY2UoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZy
YW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNl
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIGF1dG8qIGNvbnRleHQg
PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAo
IWNvbnRleHQpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yU3RyaW5nKTsK
QEAgLTk5NCwyNiArOTk0LDIyIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpsb2FkUmVz
b3VyY2UoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVyCiAgICAgaW5zcGVj
dG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudC0+c2V0TG9hZGVyKFdURk1vdmUobG9hZGVyKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5n
KiBzZXJpYWxpemVkQ2VydGlmaWNhdGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2VyaWFsaXplZENlcnRpZmljYXRlKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKICAgICBhdXRvKiByZXNv
dXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElkKTsKLSAgICBpZiAoIXJl
c291cmNlRGF0YSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlc291cmNlIGZv
ciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFy
ZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZXNv
dXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIGNlcnRpZmljYXRlID0g
cmVzb3VyY2VEYXRhLT5jZXJ0aWZpY2F0ZUluZm8oKTsKLSAgICBpZiAoIWNlcnRpZmljYXRlIHx8
IGNlcnRpZmljYXRlLnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgY2VydGlmaWNhdGUgb2YgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWNlcnRpZmljYXRlIHx8IGNlcnRpZmlj
YXRlLnZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgY2VydGlmaWNhdGUgb2YgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAK
ICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNl
cnRpZmljYXRlLnZhbHVlKCkpOwotICAgICpzZXJpYWxpemVkQ2VydGlmaWNhdGUgPSBiYXNlNjRF
bmNvZGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVy
biBiYXNlNjRFbmNvZGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwog
fQogCi1XZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVz
dElkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKQorV2ViU29ja2V0KiBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVx
dWVzdElkJiByZXF1ZXN0SWQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKFdlYlNvY2tldDo6YWxs
QWN0aXZlV2ViU29ja2V0c011dGV4KCkpOwogCkBAIC0xMDMxLDM5ICsxMDI3LDM2IEBAIHN0YXRp
YyBKU0M6OkpTVmFsdWUgd2ViU29ja2V0QXNTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBzdGF0ZSwgV2ViU29ja2V0CiAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBkZXByZWNhdGVkR2xv
YmFsT2JqZWN0Rm9yUHJvdG90eXBlKCZzdGF0ZSksIHdlYlNvY2tldCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpyZXNvbHZlV2ViU29ja2V0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVzb2x2ZVdlYlNvY2tldChjb25zdCBQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXApCiB7CiAgICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB3ZWJTb2NrZXRGb3JSZXF1
ZXN0SWQocmVxdWVzdElkKTsKLSAgICBpZiAoIXdlYlNvY2tldCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJNaXNzaW5nIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXdlYlNvY2tldCkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7
CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE2ODQ3NT4gV2ViIEluc3Bl
Y3RvcjogQ29ycmVjdGx5IGRpc3BsYXkgaWZyYW1lJ3MgYW5kIHdvcmtlcidzIFdlYlNvY2tldHMK
ICAgICBpZiAoIWlzPERvY3VtZW50Pih3ZWJTb2NrZXQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qg
c3VwcG9ydGVkIik7CiAKICAgICBhdXRvKiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pih3
ZWJTb2NrZXQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgYXV0byogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgZnJhbWUgb2Ygd2ViIHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBmcmFtZSBvZiB3ZWIgc29ja2V0IGZvciBnaXZlbiByZXF1
ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgc3RhdGUgPSAqbWFpbldvcmxkRXhlY1N0YXRlKGZyYW1l
KTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5q
ZWN0ZWRTY3JpcHRGb3IoJnN0YXRlKTsKICAgICBBU1NFUlQoIWluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSk7CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAq
b2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFw
T2JqZWN0KHdlYlNvY2tldEFzU2NyaXB0VmFsdWUoc3RhdGUsIHdlYlNvY2tldCksIG9iamVjdEdy
b3VwTmFtZSk7CisgICAgYXV0byBvYmplY3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHdl
YlNvY2tldEFzU2NyaXB0VmFsdWUoc3RhdGUsIHdlYlNvY2tldCksIG9iamVjdEdyb3VwKTsKKyAg
ICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5hYmxlIHRvIGNhc3QgV2ViU29ja2V0Iik7CisKKyAgICByZXR1cm4gb2JqZWN0LnJl
bGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJbnRl
cmNlcHRpb25FbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJ
bnRlcmNlcHRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBpZiAobV9pbnRlcmNlcHRp
b25FbmFibGVkID09IGVuYWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtX2ludGVyY2Vw
dGlvbkVuYWJsZWQgPyAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZW5hYmxlZCJfcyA6ICJJbnRlcmNl
cHRpb24gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAobV9pbnRlcmNlcHRpb25FbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChtX2ludGVyY2VwdGlvbkVuYWJsZWQgPyAiSW50ZXJjZXB0aW9uIGFscmVhZHkg
ZW5hYmxlZCJfcyA6ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBt
X2ludGVyY2VwdGlvbkVuYWJsZWQgPSBlbmFibGVkOwogCkBAIC0xMDcxLDQ2ICsxMDY0LDQwIEBA
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJbnRlcmNlcHRpb25FbmFibGVkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgYm9vCiAgICAgICAgIGNvbnRpbnVlUGVuZGluZ1JlcXVlc3Rz
KCk7CiAgICAgICAgIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpOwogICAgIH0KKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjphZGRJbnRlcmNlcHRp
b24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2
ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjphZGRJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5n
JiB1cmwsIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlLCBPcHRp
b25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkKIHsK
LSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3Rvckhl
bHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgaWYgKCFuZXR3b3Jr
U3RhZ2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIG5ldHdv
cmtTdGFnZTogIl9zLCBuZXR3b3JrU3RhZ2VTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgSW50ZXJjZXB0IGludGVyY2VwdDsKICAgICBpbnRlcmNlcHQudXJsID0gdXJsOwot
ICAgIGlmIChvcHRpb25hbENhc2VTZW5zaXRpdmUpCi0gICAgICAgIGludGVyY2VwdC5jYXNlU2Vu
c2l0aXZlID0gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZTsKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4
KQotICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICpvcHRpb25hbElzUmVnZXg7Ci0gICAgaW50
ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZS52YWx1ZSgpOworICAgIGlmIChjYXNl
U2Vuc2l0aXZlKQorICAgICAgICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpjYXNlU2Vuc2l0
aXZlOworICAgIGlmIChpc1JlZ2V4KQorICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICppc1Jl
Z2V4OworICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2U7CiAKICAgICBp
ZiAoIW1faW50ZXJjZXB0cy5hcHBlbmRJZk5vdENvbnRhaW5zKGludGVyY2VwdCkpCi0gICAgICAg
IGVycm9yU3RyaW5nID0gIkludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4LCBh
bmQgZ2l2ZW4gc3RhZ2UgYWxyZWFkeSBleGlzdHMiX3M7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiSW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZl
biBzdGFnZSBhbHJlYWR5IGV4aXN0cyJfcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVtb3ZlSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdl
U3RyaW5nLCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsSXNSZWdleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6cmVtb3ZlSW50ZXJjZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBQcm90b2Nv
bDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBj
YXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgYXV0byBuZXR3
b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlPihuZXR3b3JrU3RhZ2VTdHJpbmcpOwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywg
bmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVy
Y2VwdCBpbnRlcmNlcHQ7CiAgICAgaW50ZXJjZXB0LnVybCA9IHVybDsKLSAgICBpZiAob3B0aW9u
YWxDYXNlU2Vuc2l0aXZlKQotICAgICAgICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpvcHRp
b25hbENhc2VTZW5zaXRpdmU7Ci0gICAgaWYgKG9wdGlvbmFsSXNSZWdleCkKLSAgICAgICAgaW50
ZXJjZXB0LmlzUmVnZXggPSAqb3B0aW9uYWxJc1JlZ2V4OwotICAgIGludGVyY2VwdC5uZXR3b3Jr
U3RhZ2UgPSBuZXR3b3JrU3RhZ2UudmFsdWUoKTsKKyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKKyAg
ICAgICAgaW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUgPSAqY2FzZVNlbnNpdGl2ZTsKKyAgICBpZiAo
aXNSZWdleCkKKyAgICAgICAgaW50ZXJjZXB0LmlzUmVnZXggPSAqaXNSZWdleDsKKyAgICBpbnRl
cmNlcHQubmV0d29ya1N0YWdlID0gbmV0d29ya1N0YWdlOwogCiAgICAgaWYgKCFtX2ludGVyY2Vw
dHMucmVtb3ZlQWxsKGludGVyY2VwdCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcg
aW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBzdGFnZSJf
czsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGludGVyY2VwdCBmb3Ig
Z2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4LCBhbmQgZ2l2ZW4gc3RhZ2UiX3MpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxJbnRlcmNlcHQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtMTExOCw4ICsxMTA1LDggQEAgYm9v
bCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxJbnRlcmNlcHQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogICAgIGlmICghbV9pbnRlcmNlcHRpb25FbmFibGVkKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCks
IE5ldHdvcmtTdGFnZTo6UmVxdWVzdCkKLSAgICAgICAgfHwgc2hvdWxkSW50ZXJjZXB0KHJlcXVl
c3QudXJsKCksIE5ldHdvcmtTdGFnZTo6UmVzcG9uc2UpOworICAgIHJldHVybiBzaG91bGRJbnRl
cmNlcHQocmVxdWVzdC51cmwoKSwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVx
dWVzdCkKKyAgICAgICAgfHwgc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIFByb3RvY29s
OjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OnNob3VsZEludGVyY2VwdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQpAQCAtMTEyNyw3ICsxMTE0LDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OnNob3VsZEludGVyY2VwdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXMK
ICAgICBpZiAoIW1faW50ZXJjZXB0aW9uRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6
OlJlcXVlc3QpOworICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgUHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVxdWVzdCk7CiB9CiAKIGJvb2wgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKQEAgLTExMzUsNyArMTEyMiw3IEBAIGJvb2wgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVzcG9uc2UudXJsKCksIE5ldHdv
cmtTdGFnZTo6UmVzcG9uc2UpOworICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVzcG9uc2Uu
dXJsKCksIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3QoUmVzb3VyY2VMb2Fk
ZXImIGxvYWRlciwgRnVuY3Rpb248dm9pZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKT4mJiBoYW5k
bGVyKQpAQCAtMTE2Niw5MiArMTE1Myw4OSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
aW50ZXJjZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsCiAKICAg
ICBtX3BlbmRpbmdJbnRlcmNlcHRSZXNwb25zZXMuc2V0KHJlcXVlc3RJZCwgbWFrZVVuaXF1ZTxQ
ZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2U+KHJlc3BvbnNlLCBXVEZNb3ZlKGhhbmRsZXIpKSk7CiAK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzcG9uc2VJbnRlcmNlcHRlZChyZXF1ZXN0SWQs
IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSwgbnVsbHB0cikpOworICAg
IGF1dG8gcmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShy
ZXNwb25zZSwgbnVsbHB0cik7CisgICAgaWYgKCFyZXNvdXJjZVJlc3BvbnNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzcG9uc2VJbnRlcmNlcHRlZChy
ZXF1ZXN0SWQsIHJlc291cmNlUmVzcG9uc2UucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRDb250aW51ZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtT
dGFnZVN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6aW50ZXJjZXB0Q29udGludWUoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVl
c3RJZCYgcmVxdWVzdElkLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtT
dGFnZSkKIHsKLSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Oklu
c3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgaWYg
KCFuZXR3b3JrU3RhZ2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtu
b3duIG5ldHdvcmtTdGFnZTogIl9zLCBuZXR3b3JrU3RhZ2VTdHJpbmcpOwotICAgICAgICByZXR1
cm47CisgICAgc3dpdGNoIChuZXR3b3JrU3RhZ2UpIHsKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3
b3JrOjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3Q6CisgICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRl
cmNlcHRSZXF1ZXN0ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQp
KSB7CisgICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdC0+Y29udGludWVXaXRoT3Jp
Z2luYWxSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOworCisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29y
azo6TmV0d29ya1N0YWdlOjpSZXNwb25zZToKKyAgICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVy
Y2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRha2UocmVxdWVzdElk
KSkgeworICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlLT5yZXNwb25kV2l0aE9y
aWdpbmFsUmVzcG9uc2UoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJl
c3BvbnNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAobmV0
d29ya1N0YWdlLnZhbHVlKCkpIHsKLSAgICBjYXNlIE5ldHdvcmtTdGFnZTo6UmVxdWVzdDoKLSAg
ICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNl
cHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCkpCi0gICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0
UmVxdWVzdC0+Y29udGludWVXaXRoT3JpZ2luYWxSZXF1ZXN0KCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVz
dCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBOZXR3
b3JrU3RhZ2U6OlJlc3BvbnNlOgotICAgICAgICBpZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVz
cG9uc2UgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpKQotICAg
ICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlLT5yZXNwb25kV2l0aE9yaWdpbmFsUmVz
cG9uc2UoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBwZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVx
dWVzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcqIHVybCwgY29uc3QgU3RyaW5nKiBtZXRob2QsIGNvbnN0IEpTT046Ok9iamVj
dCogaGVhZGVycywgY29uc3QgU3RyaW5nKiBwb3N0RGF0YSkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlcXVlc3QoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVhZGVy
cywgY29uc3QgU3RyaW5nJiBwb3N0RGF0YSkKIHsKICAgICBhdXRvIHBlbmRpbmdSZXF1ZXN0ID0g
bV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVu
ZGluZ1JlcXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGlu
dGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVl
c3RJZCJfcyk7CiAKICAgICBhdXRvJiBsb2FkZXIgPSAqcGVuZGluZ1JlcXVlc3QtPm1fbG9hZGVy
OwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gbG9hZGVyLnJlcXVlc3QoKTsKLSAgICBp
ZiAodXJsKQotICAgICAgICByZXF1ZXN0LnNldFVSTChVUkwoeyB9LCAqdXJsKSk7Ci0gICAgaWYg
KG1ldGhvZCkKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCptZXRob2QpOworICAgIGlm
ICghIXVybCkKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoVVJMKHsgfSwgdXJsKSk7CisgICAgaWYg
KCEhbWV0aG9kKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QobWV0aG9kKTsKICAgICBp
ZiAoaGVhZGVycykgewogICAgICAgICBIVFRQSGVhZGVyTWFwIGV4cGxpY2l0SGVhZGVyczsKICAg
ICAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiAqaGVhZGVycykgewotICAgICAgICAgICAgU3RyaW5n
IGhlYWRlclZhbHVlOwotICAgICAgICAgICAgaWYgKGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoaGVh
ZGVyVmFsdWUpKQorICAgICAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9IGhlYWRlci52YWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghIWhlYWRlclZhbHVlKQogICAgICAgICAgICAg
ICAgIGV4cGxpY2l0SGVhZGVycy5hZGQoaGVhZGVyLmtleSwgaGVhZGVyVmFsdWUpOwogICAgICAg
ICB9CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0
SGVhZGVycykpOwogICAgIH0KLSAgICBpZiAocG9zdERhdGEpIHsKKyAgICBpZiAoISFwb3N0RGF0
YSkgewogICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2
NERlY29kZSgqcG9zdERhdGEsIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
IlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gcG9zdERhdGEiX3M7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocG9zdERhdGEsIGJ1ZmZlcikp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2
ZW4gcG9zdERhdGEiX3MpOwogCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoRm9ybURhdGE6
OmNyZWF0ZShidWZmZXIpKTsKICAgICB9CiAgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgaG93IHRv
IGlkZW50aWZ5IHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIG92ZXJyaWRkZW4gd2hlbiB3ZSBhZGQg
dGhpcyB0byB0aGUgZnJvbnRlbmQuCiAgICAgcGVuZGluZ1JlcXVlc3QtPmNvbnRpbnVlV2l0aFJl
cXVlc3QocmVxdWVzdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcqIG1pbWVUeXBlLCBjb25zdCBpbnQqIHN0YXR1cywg
Y29uc3QgU3RyaW5nKiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdFdpdGhSZXNwb25zZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxpbnQ+JiYgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0
YXR1c1RleHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykKIHsKICAgICBhdXRvIHBl
bmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlcy50YWtl
KHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3Ig
Z2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVu
ZGluZ0ludGVyY2VwdFJlc3BvbnNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7
CiAKICAgICBSZXNvdXJjZVJlc3BvbnNlIG92ZXJyaWRlUmVzcG9uc2UocGVuZGluZ0ludGVyY2Vw
dFJlc3BvbnNlLT5vcmlnaW5hbFJlc3BvbnNlKCkpOwogICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0
U291cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGUpOwogCiAg
ICAgaWYgKHN0YXR1cykKICAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZSgqc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzVGV4dCkKLSAgICAgICAgb3ZlcnJpZGVSZXNwb25z
ZS5zZXRIVFRQU3RhdHVzVGV4dCgqc3RhdHVzVGV4dCk7Ci0gICAgaWYgKG1pbWVUeXBlKQotICAg
ICAgICBvdmVycmlkZVJlc3BvbnNlLnNldE1pbWVUeXBlKCptaW1lVHlwZSk7CisgICAgaWYgKCEh
c3RhdHVzVGV4dCkKKyAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChz
dGF0dXNUZXh0KTsKKyAgICBpZiAoISFtaW1lVHlwZSkKKyAgICAgICAgb3ZlcnJpZGVSZXNwb25z
ZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAgICAgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgSFRU
UEhlYWRlck1hcCBleHBsaWNpdEhlYWRlcnM7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDog
KmhlYWRlcnMpIHsKLSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgICAg
IGlmIChoZWFkZXIudmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICAgICAgICAgIGF1
dG8gaGVhZGVyVmFsdWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBp
ZiAoISFoZWFkZXJWYWx1ZSkKICAgICAgICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhl
YWRlci5rZXksIGhlYWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBvdmVycmlkZVJlc3Bv
bnNlLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKQEAgLTEy
NjEsNDEgKzEyNDUsMzQgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdp
dGhSZXNwb25zZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBvdmVycmlkZURhdGE7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29u
dGVudCwgYnVmZmVyKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGRl
Y29kZSBnaXZlbiBjb250ZW50Il9zOwotICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3Bv
bnNlLT5yZXNwb25kV2l0aE9yaWdpbmFsUmVzcG9uc2UoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQorICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdpdmVu
IGNvbnRlbnQiX3MpOwogCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51dGY4
KCkubGVuZ3RoKCkpOwogCiAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlLT5yZXNwb25kKG92
ZXJyaWRlUmVzcG9uc2UsIG92ZXJyaWRlRGF0YSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmpl
Y3QmIGhlYWRlcnMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wg
YmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywgY29uc3Qg
U3RyaW5nJiBzdGF0dXNUZXh0LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpCiB7CiAgICAg
YXV0byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVx
dWVzdElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCBy
ZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgLy8gTG9hZGVyIHdpbGwgYmUg
cmV0YWluZWQgaW4gdGhlIGRpZFJlY2VpdmVSZXNwb25zZSBsYW1iZGEgYmVsb3cuCiAgICAgUmVm
UHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXIuZ2V0
KCk7Ci0gICAgaWYgKGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVbmFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBi
ZWVuIHByb2Nlc3NlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobG9hZGVy
LT5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlVuYWJsZSB0byBmdWxmaWxsIHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2Vk
Il9zKTsKIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CiAgICAgaWYgKGJhc2U2NEVu
Y29kZWQpIHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcg
PSAiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2
ZW4gY29udGVudCJfcyk7CiAKICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgfSBlbHNlCkBAIC0xMzA3LDkgKzEyODQsOSBAQCB2b2lkIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbgogICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKHN0YXR1cyk7
CiAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzVGV4dCk7CiAgICAgSFRUUEhl
YWRlck1hcCBleHBsaWNpdEhlYWRlcnM7Ci0gICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFkZXJz
KSB7Ci0gICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgaWYgKGhlYWRlci52YWx1
ZS0+YXNTdHJpbmcoaGVhZGVyVmFsdWUpKQorICAgIGZvciAoYXV0byYgaGVhZGVyIDogaGVhZGVy
cy5nZXQoKSkgeworICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0
cmluZygpOworICAgICAgICBpZiAoISFoZWFkZXJWYWx1ZSkKICAgICAgICAgICAgIGV4cGxpY2l0
SGVhZGVycy5hZGQoaGVhZGVyLmtleSwgaGVhZGVyVmFsdWUpOwogICAgIH0KICAgICByZXNwb25z
ZS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGljaXRIZWFkZXJzKSk7CkBAIC0xMzE5
LDQ0ICsxMjk2LDQwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1
ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgICAgICAgICBsb2Fk
ZXItPmRpZFJlY2VpdmVCdWZmZXIoV1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUoKSwgRGF0
YVBheWxvYWRXaG9sZVJlc291cmNlKTsKICAgICAgICAgbG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5n
KE5ldHdvcmtMb2FkTWV0cmljcygpKTsKICAgICB9KTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aEVycm9yKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgZXJyb3JUeXBlU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aEVycm9yKGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c291cmNlRXJyb3JUeXBlIGVycm9yVHlwZSkKIHsKICAgICBhdXRvIHBlbmRpbmdSZXF1ZXN0ID0g
bV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVu
ZGluZ1JlcXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGlu
dGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVl
c3RJZCJfcyk7CiAKICAgICBhdXRvJiBsb2FkZXIgPSAqcGVuZGluZ1JlcXVlc3QtPm1fbG9hZGVy
OwotICAgIGlmIChsb2FkZXIucmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmFibGUgdG8gYWJvcnQgcmVxdWVzdCwgaXQgaGFzIGFscmVhZHkgYmVlbiBw
cm9jZXNzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobG9hZGVyLnJlYWNoZWRUZXJt
aW5hbFN0YXRlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGFi
b3J0IHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zKTsKKworICAgIHN3
aXRjaCAoZXJyb3JUeXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VF
cnJvclR5cGU6OkdlbmVyYWw6CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJlc291cmNlRXJyb3Io
ZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCBpbnRl
cmNlcHRlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6R2VuZXJhbCkpOworICAgICAgICByZXR1
cm4geyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6
OkFjY2Vzc0NvbnRyb2w6CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJy
b3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAiQWNjZXNzIGRlbmllZCJf
cywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6QWNjZXNzQ29udHJvbCkpOworICAgICAgICByZXR1cm4g
eyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OkNh
bmNlbGxhdGlvbjoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGNhbmNlbGVkIl9z
LCBSZXNvdXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpUaW1l
b3V0OgorICAgICAgICBsb2FkZXIuZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2Vi
S2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgdGltZWQgb3V0Il9zLCBSZXNv
dXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0KSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
Ci0gICAgYXV0byBlcnJvclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzb3VyY2VFcnJvclR5cGU+KGVycm9yVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFlcnJvclR5
cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGVycm9yVHlw
ZTogIl9zLCBlcnJvclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBzd2l0Y2ggKGVycm9yVHlwZS52YWx1ZSgpKSB7Ci0g
ICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6
R2VuZXJhbDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0
SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgaW50ZXJjZXB0ZWQiX3MsIFJlc291
cmNlRXJyb3I6OlR5cGU6OkdlbmVyYWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpBY2Nlc3NDb250cm9s
OgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiQWNjZXNzIGRlbmllZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlw
ZTo6QWNjZXNzQ29udHJvbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OkNhbmNlbGxhdGlvbjoKLSAgICAg
ICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxv
YWRlci51cmwoKSwgIlJlcXVlc3QgY2FuY2VsZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkNh
bmNlbGxhdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OlRpbWVvdXQ6Ci0gICAgICAgIGVycm9yID0g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCks
ICJSZXF1ZXN0IHRpbWVkIG91dCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6VGltZW91dCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBsb2FkZXIuZGlkRmFpbChlcnJvcik7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OnNob3VsZFRyZWF0QXNUZXh0KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCkBA
IC0xNDM5LDkgKzE0MTIsOSBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVz
b3VyY2VDb250ZW50KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSwgU3RyaQogICAgIH0KIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxk
T2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJl
c3VsdChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0
IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwg
aW50IG1hdGNoZXNDb3VudCkKIHsKLSAgICBhdXRvIHNlYXJjaFJlc3VsdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHNlYXJjaFJl
c3VsdCA9IFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRVcmwodXJsKQogICAgICAgICAuc2V0RnJhbWVJZChmcmFtZUlkKQogICAgICAgICAuc2V0TWF0
Y2hlc0NvdW50KG1hdGNoZXNDb3VudCkKQEAgLTE0NjEsNyArMTQzNCw3IEBAIHN0YXRpYyBPcHRp
b25hbDxTdHJpbmc+IHRleHRDb250ZW50Rm9yUmVzb3VyY2VEYXRhKGNvbnN0IE5ldHdvcmtSZXNv
dXJjZXNEYXRhOjpSCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaE90aGVyUmVxdWVzdHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1
bGFyRXhwcmVzc2lvbiYgcmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+JiByZXN1bHQpCit2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6c2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHBy
ZXNzaW9uJiByZWdleCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJl
c3VsdD4+JiByZXN1bHQpCiB7CiAgICAgVmVjdG9yPE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNv
dXJjZURhdGEqPiByZXNvdXJjZXMgPSBtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlcygpOwogICAg
IGZvciAoYXV0byogcmVzb3VyY2VEYXRhIDogcmVzb3VyY2VzKSB7CkBAIC0xNDczLDcgKzE0NDYs
NyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25z
dCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OnNlYXJjaEluUmVxdWVzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5z
aXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQordm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaEluUmVxdWVzdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4LCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+
JiByZXN1bHRzKQogewogICAgIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGEgY29u
c3QqIHJlc291cmNlRGF0YSA9IG1fcmVzb3VyY2VzRGF0YS0+ZGF0YShyZXF1ZXN0SWQpOwogICAg
IGlmICghcmVzb3VyY2VEYXRhKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaAppbmRleCAzNDQwZTcxYTVlZDVlZjM4
NDYyMGE5ZjYyODAzNzUxZTk4M2RiNWIxLi40MGUyM2M0M2E3MGU3OWIwYzJjMGIxZDZhMTUzZWRl
Mzk1ODAyYWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3Rvck5ldHdvcmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKQEAgLTYxLDggKzYxLDYgQEAgY2xhc3MgV2ViU29j
a2V0OwogCiBzdHJ1Y3QgV2ViU29ja2V0RnJhbWU7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCiBjbGFzcyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JOZXR3b3JrQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNzksMjIgKzc3LDIyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhlYWRlcnMpIGZpbmFsOwotICAgIHZvaWQgZ2V0
UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmlu
ZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkgZmluYWw7Ci0gICAgdm9pZCBzZXRSZXNv
dXJjZUNhY2hpbmdEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZGlzYWJsZWQpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiB1cmwsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBnZXRT
ZXJpYWxpemVkQ2VydGlmaWNhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgU3RyaW5nKiBzZXJpYWxpemVkQ2VydGlmaWNhdGUpIGZpbmFsOwotICAgIHZvaWQgcmVzb2x2
ZVdlYlNvY2tldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYpIGZpbmFsOwotICAgIHZvaWQgc2V0SW50ZXJjZXB0aW9uRW5hYmxlZChF
cnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCkgZmluYWw7Ci0gICAgdm9pZCBhZGRJbnRlcmNlcHRp
b24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuZXR3b3Jr
U3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVn
ZXgpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBi
b29sKiBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAgICB2b2lk
IGludGVyY2VwdENvbnRpbnVlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nKSBmaW5hbDsKLSAgICB2b2lkIGludGVy
Y2VwdFdpdGhSZXF1ZXN0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyogdXJsLCBjb25zdCBTdHJpbmcqIG1ldGhvZCwgY29uc3QgSlNPTjo6T2JqZWN0
KiBoZWFkZXJzLCBjb25zdCBTdHJpbmcqIHBvc3REYXRhKSBmaW5hbDsKLSAgICB2b2lkIGludGVy
Y2VwdFdpdGhSZXNwb25zZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nKiBt
aW1lVHlwZSwgY29uc3QgaW50KiBzdGF0dXMsIGNvbnN0IFN0cmluZyogc3RhdHVzVGV4dCwgY29u
c3QgSlNPTjo6T2JqZWN0KiBoZWFkZXJzKSBmaW5hbDsKLSAgICB2b2lkIGludGVyY2VwdFJlcXVl
c3RXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgY29uc3QgSlNPTjo6
T2JqZWN0JiBoZWFkZXJzKSBmaW5hbDsKLSAgICB2b2lkIGludGVyY2VwdFJlcXVlc3RXaXRoRXJy
b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBl
cnJvclR5cGUpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBzZXRFeHRyYUhUVFBIZWFkZXJzKFJlZjxKU09OOjpPYmplY3Q+JiYp
IGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxTdHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IGdldFJlc3BvbnNlQm9keShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkKGJvb2wpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlKGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIHVybCwgUmVm
PExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0U2VyaWFsaXplZENlcnRpZmljYXRlKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpIGZpbmFsOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVXZWJTb2NrZXQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkg
ZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJ
bnRlcmNlcHRpb25FbmFibGVkKGJvb2wpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gYWRkSW50ZXJjZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJvb2w+
JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUludGVyY2VwdGlv
bihjb25zdCBTdHJpbmcmIHVybCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29y
a1N0YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYg
aXNSZWdleCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBpbnRlcmNlcHRDb250aW51ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2Up
IGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50
ZXJjZXB0V2l0aFJlcXVlc3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVx
dWVzdElkJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgcG9zdERhdGEpIGZpbmFsOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0V2l0
aFJlc3BvbnNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYs
IGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxpbnQ+JiYgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1Rl
eHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykgZmluYWw7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3Bv
bnNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgaGVhZGVycykgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBpbnRlcmNlcHRSZXF1ZXN0V2l0aEVycm9yKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OlJlc291cmNlRXJyb3JUeXBlKSBmaW5hbDsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbgogICAgIHZvaWQgd2lsbFJlY2FsY3VsYXRlU3R5bGUoKTsKQEAgLTEyNywzMiArMTI1LDI5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxTaGFyZWRCdWZmZXI+KT4mJik7CiAgICAg
dm9pZCBpbnRlcmNlcHRSZXF1ZXN0KFJlc291cmNlTG9hZGVyJiwgRnVuY3Rpb248dm9pZChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKT4mJik7CiAKLSAgICB2b2lkIHNlYXJjaE90aGVyUmVxdWVzdHMo
Y29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jik7Ci0gICAgdm9pZCBz
ZWFyY2hJblJlcXVlc3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+PiYpOworICAgIHZvaWQgc2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6
OlJlZ3VsYXJFeHByZXNzaW9uJiwgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKTsKKyAgICB2b2lkIHNlYXJjaEluUmVxdWVzdChJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNp
dGl2ZSwgYm9vbCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKTsKIAogcHJvdGVjdGVkOgogICAgIElu
c3BlY3Rvck5ldHdvcmtBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKIAotICAgIHZpcnR1YWwgU3Ry
aW5nIGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgPSAwOworICAgIHZpcnR1YWwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmllcihE
b2N1bWVudExvYWRlciopID0gMDsKKyAgICB2aXJ0dWFsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgPSAwOwogICAg
IHZpcnR1YWwgVmVjdG9yPFdlYlNvY2tldCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hv
bGRlciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQo
Ym9vbCkgPSAwOwotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCkg
PSAwOworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNvbnN0ID0gMDsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIGVuYWJsZSgpOwotCiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UsIEluc3BlY3RvclBhZ2VB
Z2VudDo6UmVzb3VyY2VUeXBlKTsKIAotICAgIHVzaW5nIE5ldHdvcmtTdGFnZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTsKLSAgICBib29sIHNob3VsZEludGVy
Y2VwdChVUkwsIE5ldHdvcmtTdGFnZSk7CisgICAgYm9vbCBzaG91bGRJbnRlcmNlcHQoVVJMLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UpOwogICAgIHZvaWQgY29u
dGludWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB2b2lkIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNl
cygpOwogCi0gICAgV2ViU29ja2V0KiB3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQpOworICAgIFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpOwogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gYnVpbGRJbml0aWF0b3JP
YmplY3QoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqID0gbnVsbHB0cik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gYnVpbGRJbml0aWF0
b3JPYmplY3QoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqID0gbnVsbHB0cik7CiAg
ICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWls
ZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqLCBSZXNvdXJjZUxvYWRl
ciYpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBidWls
ZE9iamVjdEZvck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJik7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBidWlsZE9iamVjdEZvclJl
c291cmNlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIFJlc291cmNlTG9hZGVyKik7
CkBAIC0yMzYsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIHVybDsKICAgICAg
ICAgYm9vbCBjYXNlU2Vuc2l0aXZlIHsgdHJ1ZSB9OwogICAgICAgICBib29sIGlzUmVnZXggeyBm
YWxzZSB9OwotICAgICAgICBOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlIHsgTmV0d29ya1N0YWdl
OjpSZXNwb25zZSB9OworICAgICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3
b3JrU3RhZ2UgbmV0d29ya1N0YWdlIHsgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0
d29ya1N0YWdlOjpSZXNwb25zZSB9OwogCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgSW50ZXJjZXB0JiBvdGhlcikgY29uc3QKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4
IDUzOWU4MTA1YjY2ZTdiMmE2YTA1NTcxYTFlMWM4Y2Q2YmRmMjdjOTAuLjhiZjdhZTFlMGQwNWEy
NjQ5YzEzYWJiMGQxNGQyMDg0Mzc3NTgwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTE1MSw3ICsxNTEs
NyBAQCBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCwgYm9v
bCogYmFzZTY0RW5jb2RlZCkKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRl
bnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLCBjb25z
dCBVUkwmIHVybCwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCiB7CiAgICAg
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5n
LCBmcmFtZSk7CiAgICAgaWYgKCFsb2FkZXIpCkBAIC0yMTMsMzcgKzIxMywzNyBAQCBDYWNoZWRS
ZXNvdXJjZSogSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShGcmFtZSogZnJhbWUs
IGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZTsKIH0KIAotSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVz
b3VyY2VUeXBlSlNPTihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5
cGUpCitQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVz
b3VyY2VUeXBlSlNPTihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5
cGUpCiB7CiAgICAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHsKICAgICBjYXNlIERvY3VtZW50UmVz
b3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJj
ZVR5cGU6OkRvY3VtZW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNl
VHlwZTo6RG9jdW1lbnQ7CiAgICAgY2FzZSBJbWFnZVJlc291cmNlOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpJbWFnZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkltYWdlOwogICAgIGNhc2UgRm9u
dFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVz
b3VyY2VUeXBlOjpGb250OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNl
VHlwZTo6Rm9udDsKICAgICBjYXNlIFN0eWxlU2hlZXRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6U3R5bGVTaGVldDsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQ7CiAg
ICAgY2FzZSBTY3JpcHRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6U2NyaXB0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OlBhZ2U6OlJlc291cmNlVHlwZTo6U2NyaXB0OwogICAgIGNhc2UgWEhSUmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlhIUjsK
KyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlhIUjsKICAgICBj
YXNlIEZldGNoUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpSZXNvdXJjZVR5cGU6OkZldGNoOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZTo6RmV0Y2g7CiAgICAgY2FzZSBQaW5nUmVzb3VyY2U6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlBpbmc7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpQaW5nOwogICAgIGNhc2Ug
QmVhY29uUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpSZXNvdXJjZVR5cGU6OkJlYWNvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpS
ZXNvdXJjZVR5cGU6OkJlYWNvbjsKICAgICBjYXNlIFdlYlNvY2tldFJlc291cmNlOgotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpXZWJTb2Nr
ZXQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpXZWJTb2Nr
ZXQ7CiAgICAgY2FzZSBPdGhlclJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOwogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9N
QU5JRkVTVCkKICAgICBjYXNlIEFwcGxpY2F0aW9uTWFuaWZlc3RSZXNvdXJjZToKICAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlJlc291cmNlVHlwZTo6T3RoZXI7CisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNv
dXJjZVR5cGU6Ok90aGVyOwogfQogCiBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBJ
bnNwZWN0b3JQYWdlQWdlbnQ6Omluc3BlY3RvclJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlKQpAQCAtMjk3LDcgKzI5Nyw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3Vy
Y2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6aW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNvbnN0CiAg
ICAgcmV0dXJuIGluc3BlY3RvclJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZS50eXBlKCkpOwog
fQogCi1JbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFn
ZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNo
ZWRSZXNvdXJjZSkKK1Byb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFn
ZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRS
ZXNvdXJjZSkKIHsKICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSlNPTihpbnNwZWN0b3JSZXNvdXJj
ZVR5cGUoY2FjaGVkUmVzb3VyY2UpKTsKIH0KQEAgLTMxMSw3ICszMTEsNyBAQCBGcmFtZSogSW5z
cGVjdG9yUGFnZUFnZW50OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oUGFnZSYgcGFnZSwg
Y29uc3QgU3RyaW5nJgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1Eb2N1bWVudExvYWRlciog
SW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIEZyYW1lKiBmcmFtZSkKK0RvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFt
ZS0+bG9hZGVyKCk7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWVM
b2FkZXIuZG9jdW1lbnRMb2FkZXIoKTsKQEAgLTMzOCwxNiArMzM4LDEzIEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JT
dHJpbmcgdW51c2VkOwotICAgIGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjplbmFi
bGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgp
ID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gYWxyZWFkeSBl
bmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiUGFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUFnZW50KHRoaXMpOwogCkBAIC0zNTgsMjEg
KzM1NSwyMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZykKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKICAgICBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShtX2luc3BlY3RlZFBh
Z2UuZGVmYXVsdFVzZURhcmtBcHBlYXJhbmNlKCkpOwogI2VuZGlmCisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUo
KQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUFnZW50KG51bGxw
dHIpOwogCi0gICAgRXJyb3JTdHJpbmcgdW51c2VkOwotICAgIHNldFNob3dQYWludFJlY3RzKHVu
dXNlZCwgZmFsc2UpOworICAgIHNldFNob3dQYWludFJlY3RzKGZhbHNlKTsKICNpZiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBzZXRTaG93UnVsZXJzKHVudXNlZCwgZmFsc2UpOworICAgIHNl
dFNob3dSdWxlcnMoZmFsc2UpOwogI2VuZGlmCi0gICAgb3ZlcnJpZGVVc2VyQWdlbnQodW51c2Vk
LCBudWxscHRyKTsKLSAgICBzZXRFbXVsYXRlZE1lZGlhKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7
CisgICAgb3ZlcnJpZGVVc2VyQWdlbnQobnVsbFN0cmluZygpKTsKKyAgICBzZXRFbXVsYXRlZE1l
ZGlhKGVtcHR5U3RyaW5nKCkpOwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHNldEZvcmNlZEFwcGVhcmFuY2UodW51c2VkLCBlbXB0
eVN0cmluZygpKTsKKyAgICBzZXRGb3JjZWRBcHBlYXJhbmNlKFdURjo6bnVsbG9wdCk7CiAjZW5k
aWYKIAogICAgIGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5zcGVjdGVkUGFnZS5z
ZXR0aW5ncygpOwpAQCAtMzkxLDYgKzM4OSw4IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5j
ZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6QWRDbGlja0F0
dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZCwgV1RGOjpudWxsb3B0KTsKICAgICBtX2NsaWVudC0+
c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVy
UHJlZmVyZW5jZTo6SVRQRGVidWdNb2RlRW5hYmxlZCwgV1RGOjpudWxsb3B0KTsKICAgICBtX2Ns
aWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2
ZWxvcGVyUHJlZmVyZW5jZTo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgV1RGOjpudWxsb3B0
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRp
bWVzdGFtcCgpCkBAIC0zOTgsMjEgKzM5OCwxOSBAQCBkb3VibGUgSW5zcGVjdG9yUGFnZUFnZW50
Ojp0aW1lc3RhbXAoKQogICAgIHJldHVybiBtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRj
aCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6cmVsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZWxvYWRGcm9tT3Jp
Z2luLCBjb25zdCBib29sKiBvcHRpb25hbFJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9hZChPcHRpb25h
bDxib29sPiYmIGlnbm9yZUNhY2hlLCBPcHRpb25hbDxib29sPiYmIHJldmFsaWRhdGVBbGxSZXNv
dXJjZXMpCiB7Ci0gICAgYm9vbCByZWxvYWRGcm9tT3JpZ2luID0gb3B0aW9uYWxSZWxvYWRGcm9t
T3JpZ2luICYmICpvcHRpb25hbFJlbG9hZEZyb21PcmlnaW47Ci0gICAgYm9vbCByZXZhbGlkYXRl
QWxsUmVzb3VyY2VzID0gb3B0aW9uYWxSZXZhbGlkYXRlQWxsUmVzb3VyY2VzICYmICpvcHRpb25h
bFJldmFsaWRhdGVBbGxSZXNvdXJjZXM7Ci0KICAgICBPcHRpb25TZXQ8UmVsb2FkT3B0aW9uPiBy
ZWxvYWRPcHRpb25zOwotICAgIGlmIChyZWxvYWRGcm9tT3JpZ2luKQorICAgIGlmIChpZ25vcmVD
YWNoZSAmJiAqaWdub3JlQ2FjaGUpCiAgICAgICAgIHJlbG9hZE9wdGlvbnMuYWRkKFJlbG9hZE9w
dGlvbjo6RnJvbU9yaWdpbik7Ci0gICAgaWYgKCFyZXZhbGlkYXRlQWxsUmVzb3VyY2VzKQorICAg
IGlmICghcmV2YWxpZGF0ZUFsbFJlc291cmNlcyB8fCAhKnJldmFsaWRhdGVBbGxSZXNvdXJjZXMp
CiAgICAgICAgIHJlbG9hZE9wdGlvbnMuYWRkKFJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOwot
CiAgICAgbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLnJlbG9hZChyZWxvYWRP
cHRpb25zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShjb25zdCBTdHJp
bmcmIHVybCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNz
aW5nVXNlckdlc3R1cmUgfTsKICAgICBGcmFtZSYgZnJhbWUgPSBtX2luc3BlY3RlZFBhZ2UubWFp
bkZyYW1lKCk7CkBAIC00MjEsMTExICs0MTksOTcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgRnJhbWVMb2Fk
UmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmZyYW1lLmRvY3VtZW50KCksIGZyYW1lLmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0KSwgIl9zZWxm
Il9zLCBJbml0aWF0ZWRCeU1haW5GcmFtZTo6VW5rbm93biB9OwogICAgIGZyYW1lTG9hZFJlcXVl
c3QuZGlzYWJsZU5hdmlnYXRpb25Ub0ludmFsaWRVUkwoKTsKICAgICBmcmFtZS5sb2FkZXIoKS5j
aGFuZ2VMb2NhdGlvbihXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVVzZXJBZ2VudChFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyogdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlVXNlckFnZW50KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgbV91c2VyQWdlbnRPdmVycmlkZSA9IHZhbHVlID8gKnZhbHVlIDogU3Ry
aW5nKCk7CisgICAgbV91c2VyQWdlbnRPdmVycmlkZSA9IHZhbHVlOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotc3RhdGljIGlubGluZSBPcHRpb25hbDxib29sPiBhc09wdGlvbmFsQm9vbChjb25z
dCBib29sKiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBh
Z2VBZ2VudDo6b3ZlcnJpZGVTZXR0aW5nKFByb3RvY29sOjpQYWdlOjpTZXR0aW5nIHNldHRpbmcs
IE9wdGlvbmFsPGJvb2w+JiYgdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gKnZhbHVlOwotfQotCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6b3ZlcnJpZGVTZXR0aW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBzZXR0aW5nU3RyaW5nLCBjb25zdCBib29sKiB2YWx1ZSkKLXsKLSAgICBpZiAo
c2V0dGluZ1N0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAic2V0dGlu
Z1N0cmluZyBpcyBlbXB0eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8g
c2V0dGluZyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nPihzZXR0
aW5nU3RyaW5nKTsKLSAgICBpZiAoIXNldHRpbmcpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBt
YWtlU3RyaW5nKCJVbmtub3duIHNldHRpbmdTdHJpbmc6ICJfcywgc2V0dGluZ1N0cmluZyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Mg
PSBtX2luc3BlY3RlZFBhZ2Uuc2V0dGluZ3MoKTsKIAotICAgIGF1dG8gb3ZlcnJpZGVWYWx1ZSA9
IGFzT3B0aW9uYWxCb29sKHZhbHVlKTsKLSAgICBzd2l0Y2ggKHNldHRpbmcudmFsdWUoKSkgewot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlRW5hYmxlZDoKLSAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclBy
ZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OkFk
Q2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQsIG92ZXJyaWRlVmFsdWUpOwotICAgICAg
ICByZXR1cm47CisgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAgY2FzZSBQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZzo6QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZDoKKyAgICAgICAg
bV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6
OkRldmVsb3BlclByZWZlcmVuY2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQs
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2V0dGluZzo6QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6Ci0gICAgICAg
IGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZEluc3Bl
Y3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQ
cm90b2NvbDo6UGFnZTo6U2V0dGluZzo6QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6CisgICAg
ICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZElu
c3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2Ug
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SUNFQ2FuZGlkYXRlRmlsdGVyaW5n
RW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldElDRUNhbmRpZGF0ZUZp
bHRlcmluZ0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklDRUNhbmRpZGF0ZUZp
bHRlcmluZ0VuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJQ0VDYW5k
aWRhdGVGaWx0ZXJpbmdFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5n
OjpJVFBEZWJ1Z01vZGVFbmFibGVkOgotICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJl
ZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6SVRQ
RGVidWdNb2RlRW5hYmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJVFBEZWJ1Z01vZGVFbmFibGVkOgorICAgICAg
ICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVu
dDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6SVRQRGVidWdNb2RlRW5hYmxlZCwgdmFsdWUpOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZXR0aW5nOjpJbWFnZXNFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0
SW1hZ2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SW1hZ2VzRW5hYmxlZDoK
KyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldEltYWdlc0VuYWJsZWRJbnNwZWN0b3JP
dmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbjoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJl
cXVpcmVzU2VjdXJlQ29ubmVjdGlvbkluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwot
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0
dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uSW5zcGVjdG9yT3Zl
cnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOgotICAg
ICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZElu
c3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICBtX2NsaWVudC0+c2V0RGV2
ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVy
ZW5jZTo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNb2NrQ2FwdHVyZURl
dmljZXNFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgbV9jbGll
bnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVs
b3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6TmVlZHNTaXRlU3BlY2lmaWNRdWlya3M6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0
aW5ncy5zZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrc0luc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRl
VmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGlu
Zzo6TmVlZHNTaXRlU3BlY2lmaWNRdWlya3M6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrc0luc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2V0dGluZzo6U2NyaXB0RW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNl
dFNjcmlwdEVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNjcmlwdEVuYWJsZWQ6
CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkSW5zcGVjdG9y
T3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93RGVidWdCb3JkZXJzOgotICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd0RlYnVnQm9yZGVyc0luc3BlY3Rvck92ZXJyaWRl
KG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZzo6U2hvd0RlYnVnQm9yZGVyczoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRp
bmdzLnNldFNob3dEZWJ1Z0JvcmRlcnNJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRp
bmc6OlNob3dSZXBhaW50Q291bnRlcjoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNl
dFNob3dSZXBhaW50Q291bnRlckluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd1JlcGFp
bnRDb3VudGVyOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd1JlcGFpbnRD
b3VudGVySW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJSVENFbmNyeXB0
aW9uRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlJUQ0VuY3J5
cHRpb25FbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJSVENFbmNyeXB0aW9u
RW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlJUQ0VuY3J5cHRp
b25FbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJTZWN1cml0
eUVuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRXZWJTZWN1cml0eUVu
YWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlNlY3VyaXR5RW5hYmxlZDoKKyAg
ICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlNlY3VyaXR5RW5hYmxlZEluc3BlY3Rv
ck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3kgY29va2llU2FtZVNpdGVQb2xp
Y3lKU09OKENvb2tpZTo6U2FtZVNpdGVQb2xpY3kgcG9saWN5KQorc3RhdGljIFByb3RvY29sOjpQ
YWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeSBjb29raWVTYW1lU2l0ZVBvbGljeUpTT04oQ29va2ll
OjpTYW1lU2l0ZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBj
YXNlIENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKICAgICBj
YXNlIENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6OkxheDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDsKICAgICBjYXNl
IENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6OlN0cmljdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpTdHJpY3Q7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDsKICAg
ICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOworICAgIHJldHVybiBQcm90
b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU7CiB9CiAKLXN0YXRpYyBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShj
b25zdCBDb29raWUmIGNvb2tpZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4g
YnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4g
UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5hbWUoY29va2ll
Lm5hbWUpCiAgICAgICAgIC5zZXRWYWx1ZShjb29raWUudmFsdWUpCiAgICAgICAgIC5zZXREb21h
aW4oY29va2llLmRvbWFpbikKQEAgLTUzOCw5ICs1MjIsOSBAQCBzdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29v
a2llJgogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMo
TGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCitzdGF0aWMgUmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNo
U2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQogewotICAgIGF1dG8gY29va2llcyA9IEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CisgICAg
YXV0byBjb29raWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3Jl
YXRlKCk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IGNvb2tpZXNMaXN0KQogICAg
ICAgICBjb29raWVzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvb2tpZSkpOwpAQCAt
NTYwLDcgKzU0NCw3IEBAIHN0YXRpYyBWZWN0b3I8VVJMPiBhbGxSZXNvdXJjZXNVUkxzRm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4mIGNvb2tpZXMpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPj4+
IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcygpCiB7CiAgICAgTGlzdEhhc2hTZXQ8Q29v
a2llPiBhbGxSYXdDb29raWVzOwogCkBAIC01NzksNzIgKzU2Myw4NCBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3RvcgogICAgICAgICB9CiAgICAgfQogCi0gICAgY29va2llcyA9IGJ1aWxkQXJyYXlG
b3JDb29raWVzKGFsbFJhd0Nvb2tpZXMpOworICAgIHJldHVybiBidWlsZEFycmF5Rm9yQ29va2ll
cyhhbGxSYXdDb29raWVzKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29r
aWVPYmplY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGNv
b2tpZU9iamVjdCkKK3N0YXRpYyBPcHRpb25hbDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29v
a2llT2JqZWN0KQogewogICAgIENvb2tpZSBjb29raWU7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVj
dC5nZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKSkgeworICAgIGNvb2tpZS5uYW1lID0g
Y29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6bmFtZUtleSk7
CisgICAgaWYgKCFjb29raWUubmFtZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlk
IHZhbHVlIGZvciBrZXkgbmFtZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygidmFs
dWUiX3MsIGNvb2tpZS52YWx1ZSkpIHsKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmplY3Qt
PmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjp2YWx1ZUtleSk7CisgICAgaWYgKCFj
b29raWUudmFsdWUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Ig
a2V5IHZhbHVlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJkb21haW4iX3MsIGNv
b2tpZS5kb21haW4pKSB7CisgICAgY29va2llLmRvbWFpbiA9IGNvb2tpZU9iamVjdC0+Z2V0U3Ry
aW5nKFByb3RvY29sOjpQYWdlOjpDb29raWU6OmRvbWFpbktleSk7CisgICAgaWYgKCFjb29raWUu
ZG9tYWluKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBk
b21haW4gaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tpZS5w
YXRoKSkgeworICAgIGNvb2tpZS5wYXRoID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZTo6cGF0aEtleSk7CisgICAgaWYgKCFjb29raWUucGF0aCkgewogICAg
ICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgcGF0aCBpbiBnaXZlbiBj
b29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICgh
Y29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKSB7
CisgICAgYXV0byBodHRwT25seSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6
UGFnZTo6Q29va2llOjpodHRwT25seUtleSk7CisgICAgaWYgKCFodHRwT25seSkgewogICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgaHR0cE9ubHkgaW4gZ2l2ZW4g
Y29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAo
IWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZWN1cmUiX3MsIGNvb2tpZS5zZWN1cmUpKSB7Cisg
ICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCisgICAgYXV0byBzZWN1cmUgPSBjb29r
aWVPYmplY3QtPmdldEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2VjdXJlS2V5KTsK
KyAgICBpZiAoIXNlY3VyZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVl
IGZvciBrZXkgc2VjdXJlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgfQogCi0gICAgYm9vbCB2YWxpZFNlc3Npb24gPSBjb29raWVPYmplY3QuZ2V0
Qm9vbGVhbigic2Vzc2lvbiJfcywgY29va2llLnNlc3Npb24pOwotICAgIGNvb2tpZS5leHBpcmVz
ID0gY29va2llT2JqZWN0LmdldE51bWJlcjxkb3VibGU+KCJleHBpcmVzIl9zKTsKLSAgICBpZiAo
IXZhbGlkU2Vzc2lvbiAmJiAhY29va2llLmV4cGlyZXMpIHsKKyAgICBjb29raWUuc2VjdXJlID0g
KnNlY3VyZTsKKworICAgIGF1dG8gc2Vzc2lvbiA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbihQ
cm90b2NvbDo6UGFnZTo6Q29va2llOjpzZXNzaW9uS2V5KTsKKyAgICBjb29raWUuZXhwaXJlcyA9
IGNvb2tpZU9iamVjdC0+Z2V0RG91YmxlKFByb3RvY29sOjpQYWdlOjpDb29raWU6OmV4cGlyZXNL
ZXkpOworICAgIGlmICghc2Vzc2lvbiAmJiAhY29va2llLmV4cGlyZXMpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IGV4cGlyZXMgaW4gZ2l2ZW4gY29va2ll
IjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgc2Ft
ZVNpdGVTdHJpbmc7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJzYW1lU2l0ZSJf
cywgc2FtZVNpdGVTdHJpbmcpKSB7CisgICAgY29va2llLnNlc3Npb24gPSAqc2Vzc2lvbjsKKwor
ICAgIGF1dG8gc2FtZVNpdGVTdHJpbmcgPSBjb29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2Nv
bDo6UGFnZTo6Q29va2llOjpzYW1lU2l0ZUtleSk7CisgICAgaWYgKCFzYW1lU2l0ZVN0cmluZykg
ewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgc2FtZVNpdGUg
aW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAK
LSAgICBhdXRvIHNhbWVTaXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVy
czo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZVNhbWVTaXRlUG9saWN5PihzYW1lU2l0ZVN0cmluZyk7CisgICAgYXV0byBzYW1lU2l0ZSA9
IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlBh
Z2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5PihzYW1lU2l0ZVN0cmluZyk7CiAgICAgaWYgKCFzYW1l
U2l0ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgc2Ft
ZVNpdGUgaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKICAgICBzd2l0Y2ggKHNhbWVTaXRlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOgorICAgIGNhc2Ug
UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOgogICAgICAgICBjb29r
aWUuc2FtZVNpdGUgPSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpOb25lOwotCiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQ
b2xpY3k6OkxheDoKKworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9s
aWN5OjpMYXg6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0ZSA9IENvb2tpZTo6U2FtZVNpdGVQb2xp
Y3k6OkxheDsKLQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6CisKKyAgICBjYXNlIFByb3RvY29s
OjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0OgogICAgICAgICBjb29raWUuc2Ft
ZVNpdGUgPSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpTdHJpY3Q7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTY1MiwxMSArNjQ4LDEzIEBAIHN0YXRpYyBPcHRpb25hbDxDb29raWU+IHBhcnNl
Q29va2llT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6CiAgICAg
cmV0dXJuIGNvb2tpZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvb2tpZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRD
b29raWUoUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWVPYmplY3QpCiB7Ci0gICAgYXV0byBjb29r
aWUgPSBwYXJzZUNvb2tpZU9iamVjdChlcnJvclN0cmluZywgY29va2llT2JqZWN0KTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRvIGNvb2tpZSA9IHBh
cnNlQ29va2llT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGNvb2tpZU9iamVjdCkpOwogICAg
IGlmICghY29va2llKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKICAgICBmb3IgKGF1dG8qIGZyYW1lID0gJm1faW5zcGVjdGVk
UGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgewogICAgICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkg
ewpAQCAtNjY0LDkgKzY2MiwxMSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29va2ll
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JgogICAgICAgICAg
ICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLnNldFJhd0Nvb2tpZSgqZG9jdW1lbnQsIGNvb2tpZS52
YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBVUkwgcGFyc2VkVVJMKHsgfSwg
dXJsKTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKQEAgLTY3
NSw0OCArNjc1LDU5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvCiAgICAgICAgICAgICAgICAg
cGFnZS0+Y29va2llSmFyKCkuZGVsZXRlQ29va2llKCpkb2N1bWVudCwgcGFyc2VkVVJMLCBjb29r
aWVOYW1lKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+JiBvYmplY3QpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPj4gSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoKQogewotICAgIG9iamVj
dCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkp
OworICAgIHJldHVybiBidWlsZE9iamVjdEZvckZyYW1lVHJlZSgmbV9pbnNwZWN0ZWRQYWdlLm1h
aW5GcmFtZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29u
dGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVu
Y29kZWQgKi8+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVudChjb25zdCBQ
cm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZy
YW1lID0gYXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAotICAgIHJlc291cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIFVSTCh7IH0s
IHVybCksIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpOworICAgIFN0cmluZyBjb250ZW50OworICAg
IGJvb2wgYmFzZTY0RW5jb2RlZDsKKworICAgIHJlc291cmNlQ29udGVudChlcnJvclN0cmluZywg
ZnJhbWUsIFVSTCh7IH0sIHVybCksICZjb250ZW50LCAmYmFzZTY0RW5jb2RlZCk7CisKKyAgICBy
ZXR1cm4geyB7IGNvbnRlbnQsIGJhc2U2NEVuY29kZWQgfSB9OwogfQogCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2V0Qm9vdHN0cmFwU2NyaXB0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFNvdXJjZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2V0Qm9vdHN0cmFwU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlKQogewot
ICAgIG1fYm9vdHN0cmFwU2NyaXB0ID0gb3B0aW9uYWxTb3VyY2UgPyAqb3B0aW9uYWxTb3VyY2Ug
OiBudWxsU3RyaW5nKCk7CisgICAgbV9ib290c3RyYXBTY3JpcHQgPSBzb3VyY2U7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hN
YXRjaD4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJv
b2w+JiYgaXNSZWdleCwgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVz
dElkKQogewotICAgIHJlc3VsdHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVn
ZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7Ci0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwot
Ci0gICAgaWYgKG9wdGlvbmFsUmVxdWVzdElkKSB7CisgICAgaWYgKCEhcmVxdWVzdElkKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZE5ldHdvcmtBZ2VudCgpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrQWdlbnQtPnNlYXJjaElu
UmVxdWVzdChlcnJvclN0cmluZywgKm9wdGlvbmFsUmVxdWVzdElkLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSwgaXNSZWdleCwgcmVzdWx0cyk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRj
aD4+IHJlc3VsdDsKKyAgICAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoSW5SZXF1ZXN0KGVy
cm9yU3RyaW5nLCByZXF1ZXN0SWQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYmICpjYXNlU2Vuc2l0
aXZlLCBpc1JlZ2V4ICYmICppc1JlZ2V4LCByZXN1bHQpOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBEb2N1bWVudExvYWRlciogbG9hZGVy
ID0gYXNzZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKICAgICBpZiAoIWxv
YWRlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgVVJMIGt1cmwoeyB9LCB1cmwpOwogCkBAIC03MzUsMjkgKzc0Niwy
NiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIH0KIAogICAgIGlmICghc3VjY2VzcykK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOwogCi0gICAgcmVzdWx0cyA9IENv
bnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoY29udGVudCwgcXVlcnks
IGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgIHJldHVybiBDb250ZW50U2VhcmNoVXRpbGl0
aWVzOjpzZWFyY2hJblRleHRCeUxpbmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYm
ICpjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4ICYmICppc1JlZ2V4KTsKIH0KIAotc3RhdGljIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2Vh
cmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBt
YXRjaGVzQ291bnQpCitzdGF0aWMgUmVmPFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1
aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKIHsKLSAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQor
ICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQogICAgICAg
ICAuc2V0VXJsKHVybCkKICAgICAgICAgLnNldEZyYW1lSWQoZnJhbWVJZCkKICAgICAgICAgLnNl
dE1hdGNoZXNDb3VudChtYXRjaGVzQ291bnQpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25z
dCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4+
IEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoY29uc3QgU3RyaW5nJiB0ZXh0
LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdl
eCkKIHsKLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pjo6Y3JlYXRlKCk7CiAKLSAgICBib29s
IGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlIDogZmFsc2U7Ci0gICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9w
dGlvbmFsSXNSZWdleCA6IGZhbHNlOwotCi0gICAgYXV0byBzZWFyY2hTdHJpbmdUeXBlID0gaXNS
ZWdleCA/IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDog
Q29udGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNTdHJpbmc7
Ci0gICAgYXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVJlZ3VsYXJF
eHByZXNzaW9uRm9yU2VhcmNoU3RyaW5nKHRleHQsIGNhc2VTZW5zaXRpdmUsIHNlYXJjaFN0cmlu
Z1R5cGUpOworICAgIGF1dG8gc2VhcmNoU3RyaW5nVHlwZSA9IChpc1JlZ2V4ICYmICppc1JlZ2V4
KSA/IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDogQ29u
dGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNTdHJpbmc7Cisg
ICAgYXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVJlZ3VsYXJFeHBy
ZXNzaW9uRm9yU2VhcmNoU3RyaW5nKHRleHQsIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5zaXRp
dmUsIHNlYXJjaFN0cmluZ1R5cGUpOwogCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CiAgICAgICAgIGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRS
ZXNvdXJjZXNGb3JGcmFtZShmcmFtZSkpIHsKQEAgLTc3MSwyNCArNzc5LDMwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uCiAKICAgICBpZiAoYXV0byogbmV0d29ya0FnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWROZXR3b3JrQWdlbnQoKSkKICAgICAgICAgbmV0d29ya0FnZW50
LT5zZWFyY2hPdGhlclJlcXVlc3RzKHJlZ2V4LCByZXN1bHQpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sIHNob3dSdWxlcnMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMo
Ym9vbCBzaG93UnVsZXJzKQogewogICAgIG1fb3ZlcmxheS0+c2V0U2hvd1J1bGVycyhzaG93UnVs
ZXJzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRS
ZWN0cyhib29sIHNob3cpCiB7CiAgICAgbV9zaG93UGFpbnRSZWN0cyA9IHNob3c7CiAgICAgbV9j
bGllbnQtPnNldFNob3dQYWludFJlY3RzKHNob3cpOwogCiAgICAgaWYgKG1fY2xpZW50LT5vdmVy
cmlkZXNTaG93UGFpbnRSZWN0cygpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBtX292ZXJsYXktPnNldFNob3dQYWludFJlY3RzKHNob3cpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRFdmVudEZp
cmVkKCkKQEAgLTgxNiw3ICs4MzAsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVE
ZXRhY2hlZChGcmFtZSYgZnJhbWUpCiAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaWRl
bnRpZmllcik7CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29u
c3QgU3RyaW5nJiBmcmFtZUlkKQorRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVGb3JJ
ZChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICByZXR1
cm4gZnJhbWVJZC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9pZGVudGlmaWVyVG9GcmFtZS5nZXQo
ZnJhbWVJZCk7CiB9CkBAIC04NDEsNyArODU1LDcgQEAgU3RyaW5nIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkKQorRnJhbWUqIEluc3BlY3Rv
clBhZ2VBZ2VudDo6YXNzZXJ0RnJhbWUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVGb3JJZChmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtODc3
LDcgKzg5MSw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUNsZWFyZWRTY2hlZHVs
ZWROYXZpZ2F0aW9uKEZyYW1lJiBmcmFtZSkKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWZh
dWx0QXBwZWFyYW5jZURpZENoYW5nZShib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewotICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBw
ZWFyYW5jZSA/IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodCk7CisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJh
bmNlID8gUHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBQcm90b2NvbDo6UGFnZTo6
QXBwZWFyYW5jZTo6TGlnaHQpOwogfQogI2VuZGlmCiAKQEAgLTkzMywxMSArOTQ3LDExIEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKICAgICBtX292ZXJs
YXktPnVwZGF0ZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+
IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCitS
ZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVF9BUkcoZnJhbWUsIGZyYW1lKTsK
IAotICAgIGF1dG8gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFt
ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGZyYW1lT2JqZWN0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1l
OjpjcmVhdGUoKQogICAgICAgICAuc2V0SWQoZnJhbWVJZChmcmFtZSkpCiAgICAgICAgIC5zZXRM
b2FkZXJJZChsb2FkZXJJZChmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpCiAgICAg
ICAgIC5zZXRVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKQpAQCAtOTU2LDE5
ICs5NzAsMTkgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnIKICAgICByZXR1cm4gZnJhbWVPYmpl
Y3Q7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJl
ZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZnJh
bWUpCitSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NF
UlRfQVJHKGZyYW1lLCBmcmFtZSk7CiAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShmcmFtZSk7Ci0gICAg
YXV0byBzdWJyZXNvdXJjZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVhdGUoKTsKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQorICAgIFJlZjxQ
cm90b2NvbDo6UGFnZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShm
cmFtZSk7CisgICAgYXV0byBzdWJyZXNvdXJjZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRGcmFtZShX
VEZNb3ZlKGZyYW1lT2JqZWN0KSkKICAgICAgICAgLnNldFJlc291cmNlcyhzdWJyZXNvdXJjZXMu
Y29weVJlZigpKQogICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgZm9yIChhdXRvKiBjYWNoZWRS
ZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKSkgewotICAgICAgICBhdXRv
IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IFByb3RvY29sOjpQYWdl
OjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFVybChjYWNoZWRSZXNv
dXJjZS0+dXJsKCkuc3RyaW5nKCkpCiAgICAgICAgICAgICAuc2V0VHlwZShjYWNoZWRSZXNvdXJj
ZVR5cGVKU09OKCpjYWNoZWRSZXNvdXJjZSkpCiAgICAgICAgICAgICAuc2V0TWltZVR5cGUoY2Fj
aGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSkKQEAgLTk4NiwyMSArMTAwMCwyMSBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplYwogICAgICAgICBzdWJyZXNvdXJjZXMtPmFkZEl0ZW0o
V1RGTW92ZShyZXNvdXJjZU9iamVjdCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gY2hpbGRy
ZW5BcnJheTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVS
ZXNvdXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5OwogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJh
bWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWNoaWxkcmVuQXJyYXkpIHsKLSAgICAgICAgICAg
IGNoaWxkcmVuQXJyYXkgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldENo
aWxkRnJhbWVzKGNoaWxkcmVuQXJyYXkpOworICAgICAgICAgICAgY2hpbGRyZW5BcnJheSA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPjo6Y3JlYXRlKCk7
CisgICAgICAgICAgICByZXN1bHQtPnNldENoaWxkRnJhbWVzKCpjaGlsZHJlbkFycmF5KTsKICAg
ICAgICAgfQogICAgICAgICBjaGlsZHJlbkFycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRnJh
bWVUcmVlKGNoaWxkKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBtZWRpYSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0RW11bGF0ZWRNZWRpYShjb25zdCBTdHJpbmcmIG1lZGlhKQogewogICAgIGlmICht
ZWRpYSA9PSBtX2VtdWxhdGVkTWVkaWEpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIG1fZW11bGF0ZWRNZWRpYSA9IG1lZGlhOwogCkBAIC0xMDA5LDIxICsxMDIz
LDM0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBtZWRpYSkKIAogICAgIGF1dG8gZG9jdW1lbnQgPSBtYWtlUmVm
UHRyKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudCgpKTsKICAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBkb2N1
bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAgICAgZG9jdW1lbnQtPmV2YWx1YXRlTWVkaWFRdWVyaWVz
QW5kUmVwb3J0Q2hhbmdlcygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogI2lmIEVOQUJMRShE
QVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGFwcGVhcmFuY2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoT3B0aW9uYWw8UHJvdG9jb2w6OlBhZ2U6OkFw
cGVhcmFuY2U+JiYgYXBwZWFyYW5jZSkKIHsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSAiTGlnaHQi
X3MpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRl
KGZhbHNlKTsKLSAgICBlbHNlIGlmIChhcHBlYXJhbmNlID09ICJEYXJrIl9zKQotICAgICAgICBt
X2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZSh0cnVlKTsKLSAgICBl
bHNlCisgICAgaWYgKCFhcHBlYXJhbmNlKSB7CiAgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRV
c2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKFdURjo6bnVsbG9wdCk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgc3dpdGNoICgqYXBwZWFyYW5jZSkgeworICAgIGNhc2UgUHJvdG9j
b2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0OgorICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0
VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJrOgorICAgICAgICBtX2lu
c3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZSh0cnVlKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OwogfQogI2VuZGlmCiAKQEAgLTEwMzksNTEgKzEwNjYsNDcgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmFwcGx5RW11bGF0ZWRNZWRpYShTdHJpbmcmIG1lZGlhKQogICAgICAgICBt
ZWRpYSA9IG1fZW11bGF0ZWRNZWRpYTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNu
YXBzaG90Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFN0cmluZyog
b3V0RGF0YVVSTCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpzbmFwc2hvdE5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50
KCk7CiAgICAgQVNTRVJUKGRvbUFnZW50KTsKICAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQtPmFz
c2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gV2ViQ29yZTo6c25hcHNo
b3ROb2RlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSwgKm5vZGUpOwotICAgIGlmICghc25h
cHNob3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGNhcHR1cmUgc25hcHNo
b3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzbmFwc2hvdCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfcyk7
CiAKLSAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywg
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgcmV0dXJuIHNuYXBz
aG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3Qo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvclBhZ2VBZ2VudDo6c25h
cHNob3RSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBQcm90b2NvbDo6
UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQogewogICAgIFNuYXBzaG90
T3B0aW9ucyBvcHRpb25zID0gU25hcHNob3RPcHRpb25zTm9uZTsKLSAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSAiVmlld3BvcnQiKQorICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IFByb3Rv
Y29sOjpQYWdlOjpDb29yZGluYXRlU3lzdGVtOjpWaWV3cG9ydCkKICAgICAgICAgb3B0aW9ucyB8
PSBTbmFwc2hvdE9wdGlvbnNJblZpZXdDb29yZGluYXRlczsKIAogICAgIEludFJlY3QgcmVjdGFu
Z2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVjdChtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1l
KCksIHJlY3RhbmdsZSwgb3B0aW9ucyk7CiAKLSAgICBpZiAoIXNuYXBzaG90KSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiQ291bGQgbm90IGNhcHR1cmUgc25hcHNob3QiX3MpOwogCi0gICAgKm91dERhdGFV
UkwgPSBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIHJldHVybiBzbmFwc2hvdC0+dG9EYXRhVVJMKCJp
bWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogfQog
CiAjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZl
KCkKIHsKICAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpKTsKLSAgICBpZiAoIWFyY2hpdmUpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWFyY2hpdmUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFp
biBmcmFtZSJfcyk7CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZl
LT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKLSAgICAqZGF0YSA9IGJhc2U2NEVuY29kZShDRkRh
dGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkp
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgp
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCmlu
ZGV4IDNiY2QwNDg3Y2ZjODc2NmJhYTAxYzc4MDQxNzNhMTU3NDdiNDdiMmQuLmQyYjA2NWUxMzY1
MWZhZmU3NDczMjVmMDJlNzcwMWZiZjFlOGU0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtNTEsMTQgKzUxLDEy
IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdl
bnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpQ
YWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JQYWdlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIEluc3BlY3RvclBhZ2VBZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yQ2xp
ZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwotICAgIH5JbnNwZWN0b3JQYWdlQWdlbnQoKSBvdmVy
cmlkZTsKKyAgICB+SW5zcGVjdG9yUGFnZUFnZW50KCk7CiAKICAgICBlbnVtIFJlc291cmNlVHlw
ZSB7CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2UsCkBAIC03OSw3ICs3Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBib29sIHNoYXJlZEJ1ZmZlckNvbnRlbnQoUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4mJiwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNv
ZGUsIFN0cmluZyogcmVzdWx0KTsKICAgICBzdGF0aWMgVmVjdG9yPENhY2hlZFJlc291cmNlKj4g
Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqKTsKLSAgICBzdGF0aWMgdm9pZCByZXNvdXJj
ZUNvbnRlbnQoRXJyb3JTdHJpbmcmLCBGcmFtZSosIGNvbnN0IFVSTCYsIFN0cmluZyogcmVzdWx0
LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUNvbnRlbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBGcmFtZSosIGNvbnN0IFVSTCYsIFN0
cmluZyogcmVzdWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKICAgICBzdGF0aWMgU3RyaW5nIHNv
dXJjZU1hcFVSTEZvclJlc291cmNlKENhY2hlZFJlc291cmNlKik7CiAgICAgc3RhdGljIENhY2hl
ZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShGcmFtZSosIGNvbnN0IFVSTCYpOwogICAgIHN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlSlNP
TihSZXNvdXJjZVR5cGUpOwpAQCAtODcsMzkgKzg1LDM5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVzb3VyY2VUeXBlIGluc3BlY3RvclJlc291cmNlVHlwZShjb25zdCBDYWNoZWRSZXNvdXJjZSYp
OwogICAgIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgY2Fj
aGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwogICAgIHN0YXRpYyBG
cmFtZSogZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKFBhZ2UmLCBjb25zdCBTdHJpbmcmIG9y
aWdpblJhd1N0cmluZyk7Ci0gICAgc3RhdGljIERvY3VtZW50TG9hZGVyKiBhc3NlcnREb2N1bWVu
dExvYWRlcihFcnJvclN0cmluZyYsIEZyYW1lKik7CisgICAgc3RhdGljIERvY3VtZW50TG9hZGVy
KiBhc3NlcnREb2N1bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYs
IEZyYW1lKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91
dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAg
IC8vIFBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZWxv
YWRGcm9tT3JpZ2luLCBjb25zdCBib29sKiBvcHRpb25hbFJldmFsaWRhdGVBbGxSZXNvdXJjZXMp
IG92ZXJyaWRlOwotICAgIHZvaWQgbmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvdmVycmlkZVVzZXJBZ2VudChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgb3ZlcnJpZGVTZXR0aW5n
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZXR0aW5nLCBjb25zdCBib29sKiB2YWx1ZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4mIGNvb2tpZXMpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0Q29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBjb29raWVPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlQ29va2llKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVu
Y29kZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Qm9vdHN0cmFwU2NyaXB0KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNvdXJjZSkgZmluYWw7Ci0gICAgdm9pZCBzZWFyY2hJ
blJlc291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxSZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VhcmNoSW5S
ZXNvdXJjZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxvYWQoT3B0aW9uYWw8Ym9vbD4m
JiBpZ25vcmVDYWNoZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXZhbGlkYXRlQWxsUmVzb3VyY2VzKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG5hdmlnYXRlKGNv
bnN0IFN0cmluZyYgdXJsKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IG92ZXJyaWRlVXNlckFnZW50KGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gb3ZlcnJpZGVTZXR0aW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmcsIE9wdGlvbmFsPGJvb2w+JiYgdmFsdWUpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4+IGdldENvb2tpZXMoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldENvb2tpZShSZWY8SlNPTjo6T2Jq
ZWN0PiYmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRl
bGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IGdldFJlc291cmNlVHJlZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIGJv
b2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IGdldFJlc291cmNlQ29udGVudChjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Qm9vdHN0cmFwU2Ny
aXB0KGNvbnN0IFN0cmluZyYgc291cmNlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+Pj4gc2VhcmNoSW5SZXNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcXVlcnksIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4m
JiBpc1JlZ2V4LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+PiBzZWFyY2hJblJl
c291cmNlcyhjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9w
dGlvbmFsPGJvb2w+JiYgaXNSZWdleCk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
dm9pZCBzZXRTaG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTaG93UnVsZXJzKGJvb2wp
OwogI2VuZGlmCi0gICAgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYsIGJvb2wg
c2hvdykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXRTaG93UGFpbnRSZWN0cyhib29sKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEVtdWxhdGVkTWVkaWEoY29uc3QgU3RyaW5n
Jik7CiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCi0gICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRGb3JjZWRBcHBlYXJhbmNlKE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkFwcGVhcmFuY2U+JiYpOwogI2VuZGlmCi0gICAgdm9pZCBzbmFwc2hvdE5vZGUoRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOwotICAgIHZv
aWQgc25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwgU3RyaW5nKiBvdXREYXRh
VVJMKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0
cmluZz4gc25hcHNob3ROb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gc25hcHNob3RSZWN0
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29yZGluYXRlU3lzdGVtKTsKICNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVT
RShDRikKLSAgICB2b2lkIGFyY2hpdmUoRXJyb3JTdHJpbmcmLCBTdHJpbmcqIGRhdGEpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBhcmNo
aXZlKCk7CiAjZW5kaWYKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgpAQCAtMTQz
LDEwICsxNDEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkU2Nyb2xsKCk7CiAgICAgdm9pZCBk
aWRSZWNhbGN1bGF0ZVN0eWxlKCk7CiAKLSAgICBGcmFtZSogZnJhbWVGb3JJZChjb25zdCBTdHJp
bmcmIGZyYW1lSWQpOworICAgIEZyYW1lKiBmcmFtZUZvcklkKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZnJh
bWVJZChGcmFtZSopOwogICAgIFN0cmluZyBsb2FkZXJJZChEb2N1bWVudExvYWRlciopOwotICAg
IEZyYW1lKiBhc3NlcnRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7
CisgICAgRnJhbWUqIGFzc2VydEZyYW1lKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOwogCiBwcml2
YXRlOgogICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmluZGV4IDBi
NDY2MDY4ZDkwZmUxNDk1YTg0MjliNzYzOWYzMTM1YmQ0MzNmNDguLjBkZjk1MDU3MDNkMGIzODE4
MTEyNWU1MzAxZTIwNDExMjdmYzNiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtMTAyLDgw
ICsxMDIsODIgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXQKIAogdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nv
bm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGln
bm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgPT0gdGhpcykgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZFRpbWVsaW5lQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIlRpbWVsaW5lIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnNldEVuYWJsZWRUaW1lbGluZUFnZW50KHRoaXMpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaXNhYmxlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFRpbWVsaW5lQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIlRpbWVsaW5lIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFRpbWVsaW5lQWdl
bnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlRpbWVsaW5lIGRv
bWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5z
ZXRFbmFibGVkVGltZWxpbmVBZ2VudChudWxscHRyKTsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgc3RvcChpZ25vcmVkKTsKKyAgICBzdG9wKCk7CiAKICAgICBtX2F1dG9DYXB0dXJl
RW5hYmxlZCA9IGZhbHNlOwogICAgIG1faW5zdHJ1bWVudHMuY2xlYXIoKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnQoRXJyb3JTdHJp
bmcmLCBjb25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnQoT3B0aW9uYWw8aW50PiYmIG1h
eENhbGxTdGFja0RlcHRoKQogewogICAgIG1fdHJhY2tpbmdGcm9tRnJvbnRlbmQgPSB0cnVlOwog
Ci0gICAgaW50ZXJuYWxTdGFydChtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgaW50ZXJuYWxTdGFy
dChXVEZNb3ZlKG1heENhbGxTdGFja0RlcHRoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3AoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcCgpCiB7CiAg
ICAgaW50ZXJuYWxTdG9wKCk7CiAKICAgICBtX3RyYWNraW5nRnJvbUZyb250ZW5kID0gZmFsc2U7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNl
dEF1dG9DYXB0dXJlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEF1dG9DYXB0
dXJlRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9hdXRvQ2FwdHVyZUVuYWJsZWQgPSBl
bmFibGVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzZXRJbnN0cnVtZW50cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046
OkFycmF5JiBpbnN0cnVtZW50cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnNldEluc3RydW1lbnRzKFJlZjxKU09OOjpBcnJheT4mJiBpbnN0
cnVtZW50cykKIHsKICAgICBWZWN0b3I8UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PiBu
ZXdJbnN0cnVtZW50czsKLSAgICBuZXdJbnN0cnVtZW50cy5yZXNlcnZlQ2FwYWNpdHkoaW5zdHJ1
bWVudHMubGVuZ3RoKCkpOworICAgIG5ld0luc3RydW1lbnRzLnJlc2VydmVDYXBhY2l0eShpbnN0
cnVtZW50cy0+bGVuZ3RoKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVtZW50VmFs
dWUgOiBpbnN0cnVtZW50cykgewotICAgICAgICBTdHJpbmcgZW51bVZhbHVlU3RyaW5nOwotICAg
ICAgICBpZiAoIWluc3RydW1lbnRWYWx1ZS0+YXNTdHJpbmcoZW51bVZhbHVlU3RyaW5nKSkgewot
ICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24tc3RyaW5nIHZhbHVlIGlu
IGdpdmVuIGluc3RydW1lbnRzIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVtZW50VmFsdWUgOiBpbnN0cnVtZW50cy5nZXQoKSkg
eworICAgICAgICBhdXRvIGluc3RydW1lbnRTdHJpbmcgPSBpbnN0cnVtZW50VmFsdWUtPmFzU3Ry
aW5nKCk7CisgICAgICAgIGlmICghaW5zdHJ1bWVudFN0cmluZykKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24tc3RyaW5nIHZhbHVlIGluIGdpdmVuIGlu
c3RydW1lbnRzIl9zKTsKIAotICAgICAgICBPcHRpb25hbDxQcm90b2NvbDo6VGltZWxpbmU6Oklu
c3RydW1lbnQ+IGluc3RydW1lbnRUeXBlID0gUHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ+KGVu
dW1WYWx1ZVN0cmluZyk7Ci0gICAgICAgIGlmICghaW5zdHJ1bWVudFR5cGUpIHsKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBpdGVtIGluIGdpdmVuIGluc3Ry
dW1lbnRzOiAiLCBlbnVtVmFsdWVTdHJpbmcpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgICAgIGF1dG8gaW5zdHJ1bWVudCA9IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PihpbnN0cnVt
ZW50U3RyaW5nKTsKKyAgICAgICAgaWYgKCFpbnN0cnVtZW50KQorICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJpbmcoIlVua25vd24gaW5zdHJ1bWVudDogIiwgaW5zdHJ1
bWVudFN0cmluZykpOwogCi0gICAgICAgIG5ld0luc3RydW1lbnRzLnVuY2hlY2tlZEFwcGVuZCgq
aW5zdHJ1bWVudFR5cGUpOworICAgICAgICBuZXdJbnN0cnVtZW50cy51bmNoZWNrZWRBcHBlbmQo
Kmluc3RydW1lbnQpOwogICAgIH0KIAogICAgIG1faW5zdHJ1bWVudHMuc3dhcChuZXdJbnN0cnVt
ZW50cyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKK3ZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2Fs
bFN0YWNrRGVwdGgpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCiAgICAgICAgIHJldHVybjsKQEAg
LTI5Miw4ICsyOTQsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0RnJvbUNv
bnNvbGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgUwogICAgIC8vIEFsbG93IGR1
cGxpY2F0ZSB1bm5hbWVkIHByb2ZpbGVzLiBEaXNhbGxvdyBkdXBsaWNhdGUgbmFtZWQgcHJvZmls
ZXMuCiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChjb25zdCBUaW1l
bGluZVJlY29yZEVudHJ5JiByZWNvcmQgOiBtX3BlbmRpbmdDb25zb2xlUHJvZmlsZVJlY29yZHMp
IHsKLSAgICAgICAgICAgIFN0cmluZyByZWNvcmRUaXRsZTsKLSAgICAgICAgICAgIHJlY29yZC5k
YXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zLCByZWNvcmRUaXRsZSk7CisgICAgICAgICAgICBhdXRv
IHJlY29yZFRpdGxlID0gcmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MpOwogICAgICAg
ICAgICAgaWYgKHJlY29yZFRpdGxlID09IHRpdGxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQo
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2VuZCBhbiBlbnVtIHRvIHRoZSBm
cm9udGVuZCBmb3IgbG9jYWxpemF0aW9uPwpAQCAtMzE4LDggKzMxOSw3IEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmCiAgICAgZm9yIChpbnQgaSA9IG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVj
b3Jkcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBjb25zdCBUaW1lbGluZVJl
Y29yZEVudHJ5JiByZWNvcmQgPSBtX3BlbmRpbmdDb25zb2xlUHJvZmlsZVJlY29yZHNbaV07CiAK
LSAgICAgICAgU3RyaW5nIHJlY29yZFRpdGxlOwotICAgICAgICByZWNvcmQuZGF0YS0+Z2V0U3Ry
aW5nKCJ0aXRsZSJfcywgcmVjb3JkVGl0bGUpOworICAgICAgICBhdXRvIHJlY29yZFRpdGxlID0g
cmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MpOwogICAgICAgICBpZiAodGl0bGUuaXNF
bXB0eSgpIHx8IHJlY29yZFRpdGxlID09IHRpdGxlKSB7CiAgICAgICAgICAgICBkaWRDb21wbGV0
ZVJlY29yZEVudHJ5KHJlY29yZCk7CiAgICAgICAgICAgICBtX3BlbmRpbmdDb25zb2xlUHJvZmls
ZVJlY29yZHMucmVtb3ZlKGkpOwpAQCAtNDk2LDEwICs0OTYsOCBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6Om1haW5GcmFtZVN0YXJ0ZWRMb2FkaW5nKCkKICAgICBtX2F1dG9DYXB0dXJl
UGhhc2UgPSBBdXRvQ2FwdHVyZVBoYXNlOjpCZWZvcmVMb2FkOwogCiAgICAgLy8gUHJlLWVtcHRp
dmVseSBkaXNhYmxlIGJyZWFrcG9pbnRzLiBUaGUgZnJvbnRlbmQgbXVzdCByZS1lbmFibGUgdGhl
bS4KLSAgICBpZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9y
ZWQsIGZhbHNlKTsKLSAgICB9CisgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgd2Vi
RGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpOwogCiAgICAgLy8gSW5m
b3JtIHRoZSBmcm9udGVuZCB3ZSBzdGFydGVkIGFuIGF1dG8gY2FwdHVyZS4gVGhlIGZyb250ZW5k
IG11c3Qgc3RvcCBjYXB0dXJlLgogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hdXRvQ2FwdHVy
ZVN0YXJ0ZWQoKTsKQEAgLTUyMywxMCArNTIxLDggQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzdGFydFByb2dyYW1tYXRpY0NhcHR1cmUoKQogICAgIC8vIERpc2FibGUgYnJlYWtwb2lu
dHMgZHVyaW5nIHByb2dyYW1tYXRpYyBjYXB0dXJlLgogICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dl
ckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkp
IHsKICAgICAgICAgbV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVW
YWx1ZSA9IHdlYkRlYnVnZ2VyQWdlbnQtPmJyZWFrcG9pbnRzQWN0aXZlKCk7Ci0gICAgICAgIGlm
IChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKSB7Ci0g
ICAgICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICAgICAgd2ViRGVidWdnZXJB
Z2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2UpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZh
bHVlKQorICAgICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUo
ZmFsc2UpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3Jl
QnJlYWtwb2ludEFjdGl2ZVZhbHVlID0gZmFsc2U7CiAKQEAgLTU0NiwxMCArNTQyLDggQEAgdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wUHJvZ3JhbW1hdGljQ2FwdHVyZSgpCiAKICAg
ICAvLyBSZS1lbmFibGUgYnJlYWtwb2ludHMgaWYgdGhleSB3ZXJlIGVuYWJsZWQuCiAgICAgaWYg
KG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMu
ZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewotICAgICAgICAgICAgRXJyb3JTdHJpbmcgaWdu
b3JlZDsKLSAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZl
KGlnbm9yZWQsIHRydWUpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dl
ckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkp
CisgICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZSh0cnVl
KTsKICAgICB9CiB9CiAKQEAgLTU1NywyNiArNTUxLDI2IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6dG9nZ2xlSW5zdHJ1bWVudHMoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAg
IGZvciAoYXV0byBpbnN0cnVtZW50VHlwZSA6IG1faW5zdHJ1bWVudHMpIHsKICAgICAgICAgc3dp
dGNoIChpbnN0cnVtZW50VHlwZSkgewotICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpTY3JpcHRQcm9maWxlcjogeworICAgICAgICBjYXNlIFBy
b3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6U2NyaXB0UHJvZmlsZXI6IHsKICAgICAgICAg
ICAgIHRvZ2dsZVNjcmlwdFByb2ZpbGVySW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50OjpIZWFwOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5l
OjpJbnN0cnVtZW50OjpIZWFwOiB7CiAgICAgICAgICAgICB0b2dnbGVIZWFwSW5zdHJ1bWVudChz
dGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpDUFU6IHsKKyAgICAgICAgY2Fz
ZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkNQVTogewogICAgICAgICAgICAgdG9n
Z2xlQ1BVSW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpN
ZW1vcnk6IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6Ok1l
bW9yeTogewogICAgICAgICAgICAgdG9nZ2xlTWVtb3J5SW5zdHJ1bWVudChzdGF0ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpUaW1lbGluZToKKyAgICAgICAgY2FzZSBQcm90b2Nv
bDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlRpbWVsaW5lOgogICAgICAgICAgICAgdG9nZ2xlVGlt
ZWxpbmVJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpBbmltYXRpb246Cisg
ICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpBbmltYXRpb246CiAg
ICAgICAgICAgICB0b2dnbGVBbmltYXRpb25JbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC01ODYsMjQgKzU4MCwyMSBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnRvZ2dsZUluc3RydW1lbnRzKEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlU2NyaXB0UHJvZmlsZXJJbnN0cnVtZW50
KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoYXV0byogc2NyaXB0UHJvZmlsZXJB
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50U2NyaXB0UHJvZmlsZXJBZ2Vu
dCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIGlmIChzdGF0ZSA9
PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KSB7Ci0gICAgICAgICAgICBjb25zdCBib29sIGluY2x1
ZGVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0
VHJhY2tpbmcoaWdub3JlZCwgJmluY2x1ZGVTYW1wbGVzKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBzY3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAg
ICAgIGlmIChzdGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQorICAgICAgICAgICAgc2Ny
aXB0UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyh0cnVlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogfQog
CiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUhlYXBJbnN0cnVtZW50KEluc3Ry
dW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoYXV0byogaGVhcEFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlSGVhcEFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJp
bmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQp
IHsKICAgICAgICAgICAgIGlmIChtX2F1dG9DYXB0dXJlUGhhc2UgPT0gQXV0b0NhcHR1cmVQaGFz
ZTo6Tm9uZSB8fCBtX2F1dG9DYXB0dXJlUGhhc2UgPT0gQXV0b0NhcHR1cmVQaGFzZTo6Rmlyc3RO
YXZpZ2F0aW9uKQotICAgICAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25v
cmVkKTsKKyAgICAgICAgICAgICAgICBoZWFwQWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBoZWFwQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsK
KyAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogfQogCkBAIC02
MTEsMTEgKzYwMiwxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUNQVUlu
c3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKICAgICBpZiAoYXV0byogY3B1UHJvZmlsZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5wZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQot
ICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkKTsKKyAg
ICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOwor
ICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNjI2LDExICs2MTYsMTAgQEAgdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVNZW1vcnlJbnN0cnVtZW50KEluc3RydW1lbnRT
dGF0ZSBzdGF0ZSkKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgaWYgKGF1dG8q
IG1lbW9yeUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRNZW1vcnlBZ2Vu
dCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9
PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICAgICAgbWVtb3J5QWdlbnQtPnN0YXJ0
VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RhcnRUcmFja2lu
ZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RvcFRyYWNraW5n
KGlnbm9yZWQpOworICAgICAgICAgICAgbWVtb3J5QWdlbnQtPnN0b3BUcmFja2luZygpOwogICAg
IH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTY0MCw3ICs2MjksNyBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZU1lbW9yeUluc3RydW1lbnQoSW5zdHJ1
bWVudFN0YXRlIHN0YXRlKQogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVUaW1l
bGluZUluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAgIGlmIChzdGF0ZSA9
PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICBpbnRlcm5hbFN0YXJ0KCk7CisgICAg
ICAgIGludGVybmFsU3RhcnQoV1RGOjpudWxsb3B0KTsKICAgICBlbHNlCiAgICAgICAgIGludGVy
bmFsU3RvcCgpOwogfQpAQCAtNjQ4LDExICs2MzcsMTAgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50Ojp0b2dnbGVUaW1lbGluZUluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQog
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVBbmltYXRpb25JbnN0cnVtZW50KElu
c3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoYXV0byogYW5pbWF0aW9uQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1hdGlvbkFnZW50KCkpIHsKLSAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRT
dGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+c3RhcnRUcmFja2luZyhp
Z25vcmVkKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdGFydFRyYWNraW5nKCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdG9wVHJhY2tpbmcoaWdu
b3JlZCk7CisgICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAg
fQogfQogCkBAIC02OTEsNzEgKzY3OSw3MSBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsRwogICAg
IGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0
YShhY3Rpb25JRCwgc2FtcGxlSWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlByb2JlU2FtcGxlLCBm
YWxzZSwgZnJhbWVGcm9tRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpKTsKIH0KIAotc3Rh
dGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3N0YXRpYyBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZl
bnREaXNwYXRjaDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBl
OjpFdmVudERpc3BhdGNoOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpTY2hlZHVsZVN0
eWxlUmVjYWxjdWxhdGlvbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uOworICAgICAgICBy
ZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1
bGF0aW9uOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlJlY2FsY3VsYXRlU3R5bGVzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OlJlY2FsY3VsYXRlU3R5bGVzOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBl
OjpJbnZhbGlkYXRlTGF5b3V0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6SW52YWxpZGF0ZUxheW91dDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpJbnZhbGlkYXRlTGF5b3V0OwogICAgIGNhc2Ug
VGltZWxpbmVSZWNvcmRUeXBlOjpMYXlvdXQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpMYXlvdXQ7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6TGF5b3V0OwogICAgIGNhc2UgVGltZWxpbmVSZWNv
cmRUeXBlOjpQYWludDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OlBhaW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OlBhaW50OwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDb21wb3Np
dGU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpDb21wb3NpdGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6Q29tcG9zaXRlOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpSZW5kZXJpbmdG
cmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OlJlbmRlcmluZ0ZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OlJlbmRlcmluZ0ZyYW1lOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5
cGU6OlRpbWVySW5zdGFsbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OlRpbWVySW5zdGFsbDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckluc3RhbGw7CiAgICAgY2FzZSBUaW1lbGluZVJl
Y29yZFR5cGU6OlRpbWVyUmVtb3ZlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJSZW1vdmU7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJSZW1vdmU7CiAgICAgY2FzZSBUaW1lbGlu
ZVJlY29yZFR5cGU6OlRpbWVyRmlyZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyRmlyZTsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckZpcmU7CiAKICAgICBjYXNlIFRpbWVsaW5l
UmVjb3JkVHlwZTo6RXZhbHVhdGVTY3JpcHQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpFdmFsdWF0ZVNjcmlwdDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpFdmFsdWF0ZVNjcmlwdDsKIAogICAg
IGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lU3RhbXA6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZVN0YW1wOwogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZTsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRU
eXBlOjpUaW1lRW5kOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6OkV2ZW50VHlwZTo6VGltZUVuZDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlOjpUaW1lRW5kOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkZ1
bmN0aW9uQ2FsbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OkZ1bmN0aW9uQ2FsbDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1l
bGluZTo6RXZlbnRUeXBlOjpGdW5jdGlvbkNhbGw7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5
cGU6OlByb2JlU2FtcGxlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZTo6UHJvYmVTYW1wbGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6UHJvYmVTYW1wbGU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29y
ZFR5cGU6OkNvbnNvbGVQcm9maWxlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29uc29sZVByb2ZpbGU7CisgICAgICAgIHJldHVybiBQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29uc29sZVByb2ZpbGU7CiAKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVxdWVzdEFuaW1h
dGlvbkZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlJlcXVlc3RBbmltYXRpb25GcmFtZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6Q2Fu
Y2VsQW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpDYW5jZWxBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDYW5jZWxBbmltYXRpb25GcmFtZTsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RmlyZUFuaW1hdGlvbkZyYW1lOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RmlyZUFuaW1h
dGlvbkZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OkZpcmVBbmltYXRpb25GcmFtZTsKIAogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpPYnNl
cnZlckNhbGxiYWNrOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6OkV2ZW50VHlwZTo6T2JzZXJ2ZXJDYWxsYmFjazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpUaW1lbGluZTo6RXZlbnRUeXBlOjpPYnNlcnZlckNhbGxiYWNrOwogICAgIH0KIAotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7
CisgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCit2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUmVmPEpTT046Ok9i
amVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogewotICAgIEFTU0VSVF9B
UkcocmVjb3JkLCByZWNvcmQpOwotICAgIHJlY29yZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodG9Q
cm90b2NvbCh0eXBlKSkpOworICAgIHJlY29yZC0+c2V0U3RyaW5nKFByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudDo6dHlwZUtleSwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKIAogICAgIGlmIChtX3JlY29yZFN0YWNrLmlz
RW1wdHkoKSkgewotICAgICAgICBhdXRvIHJlY29yZE9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKHJlY29yZCkpOworICAgICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNr
LiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkg
bm93LgorICAgICAgICBhdXRvIHJlY29yZE9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdURk1vdmUo
cmVjb3JkKSk7CiAgICAgICAgIHNlbmRFdmVudChXVEZNb3ZlKHJlY29yZE9iamVjdCkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHBhcmVudCA9IG1f
cmVjb3JkU3RhY2subGFzdCgpOwpAQCAtNzgxLDggKzc2OSw5IEBAIHZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6c2V0RnJhbWVJZGVudGlmaWVyKEpTT046Ok9iamVjdCogcmVjb3JkLCBGcmFt
ZSogZnJhCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVSZWNvcmRF
bnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiBlbnRyeSkKIHsKLSAgICBlbnRyeS5yZWNv
cmQtPnNldE9iamVjdCgiZGF0YSJfcywgZW50cnkuZGF0YSk7Ci0gICAgZW50cnkucmVjb3JkLT5z
ZXRBcnJheSgiY2hpbGRyZW4iX3MsIGVudHJ5LmNoaWxkcmVuKTsKKyAgICBlbnRyeS5yZWNvcmQt
PnNldE9iamVjdChQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OmRhdGFLZXksIGVu
dHJ5LmRhdGEuY29weVJlZigpKTsKKyAgICBpZiAoZW50cnkuY2hpbGRyZW4pCisgICAgICAgIGVu
dHJ5LnJlY29yZC0+c2V0QXJyYXkoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Ojpj
aGlsZHJlbktleSwgKmVudHJ5LmNoaWxkcmVuKTsKICAgICBlbnRyeS5yZWNvcmQtPnNldERvdWJs
ZSgiZW5kVGltZSJfcywgdGltZXN0YW1wKCkpOwogICAgIGFkZFJlY29yZFRvVGltZWxpbmUoZW50
cnkucmVjb3JkLmNvcHlSZWYoKSwgZW50cnkudHlwZSk7CiB9CkBAIC04MDQsMjkgKzc5MywyOSBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlQ3VycmVudFJlY29yZChU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxp
bmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQor
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUmVmPEpTT046Ok9iamVj
dD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNr
LCBGcmFtZSogZnJhbWUpCiB7CiAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVjb3JkID0gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJl
Q2FsbFN0YWNrID8gbV9tYXhDYWxsU3RhY2tEZXB0aCA6IDApOwotICAgIHJlY29yZC0+c2V0T2Jq
ZWN0KCJkYXRhIiwgV1RGTW92ZShkYXRhKSk7CisgICAgcmVjb3JkLT5zZXRPYmplY3QoUHJvdG9j
b2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50OjpkYXRhS2V5LCBXVEZNb3ZlKGRhdGEpKTsKICAg
ICBzZXRGcmFtZUlkZW50aWZpZXIoJnJlY29yZC5nZXQoKSwgZnJhbWUpOwogICAgIGFkZFJlY29y
ZFRvVGltZWxpbmUoV1RGTW92ZShyZWNvcmQpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBldmVudCkKK3Zv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZjxKU09OOjpPYmplY3Q+JiYg
ZXZlbnQpCiB7CiAgICAgLy8gRklYTUU6IHJ1bnRpbWVDYXN0IGlzIGEgaGFjay4gV2UgZG8gaXQg
YmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1lbGluZUV2ZW50IGRpcmVjdGx5IG5vdy4KLSAgICBh
dXRvIHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShldmVudCkpOworICAg
IGF1dG8gcmVjb3JkQ2hlY2tlZCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpU
aW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdURk1vdmUoZXZlbnQpKTsKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChXVEZNb3ZlKHJlY29yZENoZWNr
ZWQpKTsKIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKK0luc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRpbWVsaW5lUmVjb3Jk
RW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50cnkoUmVmPEpTT046
Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2Fs
bFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVjb3JkID0g
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKHRpbWVzdGFtcCgpLCBj
YXB0dXJlQ2FsbFN0YWNrID8gbV9tYXhDYWxsU3RhY2tEZXB0aCA6IDApOwogICAgIHNldEZyYW1l
SWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7CiAgICAgcmV0dXJuIFRpbWVsaW5lUmVj
b3JkRW50cnkoV1RGTW92ZShyZWNvcmQpLCBXVEZNb3ZlKGRhdGEpLCBKU09OOjpBcnJheTo6Y3Jl
YXRlKCksIHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJy
ZW50UmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBl
IHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRh
dGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1l
KiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChjcmVhdGVSZWNvcmRFbnRyeShXVEZN
b3ZlKGRhdGEpLCB0eXBlLCBjYXB0dXJlQ2FsbFN0YWNrLCBmcmFtZSkpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuaAppbmRleCBhZTc1NzlhMTVmMDU3MmI1MmY5YWFlMWFmYmVlMDkyZmI4MjRjODE5Li5mZTc1
ZTQwYjQzNGY4NWQ5NzNhZWRiYjQyOTdhOTRiYWUxOGZiYjJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaApA
QCAtNTAsOCArNTAsNiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNz
IFJ1bkxvb3BPYnNlcnZlcjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGVudW0g
Y2xhc3MgVGltZWxpbmVSZWNvcmRUeXBlIHsKICAgICBFdmVudERpc3BhdGNoLAogICAgIFNjaGVk
dWxlU3R5bGVSZWNhbGN1bGF0aW9uLApAQCAtODgsMjIgKzg2LDIyIEBAIGNsYXNzIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGlj
IEluc3BlY3RvCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwog
CiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBUaW1lbGlu
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdGFydChFcnJvclN0cmluZyYsIGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGggPSBu
dWxscHRyKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3AoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldEF1dG9DYXB0dXJlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0SW5zdHJ1bWVudHMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpB
cnJheSYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcCgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QXV0b0NhcHR1cmVFbmFibGVkKGJv
b2wpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0SW5z
dHJ1bWVudHMoUmVmPEpTT046OkFycmF5PiYmKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9i
c2VydmVyCi0gICAgdm9pZCBicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6QnJlYWtwb2ludEFjdGlvbklELCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBz
YW1wbGVJZCwgSlNDOjpKU1ZhbHVlIHJlc3VsdCkgZmluYWw7CisgICAgdm9pZCBicmVha3BvaW50
QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QnJlYWtwb2ludEFjdGlvbklE
LCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBzYW1wbGVJZCwgSlNDOjpKU1ZhbHVlIHJlc3Vs
dCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZEluc3Rh
bGxUaW1lcihpbnQgdGltZXJJZCwgU2Vjb25kcyB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QsIEZy
YW1lKik7CkBAIC0xNjAsOSArMTU4LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVGlt
ZWxpbmVSZWNvcmRTdGFjazsKIAogICAgIHN0cnVjdCBUaW1lbGluZVJlY29yZEVudHJ5IHsKLSAg
ICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeSgpCi0gICAgICAgICAgICA6IHR5cGUoVGltZWxpbmVS
ZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoKSB7IH0KLSAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRy
eShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBk
YXRhLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3JkVHlwZSB0
eXBlKQorICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KFJlZjxKU09OOjpPYmplY3Q+JiYgcmVj
b3JkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBjaGls
ZHJlbiwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiAgICAgICAgICAgICA6IHJlY29yZChXVEZN
b3ZlKHJlY29yZCkpCiAgICAgICAgICAgICAsIGRhdGEoV1RGTW92ZShkYXRhKSkKICAgICAgICAg
ICAgICwgY2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpCkBAIC0xNzAsMjkgKzE2NiwyOSBAQCBw
cml2YXRlOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZWNvcmQ7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGRhdGE7CisgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlY29yZDsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gZGF0
YTsKICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjaGlsZHJlbjsKICAgICAgICAgVGltZWxp
bmVSZWNvcmRUeXBlIHR5cGU7CiAgICAgfTsKIAotICAgIHZvaWQgaW50ZXJuYWxTdGFydChjb25z
dCBpbnQqIG1heENhbGxTdGFja0RlcHRoID0gbnVsbHB0cik7CisgICAgdm9pZCBpbnRlcm5hbFN0
YXJ0KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCk7CiAgICAgdm9pZCBpbnRlcm5h
bFN0b3AoKTsKICAgICBkb3VibGUgdGltZXN0YW1wKCk7CiAKLSAgICB2b2lkIHNlbmRFdmVudChS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKTsKLSAgICB2b2lkIGFwcGVuZFJlY29yZChSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0
YWNrLCBGcmFtZSopOwotICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1l
Kik7CisgICAgdm9pZCBzZW5kRXZlbnQoUmVmPEpTT046Ok9iamVjdD4mJik7CisgICAgdm9pZCBh
cHBlbmRSZWNvcmQoUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICB2b2lkIHB1c2hDdXJyZW50UmVj
b3JkKFJlZjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJl
Q2FsbFN0YWNrLCBGcmFtZSopOwogICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoY29uc3QgVGlt
ZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkKSB7IG1fcmVjb3JkU3RhY2suYXBwZW5kKHJlY29yZCk7
IH0KIAotICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50cnkoUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxT
dGFjaywgRnJhbWUqKTsKKyAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJlY29yZEVudHJ5
KFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1
cmVDYWxsU3RhY2ssIEZyYW1lKik7CiAKICAgICB2b2lkIHNldEZyYW1lSWRlbnRpZmllcihKU09O
OjpPYmplY3QqIHJlY29yZCwgRnJhbWUqKTsKIAogICAgIHZvaWQgZGlkQ29tcGxldGVSZWNvcmRF
bnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5Jik7CiAgICAgdm9pZCBkaWRDb21wbGV0ZUN1
cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlKTsKIAotICAgIHZvaWQgYWRkUmVjb3JkVG9U
aW1lbGluZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5cGUpOworICAg
IHZvaWQgYWRkUmVjb3JkVG9UaW1lbGluZShSZWY8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJl
Y29yZFR5cGUpOwogCiAgICAgdm9pZCBsb2NhbFRvUGFnZVF1YWQoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgTGF5b3V0UmVjdCYsIEZsb2F0UXVhZCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4
IDkwOWM0NjZmODdlOWJmYThjNGMxNzI4YzQ2YWQ2ZTdlNTkwN2I0NmUuLjMzY2FhMGFhMjA3OWFk
NDA4MWNjMjk2MDVhNTM1MzdjMjRkNjZiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCkBAIC01Myw1NSAr
NTMsNTYgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMu
c2V0UGVyc2lzdGVudFdvcmtlckFnZW50KG51bGxwdHIpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdu
b3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JXb3JrZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50OjplbmFibGUoKQogewogICAgIGlm
IChtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IG1fZW5hYmxlZCA9IHRydWU7CiAKICAgICBjb25uZWN0VG9BbGxXb3JrZXJJbnNwZWN0b3JQcm94
aWVzRm9yUGFnZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgaWYgKCFtX2VuYWJs
ZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogCiAgICAgZGlzY29ubmVjdEZyb21BbGxXb3JrZXJJbnNwZWN0b3JQcm94aWVz
KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojpp
bml0aWFsaXplZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgd29ya2Vy
SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
aW5pdGlhbGl6ZWQoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkKIHsKICAgICBXb3JrZXJJbnNwZWN0
b3JQcm94eSogcHJveHkgPSBtX2Nvbm5lY3RlZFByb3hpZXMuZ2V0KHdvcmtlcklkKTsKLSAgICBp
ZiAoIXByb3h5KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgd29ya2VyIGZvciBn
aXZlbiB3b3JrZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXByb3h5
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgd29ya2VyIGZvciBnaXZl
biB3b3JrZXJJZCJfcyk7CiAKICAgICBwcm94eS0+cmVzdW1lV29ya2VySWZQYXVzZWQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNz
YWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHdvcmtl
cklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihjb25zdCBTdHJpbmcm
IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKCFtX2VuYWJsZWQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiV29ya2VyIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiV29ya2VyIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgV29ya2VySW5zcGVjdG9yUHJveHkqIHByb3h5ID0gbV9jb25uZWN0ZWRQcm94aWVz
LmdldCh3b3JrZXJJZCk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJNaXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3MpOwogCiAgICAgcHJveHktPnNlbmRN
ZXNzYWdlVG9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKG1lc3NhZ2UpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VGcm9tV29y
a2VyVG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYgcHJveHksIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yV29ya2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yV29ya2VyQWdlbnQuaAppbmRleCAxN2QxYmVhZTkwMTBmMzIwMDFhYzY0ZGQ5ZDg5MmE5
M2YxMGE3ZDU2Li42MzZiYzgxZGQ1YTUwYWVlMDUzYzJlMDRlNjg2OTlkM2ZhNmI2NGVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oCkBAIC0zNSwyNyArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBQYWdlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9y
V29ya2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5z
cGVjdG9yOjpXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBXb3JrZXJJbnNw
ZWN0b3JQcm94eTo6UGFnZUNoYW5uZWwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvcldvcmtlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBJbnNwZWN0b3JXb3JrZXJBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3Bl
Y3RvcldvcmtlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvcldvcmtlckFnZW50KCk7
CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFdvcmtl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBpbml0aWFsaXplZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgd29ya2VySWQpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGluaXRpYWxpemVkKGNvbnN0
IFN0cmluZyYgd29ya2VySWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2VuZE1lc3NhZ2VUb1dvcmtlcihjb25zdCBTdHJpbmcmIHdvcmtlcklkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgLy8gV29ya2VySW5zcGVjdG9yUHJveHk6OlBhZ2VD
aGFubmVsCi0gICAgdm9pZCBzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtlcklu
c3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgYm9vbCBzaG91bGRXYWl0Rm9yRGVidWdnZXJPblN0YXJ0KCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuaAppbmRleCBm
N2Q4Mjc4MDcwZmU0NzAyOTlmMmRkNmJhYjY2NDYyZDU4NTg4OTA1Li4wYjhmMjBlYWMzNDNiNjY4
MTdhYzlmMGYwYzZjOGNiMjBjOWJhYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50LmgKQEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNz
IFJlc291cmNlUmVzcG9uc2U7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3Mg
V2ViQ29uc29sZUFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQ29uc29sZUFnZW50
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJDb25zb2xlQWdlbnQpOwpAQCAtNDYsOCAr
NDUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBmcmFtZVdpbmRvd0Rpc2NhcmRlZChET01XaW5kb3cq
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVu
dGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCBkaWRGYWlsTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7
Ci0KLXByb3RlY3RlZDoKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4
IGI5M2E4MWZiZjRmNTA2NDY2YWRiM2UxM2JiZTg4Y2M1MzkyMzViN2UuLjFjNjEzNTdhZmRjZTM1
MGFlMjNhYmMyMDdmMjI3MDRjOTRlYmY0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDksMTggKzQ5LDE4IEBA
IGJvb2wgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpID09IHRoaXMgJiYgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpOwogfQogCi12b2lkIFdlYkRlYnVnZ2VyQWdl
bnQ6OmVuYWJsZSgpCit2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5hYmxlKCkKIHsK
ICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQodGhp
cyk7CiAKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKTsKKyAgICBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpOwogfQogCi12b2lkIFdlYkRlYnVnZ2Vy
QWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQordm9pZCBXZWJEZWJ1Z2dlckFn
ZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkV2ViRGVidWdnZXJBZ2VudChudWxscHRyKTsKIAot
ICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7Cisg
ICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGlzQmVpbmdEZXN0cm95
ZWQpOwogfQogCiB2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmRpZEFkZEV2ZW50TGlzdGVuZXIoRXZl
bnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuaAppbmRleCAxMGI5NjQ4ODgxYWEwMTU2NGZj
YmU3MmU3NGZmYmFjNzk2ODQ1NzYyLi5hOTIzNzFkYTVkMjNhYTA1ZWRiNjg5ODc1OWVhNDExZWU3
NWE2OThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBFdmVudFRhcmdldDsKIGNsYXNz
IEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIGNs
YXNzIFRpbWVyQmFzZTsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXZWJE
ZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViRGVidWdnZXJBZ2VudCk7CkBAIC01Niw4ICs1
NSw4IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFdlYkRlYnVnZ2VyQWdlbnQoV2ViQWdl
bnRDb250ZXh0Jik7Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Fi
bGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGludGVybmFsRW5h
YmxlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVz
dHJveWVkKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlkQ2xlYXJBc3luY1N0YWNrVHJhY2VEYXRh
KCkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
V2ViSGVhcEFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVh
cEFnZW50LmNwcAppbmRleCA1YWE3NDUzZDA5NTYwNzYyNzhlYjAzMGY4MDhkZGYwMTRkYWJmYjg1
Li45Mjc1ZThmNzlkMDBmZTFhMTE4MjFlZDhhODY5YzBlMTdiNDA4MDIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3BwCkBAIC0zNSw3ICsz
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
IHN0cnVjdCBHYXJiYWdlQ29sbGVjdGlvbkRhdGEgewotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGU7CisgICAgUHJvdG9jb2w6OkhlYXA6
OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGU7CiAgICAgU2Vjb25kcyBzdGFydFRpbWU7CiAg
ICAgU2Vjb25kcyBlbmRUaW1lOwogfTsKQEAgLTEwMywyNSArMTAzLDI3IEBAIFdlYkhlYXBBZ2Vu
dDo6V2ViSGVhcEFnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV2ViSGVhcEFnZW50
Ojp+V2ViSGVhcEFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFdlYkhlYXBBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IFdlYkhlYXBBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVuYWJs
ZShlcnJvclN0cmluZyk7CisgICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVu
YWJsZSgpOwogCiAgICAgaWYgKGF1dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5zZXRIZWFwQWdl
bnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkhlYXBBZ2VudDo6
ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fc2VuZEdhcmJhZ2VDb2xs
ZWN0aW9uRXZlbnRzVGFzay0+cmVzZXQoKTsKIAogICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+c2V0SGVhcEFnZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVjdG9ySGVhcEFnZW50
OjpkaXNhYmxlKGVycm9yU3RyaW5nKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySGVhcEFnZW50Ojpk
aXNhYmxlKCk7CiB9CiAKLXZvaWQgV2ViSGVhcEFnZW50OjpkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0
ZWRFdmVudChJbnNwZWN0b3I6OlByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlw
ZSB0eXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKQordm9pZCBXZWJIZWFw
QWdlbnQ6OmRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KFByb3RvY29sOjpIZWFwOjpHYXJi
YWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRU
aW1lKQogewogICAgIC8vIERpc3BhdGNoIHRoZSBldmVudCBhc3luY2hyb25vdXNseSBiZWNhdXNl
IHRoaXMgbWV0aG9kIG1heSBiZQogICAgIC8vIGNhbGxlZCBiZXR3ZWVuIGNvbGxlY3Rpb24gYW5k
IHN3ZWVwaW5nIGFuZCB3ZSBkb24ndCB3YW50IHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaAppbmRleCAwYmM4ZTY0YWY1YTg2YTcyZDVmODA0NDBm
ZGIxMTYzZmUxN2UxNTczLi5hMzVlNTdjYzdhNzFmOGFmNDEzODYzNzg3Y2VmMzZiZWU0MTZmNmJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgK
QEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTZW5kR2FyYmFn
ZUNvbGxlY3Rpb25FdmVudHNUYXNrOwogc3RydWN0IEdhcmJhZ2VDb2xsZWN0aW9uRGF0YTsKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXZWJIZWFwQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JIZWFwQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFdlYkhlYXBBZ2VudCk7CkBAIC00NCw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICB+V2ViSGVhcEFn
ZW50KCkgb3ZlcnJpZGU7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRFdmVudChJbnNwZWN0b3I6OlByb3RvY29s
OjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29u
ZHMgZW5kVGltZSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAppbmRleCBkZGQ1M2JhNWRmYmNhNTUzN2Ji
YjZiN2JlMDY1MDU3ZDcyZmJhYmQ4Li45YWNmZTRkZDRiMTYwZWU5YjM4OTEwY2M5Yzc1YTI0MTI0
Y2VmZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZUF1ZGl0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgUGFnZUF1ZGl0QWdlbnQ6
OlBhZ2VBdWRpdEFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VBdWRpdEFn
ZW50Ojp+UGFnZUF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VB
dWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhl
Y3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpCiAgICAgICAg
IHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcklkKCpleGVj
dXRpb25Db250ZXh0SWQpOwpAQCAtNjUsOSArNjUsOSBAQCBJbmplY3RlZFNjcmlwdCBQYWdlQXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dAogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihz
Y3JpcHRTdGF0ZSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3Rl
ZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8
UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0
SWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlw
dEZvckV2YWwoZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgaWYg
KGV4ZWN1dGlvbkNvbnRleHRJZCkKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcg
aW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBleGVjdXRpb25Db250ZXh0SWQiX3M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5o
CmluZGV4IGRkZWM0NjUxN2UxYTA1Y2JmNWJmOGZmZDdkMWFjODg4YTA4OTRmNzkuLjY5M2ZhYzMy
NzQ2OWE5MDQ0ZDg3MDE3NmZhYTJhMWQ0OWZiYTFiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oCkBAIC0zNywxNiAr
MzcsMTYgQEAgY2xhc3MgUGFnZUF1ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JBdWRpdEFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBQYWdlQXVkaXRBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VBdWRp
dEFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VBdWRpdEFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoY29uc3Qg
aW50KiBleGVjdXRpb25Db250ZXh0SWQpOwotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBpbnQq
IGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNv
bnRleHRJZD4mJik7CiAKLSAgICB2b2lkIHBvcHVsYXRlQXVkaXRPYmplY3QoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiBhdWRpdE9iamVjdCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCi0gICAgdm9pZCBtdXRl
Q29uc29sZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgbXV0ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKIAogICAg
IFBhZ2UmIG1faW5zcGVjdGVkUGFnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5jcHAKaW5kZXggMTNmZDFk
N2RhYmFhOTlkMGJiMGM0OWZmN2JiNWU1MmY1NGM2NjNkMy4uMTIxMmI4NjZkOWUyODk5Njc3YTkz
ZmQ3MTZjMWU4NjhkM2MxZmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcApAQCAtNTQsNzkgKzU0LDgz
IEBAIFBhZ2VDb25zb2xlQWdlbnQ6OlBhZ2VDb25zb2xlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYg
Y29udGV4dCkKIAogUGFnZUNvbnNvbGVBZ2VudDo6flBhZ2VDb25zb2xlQWdlbnQoKSA9IGRlZmF1
bHQ7CiAKLXZvaWQgUGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlQ29uc29sZUFn
ZW50OjpjbGVhck1lc3NhZ2VzKCkKIHsKICAgICBpZiAoYXV0byogZG9tQWdlbnQgPSBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5y
ZWxlYXNlRGFuZ2xpbmdOb2RlcygpOwogCi0gICAgV2ViQ29uc29sZUFnZW50OjpjbGVhck1lc3Nh
Z2VzKGVycm9yU3RyaW5nKTsKKyAgICByZXR1cm4gV2ViQ29uc29sZUFnZW50OjpjbGVhck1lc3Nh
Z2VzKCk7CiB9CiAKLXZvaWQgUGFnZUNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29u
c29sZTo6Q2hhbm5lbD4+JiBjaGFubmVscykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4+IFBhZ2VDb25zb2xlQWdl
bnQ6OmdldExvZ2dpbmdDaGFubmVscygpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFu
bmVsVGFibGUgewotICAgICAgICBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG5hbWU7Ci0gICAgICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ugc291cmNlOwotICAg
IH0gY2hhbm5lbFRhYmxlW10gPSB7Ci0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IldlYlJUQyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpX
ZWJSVEMgfSwKLSAgICAgICAgeyBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiTWVkaWEiKSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWEgfSwKLSAgICAg
ICAgeyBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiTWVkaWFTb3VyY2UiKSwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWFTb3VyY2UgfSwKLSAgICB9Owor
ICAgIGF1dG8gY2hhbm5lbHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPjo6Y3JlYXRlKCk7CiAKLSAgICBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwotCi0gICAgc2l6ZV90IGxl
bmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY2hhbm5lbFRhYmxlKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8qIGxvZ0NoYW5uZWwgPSBnZXRM
b2dDaGFubmVsKGNoYW5uZWxUYWJsZVtpXS5uYW1lKTsKKyAgICBhdXRvIGFkZExvZ0NoYW5uZWwg
PSBbJl0gKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlIHNvdXJjZSkgeworICAgICAg
ICBhdXRvKiBsb2dDaGFubmVsID0gZ2V0TG9nQ2hhbm5lbChQcm90b2NvbDo6SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSk7CiAgICAgICAgIGlmICghbG9nQ2hhbm5lbCkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhdXRvIGxldmVsID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpPZmY7CisgICAgICAgIGF1dG8gbGV2ZWwgPSBQ
cm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpPZmY7CiAgICAgICAgIGlmIChsb2dDaGFu
bmVsLT5zdGF0ZSAhPSBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZikgewogICAgICAgICAgICAgc3dp
dGNoIChsb2dDaGFubmVsLT5sZXZlbCkgewogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6
QWx3YXlzOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6RXJyb3I6CiAgICAgICAgICAg
ICBjYXNlIFdURkxvZ0xldmVsOjpXYXJuaW5nOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZl
bDo6SW5mbzoKLSAgICAgICAgICAgICAgICBsZXZlbCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWxMZXZlbDo6QmFzaWM7CisgICAgICAgICAgICAgICAgbGV2ZWwgPSBQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpCYXNpYzsKICAgICAgICAgICAgICAgICBicmVh
azsKKwogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6RGVidWc6Ci0gICAgICAgICAgICAg
ICAgbGV2ZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZl
cmJvc2U7CisgICAgICAgICAgICAgICAgbGV2ZWwgPSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bExldmVsOjpWZXJib3NlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjaGFubmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q29uc29sZTo6Q2hhbm5lbDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRTb3VyY2UoY2hhbm5l
bFRhYmxlW2ldLnNvdXJjZSkKKyAgICAgICAgYXV0byBjaGFubmVsID0gUHJvdG9jb2w6OkNvbnNv
bGU6OkNoYW5uZWw6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0U291cmNlKHNvdXJjZSkKICAg
ICAgICAgICAgIC5zZXRMZXZlbChsZXZlbCkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgIGNoYW5uZWxzLT5hZGRJdGVtKFdURk1vdmUoY2hhbm5lbCkpOwotICAgIH0KKyAgICB9Owor
ICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlhNTCk7
CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6SmF2
YVNjcmlwdCk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZTo6TmV0d29yayk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZTo6Q29uc29sZUFQSSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29u
c29sZTo6Q2hhbm5lbFNvdXJjZTo6U3RvcmFnZSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2Nv
bDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6QXBwY2FjaGUpOworICAgIGFkZExvZ0NoYW5uZWwo
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlJlbmRlcmluZyk7CisgICAgYWRkTG9n
Q2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6Q1NTKTsKKyAgICBhZGRM
b2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpTZWN1cml0eSk7Cisg
ICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6Q29udGVu
dEJsb2NrZXIpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxT
b3VyY2U6Ok1lZGlhKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsU291cmNlOjpNZWRpYVNvdXJjZSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29u
c29sZTo6Q2hhbm5lbFNvdXJjZTo6V2ViUlRDKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpJVFBEZWJ1Zyk7CisgICAgYWRkTG9nQ2hhbm5lbChQ
cm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6QWRDbGlja0F0dHJpYnV0aW9uKTsKKyAg
ICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpPdGhlcik7
CisKKyAgICByZXR1cm4gV1RGTW92ZShjaGFubmVscyk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxz
dGQ6OnBhaXI8V1RGTG9nQ2hhbm5lbFN0YXRlLCBXVEZMb2dMZXZlbD4+IGNoYW5uZWxDb25maWd1
cmF0aW9uRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgbGV2ZWxTdHJpbmcpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBQYWdlQ29uc29sZUFnZW50OjpzZXRMb2dnaW5nQ2hhbm5lbExldmVs
KFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlIHNvdXJjZSwgUHJvdG9jb2w6OkNvbnNv
bGU6OkNoYW5uZWxMZXZlbCBsZXZlbCkKIHsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShsZXZlbFN0cmluZywgIm9mZiIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxvZ0NoYW5uZWxT
dGF0ZTo6T2ZmLCBXVEZMb2dMZXZlbDo6RXJyb3IgfSB9OworICAgIHN3aXRjaCAobGV2ZWwpIHsK
KyAgICBjYXNlIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjoKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3VyY2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZiwg
V1RGTG9nTGV2ZWw6OkVycm9yKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3RyaW5nLCAiYmFzaWMiKSkKLSAgICAgICAgcmV0dXJu
IHsgeyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6SW5mbyB9IH07CisgICAg
Y2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpCYXNpYzoKKyAgICAgICAgbV9p
bnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3VyY2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZM
b2dMZXZlbDo6SW5mbyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShsZXZlbFN0cmluZywgInZlcmJvc2UiKSkKLSAgICAgICAgcmV0dXJuIHsg
eyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6RGVidWcgfSB9OwotCi0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBQYWdlQ29uc29sZUFnZW50OjpzZXRMb2dn
aW5nQ2hhbm5lbExldmVsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBj
aGFubmVsTmFtZSwgY29uc3QgU3RyaW5nJiBjaGFubmVsTGV2ZWwpCi17Ci0gICAgYXV0byBjb25m
aWd1cmF0aW9uID0gY2hhbm5lbENvbmZpZ3VyYXRpb25Gb3JTdHJpbmcoY2hhbm5lbExldmVsKTsK
LSAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3Ry
aW5nKCJVbmtub3duIGNoYW5uZWxMZXZlbDogIl9zLCBjaGFubmVsTGV2ZWwpOwotICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpWZXJib3Nl
OgorICAgICAgICBtX2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoUHJvdG9j
b2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0NoYW5uZWxT
dGF0ZTo6T24sIFdURkxvZ0xldmVsOjpEZWJ1Zyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKGNoYW5uZWxO
YW1lLCBjb25maWd1cmF0aW9uLnZhbHVlKCkuZmlyc3QsIGNvbmZpZ3VyYXRpb24udmFsdWUoKS5z
ZWNvbmQpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oCmluZGV4IDRjNDVmMmRhZDBmN2Mx
YjQwNDUzOWZlNGY1N2U1YTg2ZGIyMDYzMTguLjQxZmU3NmQwMzIwNzBlMGQ0MTAzZTQwYTJjMTQ0
Y2UzNzk4MWM4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaApAQCAtNDEsMTIgKzQxLDEyIEBAIGNsYXNzIFBh
Z2VDb25zb2xlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQ29uc29sZUFnZW50IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlQ29uc29sZUFnZW50KFBhZ2VB
Z2VudENvbnRleHQmKTsKLSAgICB+UGFnZUNvbnNvbGVBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Q
YWdlQ29uc29sZUFnZW50KCk7CiAKICAgICAvLyBDb25zb2xlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyCi0gICAgdm9pZCBjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldExvZ2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGNoYW5uZWwsIGNvbnN0IFN0cmluZyYgbGV2ZWwpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY2xlYXJNZXNzYWdlcygpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+PiBnZXRMb2dnaW5nQ2hhbm5lbHMoKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldExvZ2dpbmdDaGFu
bmVsTGV2ZWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKTsKIAogcHJpdmF0ZToKICAg
ICBJbnN0cnVtZW50aW5nQWdlbnRzJiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmNwcAppbmRleCA3YzVmZmE0ZTM4M2Y1MmNhYjVlMmEyN2ZkOTE1OTA5ZmJjZWY1
MTRjLi5jODhiYmRjMDNkMjU0MTBmYjY5NThiMGYwOWFmYzViZjE4OGRiMjU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9N
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTY5LDg0ICs2OSw3NCBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dl
ckFnZW50OjpkaXNhYmxlKCkKICAgICBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaXNhYmxl
KCk7CiB9CiAKLXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJp
bmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlIHR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBu
b2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byB0eXBlID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4odHlwZVN0
cmluZyk7Ci0gICAgaWYgKCF0eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmlu
ZygiVW5rbm93biB0eXBlOiAiX3MsIHR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdn
ZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAg
ICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFr
cG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYg
KCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAgY2FzZSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVN
b2RpZmllZDoKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDoKICAgICAgICAgaWYgKCFt
X2RvbVN1YnRyZWVNb2RpZmllZEJyZWFrcG9pbnRzLmFkZChub2RlLCBicmVha3BvaW50LnJlbGVh
c2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBn
aXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRP
TUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKKyAgICBjYXNlIFByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgogICAgICAg
ICBpZiAoIW1fZG9tQXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5hZGQobm9kZSwgYnJlYWtw
b2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtw
b2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfcyk7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ6CisgICAgY2FzZSBQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKICAgICAgICAg
aWYgKCFtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVs
ZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9y
IGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSB0eXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3Rl
bnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00g
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQt
PmFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
LSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlPih0eXBlU3RyaW5nKTsKLSAgICBpZiAoIXR5cGUpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHR5cGU6ICJfcywgdHlwZVN0cmlu
Zyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6
OlN1YnRyZWVNb2RpZmllZDoKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDoKICAgICAg
ICAgaWYgKCFtX2RvbVN1YnRyZWVNb2RpZmllZEJyZWFrcG9pbnRzLnJlbW92ZShub2RlKSkKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdp
dmVuIHR5cGUgbWlzc2luZyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBl
IG1pc3NpbmciX3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlm
aWVkOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6
QXR0cmlidXRlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21BdHRyaWJ1dGVNb2RpZmllZEJy
ZWFrcG9pbnRzLnJlbW92ZShub2RlKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfczsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3MpOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ6CiAgICAgICAgIGlmICghbV9kb21Ob2Rl
UmVtb3ZlZEJyZWFrcG9pbnRzLnJlbW92ZShub2RlKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfczsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3MpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogfQogCiB2b2lkIFBhZ2VET01E
ZWJ1Z2dlckFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoKQpAQCAtMjEzLDcgKzIwMyw3IEBAIHZv
aWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUmIHBhcmVudCkK
IAogICAgIEFTU0VSVChjbG9zZXN0QnJlYWtwb2ludE93bmVyKTsKIAotICAgIGF1dG8gcGF1c2VE
YXRhID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkLCAqY2xvc2Vz
dEJyZWFrcG9pbnRPd25lcik7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZv
ckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6
U3VidHJlZU1vZGlmaWVkLCAqY2xvc2VzdEJyZWFrcG9pbnRPd25lcik7CiAgICAgcGF1c2VEYXRh
LT5zZXRCb29sZWFuKCJpbnNlcnRpb24iLCB0cnVlKTsKICAgICAvLyBGSVhNRTogPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJl
IGluc3RydW1lbnRlZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFp
biBkb2N1bWVudCBoYXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIC8vIEluY2x1ZGUgdGhl
IG5ldyBjaGlsZCBub2RlIElEIHNvIHRoZSBmcm9udGVuZCBjYW4gc2hvdyB0aGUgbm9kZSB0aGF0
J3MgYWJvdXQgdG8gYmUgaW5zZXJ0ZWQuCkBAIC0yMzAsNyArMjIwLDcgQEAgdm9pZCBQYWdlRE9N
RGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKIAogICAgIE9wdGlv
bmFsPHNpemVfdD4gY2xvc2VzdERpc3RhbmNlOwogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
IGNsb3Nlc3RCcmVha3BvaW50OwotICAgIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4gY2xvc2VzdEJyZWFrcG9pbnRUeXBlOworICAg
IE9wdGlvbmFsPFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+IGNsb3Nl
c3RCcmVha3BvaW50VHlwZTsKICAgICBOb2RlKiBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gbnVs
bHB0cjsKIAogICAgIGZvciAoYXV0byBbYnJlYWtwb2ludE93bmVyLCBicmVha3BvaW50XSA6IG1f
ZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cykgewpAQCAtMjQxLDcgKzIzMSw3IEBAIHZvaWQgUGFn
ZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgICAg
IGlmICghY2xvc2VzdERpc3RhbmNlIHx8IGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7CiAg
ICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsKICAgICAgICAgICAgIGNsb3Nl
c3RCcmVha3BvaW50ID0gYnJlYWtwb2ludC5jb3B5UmVmKCk7Ci0gICAgICAgICAgICBjbG9zZXN0
QnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOworICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRU
eXBlID0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92
ZWQ7CiAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gYnJlYWtwb2ludE93bmVy
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjU1LDcgKzI0NSw3IEBAIHZvaWQgUGFnZURPTURlYnVn
Z2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAo
IWNsb3Nlc3REaXN0YW5jZSB8fCBkaXN0YW5jZSA8IGNsb3Nlc3REaXN0YW5jZSkgewogICAgICAg
ICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgICAgIGNs
b3Nlc3RCcmVha3BvaW50ID0gYnJlYWtwb2ludC5jb3B5UmVmKCk7Ci0gICAgICAgICAgICAgICAg
Y2xvc2VzdEJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgY2xv
c2VzdEJyZWFrcG9pbnRUeXBlID0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50
VHlwZTo6U3VidHJlZU1vZGlmaWVkOwogICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50
T3duZXIgPSBicmVha3BvaW50T3duZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI5
Niw3ICsyODYsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0
cihFbGVtZW50JiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVk
QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQp
OworICAgIGF1dG8gcGF1c2VEYXRhID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVk
LCBlbGVtZW50KTsKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3I6
OkRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgV1RGTW92ZShwYXVzZURh
dGEpLCBpdC0+dmFsdWUuY29weVJlZigpKTsKIH0KIApAQCAtMzMzLDI3ICszMjMsMjggQEAgdm9p
ZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2lsbEludmFsaWRhdGVTdHlsZUF0dHIoRWxlbWVudCYg
ZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9kb21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRz
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1
c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkLCBlbGVtZW50KTsKKyAgICBhdXRv
IHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7
CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZy
b250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURk1vdmUocGF1c2VEYXRhKSwgaXQtPnZh
bHVlLmNvcHlSZWYoKSk7CiB9CiAKLXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1h
dGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+JiYgYnJlYWtwb2ludCkKK2Jvb2wgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNl
dEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmIGJyZWFrcG9pbnQpCiB7CiAgICAgaWYgKCFt
X3BhdXNlT25BbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50ID09ICFicmVha3BvaW50KSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gbV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2lu
dCA/ICJCcmVha3BvaW50IGZvciBBbmltYXRpb25GcmFtZSBhbHJlYWR5IGV4aXN0cyJfcyA6ICJC
cmVha3BvaW50IGZvciBBbmltYXRpb25GcmFtZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBtX3BhdXNlT25BbGxBbmltYXRp
b25GcmFtZXNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUmVmPEpTT046Ok9iamVjdD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmJ1aWxkUGF1
c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcikK
K1JlZjxKU09OOjpPYmplY3Q+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpidWlsZFBhdXNlRGF0YUZv
ckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSBi
cmVha3BvaW50VHlwZSwgTm9kZSYgYnJlYWtwb2ludE93bmVyKQogewogICAgIEFTU0VSVChtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrcG9pbnRzQWN0aXZlKCkpOwogICAgIEFTU0VSVChtX2RvbVN1YnRy
ZWVNb2RpZmllZEJyZWFrcG9pbnRzLmNvbnRhaW5zKCZicmVha3BvaW50T3duZXIpIHx8IG1fZG9t
QXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtwb2ludE93bmVyKSB8
fCBtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMuY29udGFpbnMoJmJyZWFrcG9pbnRPd25lcikp
OwogCiAgICAgYXV0byBwYXVzZURhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBh
dXNlRGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9y
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoYnJlYWtwb2ludFR5cGUpKTsKKyAgICBwYXVz
ZURhdGEtPnNldFN0cmluZygidHlwZSIsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShicmVha3BvaW50VHlwZSkpOwogICAgIGlmIChhdXRvKiBkb21BZ2VudCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKSkgewogICAgICAgICBpZiAoYXV0
byBicmVha3BvaW50T3duZXJOb2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKCZi
cmVha3BvaW50T3duZXIpKQogICAgICAgICAgICAgcGF1c2VEYXRhLT5zZXRJbnRlZ2VyKCJub2Rl
SWQiLCBicmVha3BvaW50T3duZXJOb2RlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaAppbmRleCBh
ZDAxYzY3N2U1ZDIyMjVhMDY1Y2YwMTA0NTE1NjliMTc5NGQ2OWE5Li5kODcyODI5MjVlYzY5MzEw
ZTBiYzBlNzg4M2NkY2E1MDhkMTAzNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaApAQCAtMzYs
MjEgKzM2LDE5IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBQYWdlRE9NRGVidWdnZXJBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IHsKIHB1YmxpYzoKICAg
ICBQYWdlRE9NRGVidWdnZXJBZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50Kik7Ci0gICAgflBhZ2VET01EZWJ1Z2dlckFnZW50KCkgb3ZlcnJp
ZGU7CisgICAgflBhZ2VET01EZWJ1Z2dlckFnZW50KCk7CiAKLSAgICBib29sIGVuYWJsZWQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIAogICAgIC8vIERPTURl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRET01CcmVha3BvaW50
KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdGlvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2lu
dChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSkgb3ZlcnJpZGU7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRET01CcmVh
a3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0
ZWQoKSBmaW5hbDsKKyAgICB2b2lkIG1haW5GcmFtZU5hdmlnYXRlZCgpOwogICAgIHZvaWQgZnJh
bWVEb2N1bWVudFVwZGF0ZWQoRnJhbWUmKTsKICAgICB2b2lkIHdpbGxJbnNlcnRET01Ob2RlKE5v
ZGUmIHBhcmVudCk7CiAgICAgdm9pZCB3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJik7CkBAIC02MSwx
MCArNTksMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmlyZUFuaW1hdGlvbkZyYW1lKCk7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGVuYWJsZSgpOworICAgIHZvaWQgZGlzYWJsZSgpOwogCi0g
ICAgdm9pZCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SlNDOjpCcmVha3BvaW50PiYmKSBvdmVycmlkZTsKKyAgICBib29sIHNldEFuaW1hdGlvbkZyYW1l
QnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+JiYpOwogCiAgICAgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRQYXVzZURhdGFG
b3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSwgTm9kZSYgYnJlYWtwb2ludE93bmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHAK
aW5kZXggMGMyMDM5ODI3MzNiNGVlOGJhYmQwNTU4ZmEzM2IyYTFkYzRmOGYyNS4uNjE4NzI2OGJk
Mjc1MTgxZTk4ZjQ1ZWUwZmE3ZTE2YTc1MDliYzE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBA
IC02OCwyNiArNjgsMjUgQEAgYm9vbCBQYWdlRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZURlYnVnZ2VyQWdl
bnQoKSA9PSB0aGlzICYmIFdlYkRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKTsKIH0KIAotdm9pZCBQ
YWdlRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywg
Y29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4g
Lyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IFBhZ2VEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2Fs
bEZyYW1lKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmIGNhbGxGcmFtZUlk
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9w
dGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRv
Tm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1
cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9v
bD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkKIHsK
LSAgICBhdXRvIHNob3VsZEVtdWxhdGVVc2VyR2VzdHVyZSA9IGVtdWxhdGVVc2VyR2VzdHVyZSAm
JiAqZW11bGF0ZVVzZXJHZXN0dXJlOwotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNl
ckdlc3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIHNob3VsZEVtdWxhdGVVc2VyR2VzdHVyZSk7
CisgICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVj
dGVkUGFnZSwgZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmUpOwogCi0g
ICAgV2ViRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgY2Fs
bEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEks
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2Vu
ZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2Fz
VGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICByZXR1cm4gV2ViRGVidWdnZXJBZ2VudDo6
ZXZhbHVhdGVPbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAs
IFdURk1vdmUoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgV1RGTW92ZShkb05vdFBhdXNlT25FeGNl
cHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKHJldHVybkJ5VmFsdWUpLCBXVEZNb3ZlKGdl
bmVyYXRlUHJldmlldyksIFdURk1vdmUoc2F2ZVJlc3VsdCksIFdURk1vdmUoZW11bGF0ZVVzZXJH
ZXN0dXJlKSk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCit2b2lkIFBh
Z2VEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudCh0aGlzKTsKIAotICAgIFdlYkRlYnVn
Z2VyQWdlbnQ6OmVuYWJsZSgpOworICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5hYmxl
KCk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVz
dHJveWVkKQordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNC
ZWluZ0Rlc3Ryb3llZCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBh
Z2VEZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogCi0gICAgV2ViRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZShpc0JlaW5nRGVzdHJveWVkKTsKKyAgICBXZWJEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2Fi
bGUoaXNCZWluZ0Rlc3Ryb3llZCk7CiB9CiAKIFN0cmluZyBQYWdlRGVidWdnZXJBZ2VudDo6c291
cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYgc2NyaXB0KQpA
QCAtMTI2LDcgKzEyNSw3IEBAIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iCiAgICAgbV9pbnNwZWN0
ZWRQYWdlLmNvbnNvbGUoKS5hZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9u
Q29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpKTsKQEAgLTE1Myw4ICsxNTIsNyBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjptYWluRnJhbWVTdGFydGVkTG9hZGluZygpCiAgICAgaWYgKGlzUGF1c2VkKCkpIHsKICAg
ICAgICAgc2V0U3VwcHJlc3NBbGxQYXVzZXModHJ1ZSk7CiAKLSAgICAgICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICAgICAgcmVzdW1lKGlnbm9yZWQpOworICAgICAgICByZXN1bWUoKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmgKaW5kZXggNGMyN2RkMWM3NGIxMmU4NTdiNmNmNjUxMGY4
OTk3NjA3YTE2NjIwNy4uYmZlYmU5MzYyYzQ5MzVlMTAxZTFhMWYxM2M3YTAyYmUxNTNjOWViNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1
Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1Bh
Z2VEZWJ1Z2dlckFnZW50LmgKQEAgLTQ1LDE0ICs0NSwxNCBAQCBjbGFzcyBQYWdlRGVidWdnZXJB
Z2VudCBmaW5hbCA6IHB1YmxpYyBXZWJEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlRGVidWdnZXJBZ2VudChQYWdlQWdlbnRDb250
ZXh0Jik7Ci0gICAgflBhZ2VEZWJ1Z2dlckFnZW50KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBlbmFi
bGVkKCkgY29uc3QgZmluYWw7CisgICAgflBhZ2VEZWJ1Z2dlckFnZW50KCk7CisgICAgYm9vbCBl
bmFibGVkKCkgY29uc3Q7CiAKICAgICAvLyBEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cgotICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29s
KiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVy
bkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJl
c3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8q
IHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gZXZh
bHVhdGVPbkNhbGxGcmFtZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2Fs
bEZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2Vz
dHVyZSk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtw
b2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBm
aW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24K
ICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSYsIERPTVdyYXBwZXJX
b3JsZCYpOwpAQCAtNjQsMTUgKzY0LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENhbmNlbEFu
aW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGVuYWJs
ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92
ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxFbmFibGUoKTsKKyAgICB2b2lkIGludGVybmFsRGlz
YWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOwogCi0gICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZv
clNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQmKSBvdmVycmlkZTsKKyAgICBTdHJp
bmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYpOwog
Ci0gICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5tdXRlQ29uc29s
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgbXV0ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKTsKIAotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIFBhZ2UmIG1f
aW5zcGVjdGVkUGFnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKaW5kZXggNDkyMThlZjEyODNlYmQ0ZGQ3NTQy
MTEzNjliMzQ5YTQ4MjUyMmQ5OC4uNDAzNmEyM2M2ODUwN2U1OTRhYjJlOTc0ZjViNjJkYjg2N2M3
ODc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1Bh
Z2VIZWFwQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlSGVhcEFnZW50LmNwcApAQCAtMzksMTYgKzM5LDIwIEBAIFBhZ2VIZWFwQWdlbnQ6OlBh
Z2VIZWFwQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKIAogUGFnZUhlYXBBZ2VudDo6
flBhZ2VIZWFwQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgUGFnZUhlYXBBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IFBhZ2VIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgV2ViSGVhcEFnZW50OjplbmFibGUoZXJy
b3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gV2ViSGVhcEFnZW50OjplbmFibGUoKTsKKwog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUhlYXBBZ2VudCh0aGlzKTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGFnZUhlYXBBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQ
YWdlSGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZFBhZ2VIZWFwQWdlbnQobnVsbHB0cik7Ci0gICAgV2ViSGVhcEFnZW50OjpkaXNhYmxl
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoKTsKIH0K
IAogdm9pZCBQYWdlSGVhcEFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKaW5kZXgg
MWJkNmNhMGZjOWVmMTVhMWQ3YTI1Mjg0Mjk1YThlMTllODVmMTBkZS4uZjI2ZmY4NGIzOGI5NGM5
NzJkOWY0NmNjOWM0YTc0ZWFmZjc0YzdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oCkBAIC0zMSwxOCArMzEsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQog
Y2xhc3MgUGFnZUhlYXBBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJIZWFwQWdlbnQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VIZWFwQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VIZWFwQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwot
ICAgIH5QYWdlSGVhcEFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VIZWFwQWdlbnQoKTsKIAog
ICAgIC8vIEhlYXBCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIG1haW5GcmFt
ZU5hdmlnYXRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCmluZGV4IDJjNjViODEwNDk0YmJlYjczZDUz
NGU2NjJhYzMxMTkzZjQwYzNjNjguLjlmZTEzOTljM2I3MjYyMzU1MmI0MjNiMDAzM2UzM2Y5ODFj
M2IzZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgUGFnZU5ldHdvcmtB
Z2VudDo6UGFnZU5ldHdvcmtBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdl
TmV0d29ya0FnZW50Ojp+UGFnZU5ldHdvcmtBZ2VudCgpID0gZGVmYXVsdDsKIAotU3RyaW5nIFBh
Z2VOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikK
K1Byb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBQYWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVu
dGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgaWYgKGxvYWRlcikgewogICAg
ICAgICBpZiAoYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQ
YWdlQWdlbnQoKSkKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nIFBhZ2VOZXR3b3JrQWdlbnQ6Omxv
YWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICByZXR1cm4geyB9Owog
fQogCi1TdHJpbmcgUGFnZU5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIpCitQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBQYWdlTmV0d29ya0FnZW50
OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAobG9h
ZGVyKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFBhZ2VBZ2VudCgpKQpAQCAtOTEsMTIgKzkxLDEyIEBAIFZlY3RvcjxXZWJTb2Nr
ZXQqPiBQYWdlTmV0d29ya0FnZW50OjphY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXIm
IGxvY2spCiAgICAgcmV0dXJuIHdlYlNvY2tldHM7CiB9CiAKLXZvaWQgUGFnZU5ldHdvcmtBZ2Vu
dDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgUGFnZU5l
dHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wgZGlzYWJs
ZWQpCiB7CiAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlX
ZWJJbnNwZWN0b3IoZGlzYWJsZWQpOwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBQYWdl
TmV0d29ya0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkKQorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogUGFn
ZU5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKICAgICBhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZFBhZ2VBZ2VudCgpOwogICAgIGlmICghcGFnZUFnZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaAppbmRleCBi
ZWRjZTNlOGRiYjdjOWQyMmIyZTFiOTcyZDIyYjJhNWJjZTQwYWNhLi4wMmQ0YmViMjFjNTJmYzFi
MzQ2NzJkY2VhYTM3NTA0NTFiZTUyNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmgKQEAgLTM2LDE1ICszNiwx
NSBAQCBjbGFzcyBQYWdlTmV0d29ya0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvck5ldHdv
cmtBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFn
ZU5ldHdvcmtBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VOZXR3b3JrQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+UGFnZU5ldHdvcmtBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIFN0
cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgU3Ry
aW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwotICAgIFZlY3Rv
cjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpIG92ZXJyaWRlOwot
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxk
Rm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBs
b2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAg
ICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJik7
CisgICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCk7CisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmKTsKKyAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291
cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBQYWdlJiBtX2luc3BlY3Rl
ZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCmluZGV4IGU4YWI1ZjRjODlhZGU0ZmM4NWMwNDJi
NDM0MzNiNzI2NTYzYWJkZDIuLjAwZTY5ZjFhYTJlM2Y4ZWEyZjQ0NWU4ZGQ0NDZkZDE2ZWE2MzYz
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdl
UnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKQEAgLTUyLDExICs1Miw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAotc3RhdGljIGJvb2wgYXNCb29s
KGNvbnN0IGJvb2wqIGIpCi17Ci0gICAgcmV0dXJuIGIgJiYgKmI7Ci19Ci0KIFBhZ2VSdW50aW1l
QWdlbnQ6OlBhZ2VSdW50aW1lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6
IEluc3BlY3RvclJ1bnRpbWVBZ2VudChjb250ZXh0KQogICAgICwgbV9mcm9udGVuZERpc3BhdGNo
ZXIobWFrZVVuaXF1ZTxJbnNwZWN0b3I6OlJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+KGNvbnRl
eHQuZnJvbnRlbmRSb3V0ZXIpKQpAQCAtNjgsMjcgKzYzLDI5IEBAIFBhZ2VSdW50aW1lQWdlbnQ6
OlBhZ2VSdW50aW1lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKIAogUGFnZVJ1bnRp
bWVBZ2VudDo6flBhZ2VSdW50aW1lQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgUGFnZVJ1bnRp
bWVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZVJ1bnRpbWVBZ2VudCgpID09IHRoaXMpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKLSAgICBpZiAoIWVycm9yU3RyaW5nLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjplbmFibGUoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKIAogICAgIC8vIFJlcG9ydCBpbml0aWFsIGNvbnRleHRzIGJlZm9yZSBlbmFibGluZyBpbnN0
cnVtZW50YXRpb24gYXMgdGhlIHJlcG9ydGluZwogICAgIC8vIGNhbiBmb3JjZSBjcmVhdGlvbiBv
ZiBzY3JpcHQgc3RhdGUgd2hpY2ggY291bGQgcmVzdWx0IGluIGR1cGxpY2F0ZSBub3RpZmljYXRp
b25zLgogICAgIHJlcG9ydEV4ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpOwogCiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlUnVudGltZUFnZW50KHRoaXMpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpkaXNhYmxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VS
dW50aW1lQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRF
bmFibGVkUGFnZVJ1bnRpbWVBZ2VudChudWxscHRyKTsKIAotICAgIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZSgpOwogfQogCiB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmZyYW1lTmF2aWdh
dGVkKEZyYW1lJiBmcmFtZSkKQEAgLTEwNiw3ICsxMDMsNyBAQCB2b2lkIFBhZ2VSdW50aW1lQWdl
bnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSYgZnJhbWUsIERPTVdyYXBwZXJX
b3JsZAogICAgIG5vdGlmeUNvbnRleHRDcmVhdGVkKHBhZ2VBZ2VudC0+ZnJhbWVJZCgmZnJhbWUp
LCBmcmFtZS5zY3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQpLCB3b3JsZCk7CiB9CiAKLUluamVj
dGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0
ZWRTY3JpcHQgUGFnZVJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29s
OjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpF
eGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmICghZXhl
Y3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIHNjcmlwdFN0
YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwpA
QCAtMTU5LDIyICsxNTYsMjIgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50OjpyZXBvcnRFeGVjdXRp
b25Db250ZXh0Q3JlYXRpb24oKQogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlIHRvUHJvdG9jb2woRE9NV3JhcHBlcldv
cmxkOjpUeXBlIHR5cGUpCitzdGF0aWMgUHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRUeXBlIHRvUHJvdG9jb2woRE9NV3JhcHBlcldvcmxkOjpUeXBlIHR5cGUpCiB7CiAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgY2FzZSBET01XcmFwcGVyV29ybGQ6OlR5cGU6Ok5vcm1hbDoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRUeXBlOjpOb3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dFR5cGU6Ok5vcm1hbDsKICAgICBjYXNlIERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6
VXNlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1
dGlvbkNvbnRleHRUeXBlOjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpVc2VyOwogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxkOjpU
eXBlOjpJbnRlcm5hbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJuYWw7CiAgICAgfQogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKKyAgICByZXR1cm4gUHJv
dG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKIH0KIAotdm9p
ZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQordm9pZCBQYWdl
UnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYgZnJhbWVJZCwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4pCiB7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlcigp
LmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKQEAgLTE4NCw3ICsxODEsNyBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6
Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpKU0dsb2Jh
bAogICAgIGlmIChuYW1lLmlzRW1wdHkoKSAmJiBzZWN1cml0eU9yaWdpbikKICAgICAgICAgbmFt
ZSA9IHNlY3VyaXR5T3JpZ2luLT50b1Jhd1N0cmluZygpOwogCi0gICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkV4ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlvbjo6Y3JlYXRlKCkKKyAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQoUHJvdG9jb2w6OlJ1bnRpbWU6OkV4
ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKGluamVj
dGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0SWRGb3IoZ2xvYmFsT2JqZWN0KSkKICAg
ICAgICAgLnNldFR5cGUodG9Qcm90b2NvbCh3b3JsZC50eXBlKCkpKQogICAgICAgICAuc2V0TmFt
ZShuYW1lKQpAQCAtMTkyLDE2ICsxODksMTYgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50Ojpub3Rp
ZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWwKICAg
ICAgICAgLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
Y29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3Qg
Ym9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29s
KiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlv
bmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9v
bD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+
PiBQYWdlUnVudGltZUFnZW50OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZSwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBl
eGVjdXRpb25Db250ZXh0SWQsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9u
YWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwg
T3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpCiB7Ci0gICAgVXNlckdlc3R1cmVF
bXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVjdGVkUGFnZSwgYXNCb29sKGVt
dWxhdGVVc2VyR2VzdHVyZSkpOwotICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUo
ZXJyb3JTdHJpbmcsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgZXhlY3V0aW9uQ29udGV4
dElkLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIGVtdWxhdGVV
c2VyR2VzdHVyZSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIFVz
ZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2Us
IGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4g
SW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShleHByZXNzaW9uLCBvYmplY3RHcm91cCwg
V1RGTW92ZShpbmNsdWRlQ29tbWFuZExpbmVBUEkpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2Vw
dGlvbnNBbmRNdXRlQ29uc29sZSksIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSwgV1RGTW92
ZShyZXR1cm5CeVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKHNhdmVS
ZXN1bHQpLCBXVEZNb3ZlKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpB
cnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCog
Z2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxl
PFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyog
d2FzVGhyb3duICovPj4gUGFnZVJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oY29uc3QgUHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0aW9uYWxBcmd1bWVudHMsIE9wdGlv
bmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25h
bDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3
LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkKIHsKLSAgICBVc2VyR2VzdHVy
ZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBhc0Jvb2wo
ZW11bGF0ZVVzZXJHZXN0dXJlKSk7Ci0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJlc3Npb24sIG9wdGlvbmFsQXJndW1l
bnRzLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIHJldHVybkJ5VmFsdWUs
IGdlbmVyYXRlUHJldmlldywgZW11bGF0ZVVzZXJHZXN0dXJlLCByZXN1bHQsIHdhc1Rocm93bik7
CisgICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVj
dGVkUGFnZSwgZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmUpOworICAg
IHJldHVybiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKG9iamVjdElkLCBl
eHByZXNzaW9uLCBXVEZNb3ZlKG9wdGlvbmFsQXJndW1lbnRzKSwgV1RGTW92ZShkb05vdFBhdXNl
T25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKHJldHVybkJ5VmFsdWUpLCBXVEZN
b3ZlKGdlbmVyYXRlUHJldmlldyksIFdURk1vdmUoZW11bGF0ZVVzZXJHZXN0dXJlKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oCmluZGV4IDJhZjM3MzliN2ZlN2Mx
NmZhYTdkOGQyNzk3Y2U2ZDAxMDIxNTM5OGQuLjI5ODQ2NWM1MmI0MjQ2NGMyNzMzNjU5ZTA3ZjNm
NzYwMTc0YTk1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaApAQCAtNDUsMzEgKzQ1LDMwIEBAIGNsYXNzIERP
TVdyYXBwZXJXb3JsZDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUGFnZTsKIGNsYXNzIFNlY3VyaXR5
T3JpZ2luOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFBhZ2VSdW50aW1l
QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VSdW50aW1lQWdlbnQpOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VSdW50aW1lQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5QYWdlUnVudGltZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VS
dW50aW1lQWdlbnQoKTsKIAogICAgIC8vIFJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIK
LSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNv
bnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwg
Y29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IEpTT046
OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRp
b25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBP
cHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVz
dWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24g
Ki8+PiBjYWxsRnVuY3Rpb25Pbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEpTT046OkFy
cmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8
Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0
dXJlKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZnJhbWVO
YXZpZ2F0ZWQoRnJhbWUmKTsKICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChG
cmFtZSYsIERPTVdyYXBwZXJXb3JsZCYpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOwotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CisgICAgdm9pZCBtdXRlQ29uc29sZSgpOworICAgIHZv
aWQgdW5tdXRlQ29uc29sZSgpOwogICAgIHZvaWQgcmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0
aW9uKCk7Ci0gICAgdm9pZCBub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBET01XcmFwcGVyV29ybGQmLCBTZWN1cml0
eU9yaWdpbiogPSBudWxscHRyKTsKKyAgICB2b2lkIG5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgRE9NV3JhcHBlcldvcmxkJiwgU2VjdXJpdHlPcmlnaW4qID0gbnVsbHB0cik7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpSdW50aW1lRnJvbnRlbmREaXNwYXRj
aGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpSdW50aW1l
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFn
ZW50LmNwcAppbmRleCAxOGE2MGMzYzFjYjJmYTExMzNlODk0MTkxMjYzOWY5MzcyZWZmMmE2Li5i
YmUyY2MwM2Q2NDVmYzEyOTA4NGRiZWU5ZGQ4MDQyMmJiZDYzZmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3Jr
ZXJBZ2VudC5jcHAKQEAgLTU0LDkgKzU0LDkgQEAgdm9pZCBTZXJ2aWNlV29ya2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXMKIHsK
IH0KIAotdm9pZCBTZXJ2aWNlV29ya2VyQWdlbnQ6OmdldEluaXRpYWxpemF0aW9uSW5mbyhFcnJv
clN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25m
aWd1cmF0aW9uPiYgaW5mbykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4+IFNlcnZpY2VXb3JrZXJBZ2VudDo6Z2V0SW5p
dGlhbGl6YXRpb25JbmZvKCkKIHsKLSAgICBpbmZvID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6U2Vy
dmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6
OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUYXJn
ZXRJZChtX3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5pZGVudGlmaWVyKCkpCiAgICAgICAgIC5z
ZXRTZWN1cml0eU9yaWdpbihtX3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5zZWN1cml0eU9yaWdp
bigpLT50b1Jhd1N0cmluZygpKQogICAgICAgICAuc2V0VXJsKG1fc2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlLnRocmVhZCgpLmNvbnRleHREYXRhKCkuc2NyaXB0VVJMLnN0cmluZygpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtl
ckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuaAppbmRleCA4MTQ5ZmYzZGFjMzU3OGZjMDQ4YjY1OGU2MzE3ZGUzMmIxOTdk
NDAwLi4wYmE1Y2M1Y2M3ZjMzZDYxMWI0NWEwNDk4NzQ1MDU1YjhmMjlmZmM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuaApAQCAtMzQsMjEgKzM0LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQogY2xhc3MgU2VydmljZVdvcmtlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6U2VydmljZVdvcmtlckJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VydmljZVdvcmtlckFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTZXJ2aWNlV29y
a2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAgflNlcnZpY2VXb3JrZXJBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5TZXJ2aWNlV29ya2VyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3Rv
ckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gU2VydmljZVdvcmtlckJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcgotICAgIHZvaWQgZ2V0SW5pdGlhbGl6YXRpb25JbmZvKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRp
b24+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4+IGdl
dEluaXRpYWxpemF0aW9uSW5mbygpOwogCiBwcml2YXRlOgogICAgIFNlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZSYgbV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3Bw
CmluZGV4IGMxMmI1YWE0MTMyZjg5YWM1ODJkZWI5ZjcyZjE4NTFhOWVlZjk1M2YuLjg5MjQxOTBl
ZTYyMGYxNTUxNGEyNTBkNzYyZTJiZTRhMTkzMzA2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3Bw
CkBAIC00OCw3ICs0OCw3IEBAIFdvcmtlckF1ZGl0QWdlbnQ6OldvcmtlckF1ZGl0QWdlbnQoV29y
a2VyQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJBdWRpdEFnZW50Ojp+V29ya2VyQXVk
aXRBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgV29ya2VyQXVkaXRBZ2VudDo6
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJBdWRpdEFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRp
b25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBl
cnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igd29y
a2VycyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0
QWdlbnQuaAppbmRleCBkNmFjZGMwZWEzZTg5ZjBmYWQzMWNjYjJkNzY4ZTBlMTQ2YmQzMjM1Li5k
MjU5YzZhNzZjMmVjYjBlZWI4ZWRkNzMzOWVjMDQ1OWJkMzcyYjNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2Vu
dC5oCkBAIC0zNywxMCArMzcsMTAgQEAgY2xhc3MgV29ya2VyQXVkaXRBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckF1ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlckF1ZGl0QWdlbnQoV29ya2VyQWdlbnRDb250
ZXh0Jik7Ci0gICAgfldvcmtlckF1ZGl0QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyQXVk
aXRBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4
ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcm
LCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYpOwogCiAgICAgV29ya2VyR2xvYmFsU2NvcGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJDb25zb2xlQWdlbnQuaAppbmRleCBiN2I1NWQwMDY1OTBlZmIwODNmZWJiOTRlNDNi
NDEyZDYzY2VhZmQwLi41NzE1OTkxMjQ3Y2FmYjlkNjdlZjMzMTcxYWRmZDFjOTZjN2U0ODI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJD
b25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJDb25zb2xlQWdlbnQuaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBXb3JrZXJDb25z
b2xlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQ29uc29sZUFnZW50IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJDb25zb2xlQWdlbnQoV29ya2VyQWdl
bnRDb250ZXh0Jik7Ci0gICAgfldvcmtlckNvbnNvbGVBZ2VudCgpIG92ZXJyaWRlOworICAgIH5X
b3JrZXJDb25zb2xlQWdlbnQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYmQ1ZDhhODM0ZWFlODYzMzBmY2I5NzJj
NTkyZDVmNzBhN2U3MzA0Yy4uOTIyNzQzNTBjNjM3MTQ2MDUxZDc0OTljOWJmYjc0NjA3MDMyMjEx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM3LDE5ICszNywyMCBA
QCBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpXb3JrZXJET01EZWJ1Z2dlckFnZW50KFdvcmtlckFn
ZW50Q29udGV4dCYgY29udGV4dCwgSW5zcAogCiBXb3JrZXJET01EZWJ1Z2dlckFnZW50Ojp+V29y
a2VyRE9NRGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBXb3JrZXJET01EZWJ1Z2dl
ckFnZW50OjpzZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IC8q
IG5vZGVJZCAqLywgY29uc3QgU3RyaW5nJiAvKiB0eXBlU3RyaW5nICovLCBjb25zdCBKU09OOjpP
YmplY3QqIC8qIG9wdGlvbnNQYXlsb2FkICovKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
OjpOb2RlSWQsIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgLyogb3B0aW9ucyAqLykKIHsKLSAgICBlcnJvclN0cmluZyA9ICJO
b3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRl
ZCJfcyk7CiB9CiAKLXZvaWQgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtw
b2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIGNvbnN0IFN0
cmluZyYgLyogdHlwZVN0cmluZyAqLykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdv
cmtlckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlKQogewotICAg
IGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBXb3JrZXJET01EZWJ1Z2dlckFnZW50
OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKQorYm9vbCBXb3JrZXJET01EZWJ1Z2dlckFnZW50Ojpz
ZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikKIHsKICAgICBlcnJvclN0cmluZyA9ICJO
b3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvV29ya2VyRE9NRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IDg2ZWI5M2Y1ZTE5NzU1
MWJiZDIwOTY5NjU3OWM3MDg5NGQ1OGMyMWMuLjU2ZjVhMDkwYTMzMDg2MDFkYmRiYTljNGYyYjRk
M2Y3YzExMzNkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKQEAgLTMxLDE5ICsz
MSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCiBjbGFzcyBXb3JrZXJET01EZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQgewogcHVibGljOgogICAgIFdvcmtlckRPTURlYnVnZ2VyQWdl
bnQoV29ya2VyQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Kik7Ci0gICAgfldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2Vy
RE9NRGVidWdnZXJBZ2VudCgpOwogCiAgICAgLy8gRE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiwgaW50IG5v
ZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01C
cmVha3BvaW50VHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURPTUJyZWFrcG9pbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXRB
bmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiYmKSBvdmVycmlkZTsKKyAgICBib29sIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50
LmNwcAppbmRleCBjYmM2MjA1MjIxOTRmMjlhOTQxODdhOGEyN2FjMTJiNDE5ZDM1OWUwLi43YWE3
MmI2YTRjNjRjYTlmNjc4MTUwZDA2YTMyZDAyOTRjNTA4ODI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dl
ckFnZW50LmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmJy
ZWFrcG9pbnRBY3Rpb25Mb2coSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogICAg
IG1fd29ya2VyR2xvYmFsU2NvcGUuYWRkQ29uc29sZU1lc3NhZ2UobWFrZVVuaXF1ZTxDb25zb2xl
TWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VUeXBlOjpMb2csIE1lc3NhZ2VMZXZl
bDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2sobGV4aWNhbEdsb2JhbE9iamVj
dCkpKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRp
b25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJEZWJ1Z2dlckFnZW50OjppbmplY3Rl
ZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0
cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igd29ya2VycyBh
cyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2Vy
QWdlbnQuaAppbmRleCA0YWMwN2Q2Y2MzN2MyMjgwMzMzOGViODBkMzQyMTk1MjFiOTZmM2RlLi43
Y2E2NGU0MDEzYTU0YjQxOGQ1M2U0NzQ4MDJlNzMyYmYxOTA4Yzk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdn
ZXJBZ2VudC5oCkBAIC0zNiwxNyArMzYsMTcgQEAgY2xhc3MgV29ya2VyRGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBXZWJEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJEZWJ1Z2dlckFnZW50KFdvcmtlckFnZW50Q29udGV4
dCYpOwotICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlckRl
YnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyCi0gICAgdm9p
ZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcm
IGRhdGEpIGZpbmFsOworICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogcHJpdmF0ZToKICAgICAvLyBXZSBkb24n
dCBuZWVkIHRvIG11dGUgY29uc29sZSBmb3Igd29ya2Vycy4KLSAgICB2b2lkIG11dGVDb25zb2xl
KCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBtdXRlQ29uc29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQog
Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgV29ya2VyR2xvYmFsU2NvcGUm
IG1fd29ya2VyR2xvYmFsU2NvcGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKaW5kZXgg
NTNmYTg4M2FkOTcxODg2ODRjYjk0YzA5MGU3OTYxNjkwODFiNmI0ZC4uMmIxNjhlNmQzYTdhMWJl
MTQ2ODM2OWMzMGNjMmViNmM5YjM5ZDI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwCkBA
IC00MywxMiArNDMsMTIgQEAgV29ya2VyTmV0d29ya0FnZW50OjpXb3JrZXJOZXR3b3JrQWdlbnQo
V29ya2VyQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJOZXR3b3JrQWdlbnQ6On5Xb3Jr
ZXJOZXR3b3JrQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLVN0cmluZyBXb3JrZXJOZXR3b3JrQWdlbnQ6
OmxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQorUHJvdG9jb2w6Ok5ldHdvcms6Okxv
YWRlcklkIFdvcmtlck5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRl
ciopCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFdvcmtlck5ldHdvcmtBZ2VudDo6
ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKK1Byb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkIFdvcmtlck5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikK
IHsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTksMTIgKzU5LDEyIEBAIFZlY3RvcjxXZWJTb2Nr
ZXQqPiBXb3JrZXJOZXR3b3JrQWdlbnQ6OmFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRl
ciYpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJl
c291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCit2b2lkIFdvcmtlck5ldHdvcmtB
Z2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wgZGlzYWJsZWQpCiB7
CiAgICAgbV93b3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS53b3JrZXJEZWJ1Z2dlclByb3h5KCku
c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3RvcihkaXNhYmxlZCk7CiB9CiAK
LVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdvcmtlck5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKQogewog
ICAgIHJldHVybiAmbV93b3JrZXJHbG9iYWxTY29wZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgK
aW5kZXggODk5ZjBhNTZmZDFiN2RhOTQzYTQ1NTNiOGM5NGNmM2M3YmZiMGI5NC4uOTFiMDViOWMy
MzBlYzdjZDM1YTQ2Y2U1N2M1NjYzOTI3MjIyZGZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgK
QEAgLTM0LDE1ICszNCwxNSBAQCBjbGFzcyBXb3JrZXJOZXR3b3JrQWdlbnQgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yTmV0d29ya0FnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBXb3JrZXJOZXR3b3JrQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0g
ICAgfldvcmtlck5ldHdvcmtBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJOZXR3b3JrQWdl
bnQoKTsKIAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExv
YWRlciopIG92ZXJyaWRlOwotICAgIFN0cmluZyBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2Fk
ZXIqKSBvdmVycmlkZTsKLSAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhj
b25zdCBMb2NrSG9sZGVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdE
aXNhYmxlZChib29sKSBvdmVycmlkZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSBv
dmVycmlkZTsKLSAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0
YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkZW50aWZp
ZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29j
a2V0cyhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNh
YmxlZEludGVyYWwoYm9vbCk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBib29sIHNob3VsZEZv
cmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRp
bWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3Jr
ZXJSdW50aW1lQWdlbnQuY3BwCmluZGV4IGQ5MjMwODFjNTFlM2JkMjc1MjFhYTI0MWM3Y2FjOGZi
NDBkM2UyODMuLmZmZmQzY2VhMjE1MzU5ZmU2ZjBlZDFlZGQ3NzJkMTZiNzA5NTFkZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRp
bWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcApAQCAtNTEsNyArNTEsNyBAQCBXb3JrZXJSdW50aW1lQWdl
bnQ6OldvcmtlclJ1bnRpbWVBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFdv
cmtlclJ1bnRpbWVBZ2VudDo6fldvcmtlclJ1bnRpbWVBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5q
ZWN0ZWRTY3JpcHQgV29ya2VyUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0lu
amVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlm
IChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9u
Q29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBv
bmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCmluZGV4IDUzMDhl
YjQzODhkNGQxMDUyZWM3NDU4NTA0N2ExZTg4ZTdkNDNiNGIuLjZiOTk4ZjRkMTczMTg1MWY5OWI2
N2VlMTVhNWQyMDAxNTg3ZjRkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCkBAIC0zNywyMSAr
MzcsMjAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgV29ya2VyUnVudGltZUFnZW50
IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXb3JrZXJSdW50aW1lQWdlbnQpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlclJ1bnRpbWVBZ2VudChXb3JrZXJBZ2Vu
dENvbnRleHQmKTsKLSAgICB+V29ya2VyUnVudGltZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfldv
cmtlclJ1bnRpbWVBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVj
dXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbXV0ZSBjb25zb2xlIGZvciB3b3JrZXJz
LgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAgdm9p
ZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpSdW50aW1lQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgV29ya2VyR2xvYmFsU2Nv
cGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAppbmRleCA1ZTg4NWFkNmU1ODY5
MDljMGVkMjE1YmVlNWJlOGU4ZWY3YzI3YWY4Li41YmViY2I0OWFhOGViOWEyYmIwNzExZWFlMDgw
ZjM3N2UyMmI5ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAKQEAgLTQ3LDEyICs0NywxMiBAQCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIp
CiAKICAgICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0
aGUgcm9vdCBvYmplY3QgKGlmIGFueSkuCiAgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkgfTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHZhbHVlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAoIUpTT046
OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpIHx8ICF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0
KSkKKworICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG9iamVj
dDsKKyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7CiB9CiAKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktl
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9D
RE1DbGVhcktleS5jcHAKaW5kZXggZTZjYzIyZDkwYzdhYzM5YjU2ZmQ4MmExNmIwNzY1ZWMxZTFj
ZmE4Ny4uNWExODJmZGY0NTI2NDJhYThlZjQ2MGI3NzRhYzllN2I0MGMyZWM1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xl
YXJLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2Ns
ZWFya2V5L0NETUNsZWFyS2V5LmNwcApAQCAtNTUsMjMgKzU1LDI3IEBAIHN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNP
Tjo6T2JqZWN0CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBSZXRyaWV2
ZSB0aGUga2V5cyBhcnJheS4KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGtleXNBcnJheTsKLSAg
ICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShrZXlzQXJyYXkpKQorICAgIGF1dG8ga2V5c0FycmF5
ID0gaXQtPnZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFrZXlzQXJyYXkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IGRlY29k
ZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6OmFsbF9vZihrZXlzQXJyYXktPmJl
Z2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsmZGVjb2RlZEtleXNdIChjb25zdCBh
dXRvJiB2YWx1ZSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4ga2V5T2JqZWN0
OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qoa2V5T2JqZWN0KSkKKyAgICAgICAg
ICAgIGF1dG8ga2V5T2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAo
IWtleU9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IFN0cmluZyBrZXlUeXBlOwotICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QtPmdldFN0cmluZygi
a3R5Iiwga2V5VHlwZSkgfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleVR5cGUs
ICJvY3QiKSkKKyAgICAgICAgICAgIGF1dG8ga2V5VHlwZSA9IGtleU9iamVjdC0+Z2V0U3RyaW5n
KCJrdHkiKTsKKyAgICAgICAgICAgIGlmICgha2V5VHlwZSB8fCAhZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoa2V5VHlwZSwgIm9jdCIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleUlELCBrZXlWYWx1ZTsKLSAgICAgICAgICAgIGlm
ICgha2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIsIGtleUlEKSB8fCAha2V5T2JqZWN0LT5nZXRT
dHJpbmcoImsiLCBrZXlWYWx1ZSkpCisgICAgICAgICAgICBhdXRvIGtleUlEID0ga2V5T2JqZWN0
LT5nZXRTdHJpbmcoImtpZCIpOworICAgICAgICAgICAgaWYgKCFrZXlJRCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGF1dG8ga2V5VmFsdWUgPSBrZXlPYmpl
Y3QtPmdldFN0cmluZygiayIpOworICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIEtleUlEVHlwZSBrZXlJRERhdGE7
CkBAIC05Niw4ICsxMDAsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZUxpY2Vuc2VSZWxlYXNlQWNrbm93
bGVkZ2VtZW50Rm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGtpZHMgYXJyYXkuCi0gICAgUmVmUHRyPEpT
T046OkFycmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2lkc0Fy
cmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IGl0LT52YWx1ZS0+YXNBcnJheSgpOworICAgIGlm
ICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogUmV0
dXJuIHRoZSBrZXkgSURzIGFuZCB2YWxpZGF0ZSB0aGVtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1G
YWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggOGFjNDhlYzVkYzY5YjMxNDk1N2JhNDMzZjk3MTAx
ZWEyNzc2OTY0NC4uNGY0MmM0OTNjYzM1NzBkZGM2YWYwOGRlMzkwNWQwY2M4NDlkOWE3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NE
TUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC05MiwyNCArOTIs
MjQgQEAgc3RhdGljIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gZXh0cmFjdFNpbmZEYXRhKGNv
bnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgICAgICByZXR1cm4geyB9OwogICAgIFN0cmlu
ZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJ1ZmZlci5zaXpl
KCkpIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5h
c09iamVjdChvYmplY3QpKQorICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IHNpbmZBcnJheTsKLSAgICBpZiAoIW9iamVjdC0+Z2V0QXJyYXkoQ0RNUHJpdmF0ZUZh
aXJQbGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpLCBzaW5mQXJyYXkpKQorICAgIGF1dG8gc2luZkFy
cmF5ID0gb2JqZWN0LT5nZXRBcnJheShDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZO
YW1lKCkpOworICAgIGlmICghc2luZkFycmF5KQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBzaW5mczsKICAgICBzaW5mcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpbmZBcnJheS0+bGVuZ3RoKCkpOwogCiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
ICpzaW5mQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlEOwotICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5SUQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFZlY3RvcjxjaGFyPiBzaW5mRGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggYzA1
MTlhOGMyMjE5MzBmNWM2MWEwYTgwZTllYzNhMWU5OWM4ZjFkNC4uMWM0OWY4ODc1M2E5NGM5MDdi
ZGY2ZGIwMTlmMjE5NWI4NDdiNDgzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTMx
MiwxMSArMzEyLDggQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGFyc2VKU09OVmFsdWUo
Y29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAKICAgICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNv
bnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUgcm9vdCBvYmplY3QgKGlmIGFueSkuCiAgICAg
U3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkg
fTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmV0dXJuIHZhbHVlOworICAgIHJldHVybiBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOwog
fQogCiBib29sIENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjpzdXBwb3J0c1Bl
cnNpc3RhYmxlU3RhdGUoKQpAQCAtODA0LDE5ICs4MDEsMjQgQEAgdm9pZCBDRE1JbnN0YW5jZVNl
c3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5n
JiwgTGkKICAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byByb290ID0gcGFyc2VKU09OVmFsdWUo
cmVzcG9uc2VEYXRhKTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAg
ICAgaWYgKCFyb290IHx8ICFyb290LT5hc0FycmF5KGFycmF5KSkgeworICAgICAgICBpZiAoIXJv
b3QpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0LCBGYWlsZWQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgYXV0byBwYXJzZVJlc3BvbnNlID0gWyZdKFJlZlB0cjxKU09OOjpWYWx1
ZT4mIHZhbHVlKSAtPiBib29sIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgICAg
IGF1dG8gYXJyYXkgPSByb290LT5hc0FycmF5KCk7CisgICAgICAgIGlmICghYXJyYXkpIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBwYXJzZVJlc3BvbnNlID0gWyZdKFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOwor
ICAgICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICBTdHJpbmcga2V5SURTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIW9iamVj
dC0+Z2V0U3RyaW5nKCJrZXlJRCIsIGtleUlEU3RyaW5nKSkKKyAgICAgICAgICAgIGF1dG8ga2V5
SURTdHJpbmcgPSBvYmplY3QtPmdldFN0cmluZygia2V5SUQiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5SURTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWN0b3I7CkBAIC04NDMsMTQgKzg0NSwxNCBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5z
ZShjb25zdCBTdHJpbmcmLCBMaQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgaWYgKGhhc0Vycm9yKSB7Ci0gICAgICAgICAgICAgICAgTlNJbnRlZ2VyIGVycm9y
Q29kZTsKLSAgICAgICAgICAgICAgICBpZiAoIWVycm9yRmluZFJlc3VsdHMtPnZhbHVlLT5hc0lu
dGVnZXIoZXJyb3JDb2RlKSkKKyAgICAgICAgICAgICAgICBhdXRvIGVycm9yQ29kZSA9IGVycm9y
RmluZFJlc3VsdHMtPnZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVy
cm9yQ29kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGF1dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46
QCJvcmcud2Via2l0LmVtZSIgY29kZTplcnJvckNvZGUgdXNlckluZm86bmlsXSk7CisgICAgICAg
ICAgICAgICAgYXV0byBlcnJvciA9IGFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERv
bWFpbjpAIm9yZy53ZWJraXQuZW1lIiBjb2RlOiplcnJvckNvZGUgdXNlckluZm86bmlsXSk7CiAg
ICAgICAgICAgICAgICAgW3JlcXVlc3QgcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZUVycm9yOmVy
cm9yLmdldCgpXTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzUGF5bG9hZCkgewotICAgICAg
ICAgICAgICAgIFN0cmluZyBwYXlsb2FkU3RyaW5nOwotICAgICAgICAgICAgICAgIGlmICghcGF5
bG9hZEZpbmRSZXN1bHRzLT52YWx1ZS0+YXNTdHJpbmcocGF5bG9hZFN0cmluZykpCisgICAgICAg
ICAgICAgICAgYXV0byBwYXlsb2FkU3RyaW5nID0gcGF5bG9hZEZpbmRSZXN1bHRzLT52YWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRTdHJpbmcpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4gcGF5bG9hZFZlY3RvcjsKICAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwYXls
b2FkU3RyaW5nLCBwYXlsb2FkVmVjdG9yKSkKQEAgLTg2MSw3ICs4NjMsNyBAQCB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25z
dCBTdHJpbmcmLCBMaQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH07CiAgICAg
ICAgIGZvciAoYXV0byB2YWx1ZSA6ICphcnJheSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZVJl
c3BvbnNlKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3BvbnNlKFdURk1vdmUo
dmFsdWUpKSkgewogICAgICAgICAgICAgICAgIERFQlVHX0xPR19JRl9QT1NTSUJMRShMT0dJREVO
VElGSUVSLCAiJ2NlbmMnIGluaXREYXRhLCBGYWlsZWQsIGNvdWxkIG5vdCBwYXJzZSByZXNwb25z
ZSIpOwogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBGYWlsZWQpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAgYi9Tb3VyY2Uv
V2ViRHJpdmVyL0NvbW1hbmRSZXN1bHQuY3BwCmluZGV4IGE3MjA3MDk5MDg5M2RiMTU2ZDdmZDZm
ZTMwN2E1M2YyMGNiMjM1MGEuLjczNGZiMmMzY2M1Y2E0YWJkNDBhN2YzNTAzYWZiYjJiNDVjOTY1
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAKKysrIGIv
U291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcApAQCAtNDksMTUgKzQ5LDE2IEBAIENv
bW1hbmRSZXN1bHQ6OkNvbW1hbmRSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVlPiYmIHJlc3VsdCwg
T3B0aW9uYWw8RXJyb3JDb2RlPiBlCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVycm9yT2JqZWN0OwotICAgIGlmICghcmVzdWx0
LT5hc09iamVjdChlcnJvck9iamVjdCkpCisgICAgYXV0byBlcnJvck9iamVjdCA9IHJlc3VsdC0+
YXNPYmplY3QoKTsKKyAgICBpZiAoIWVycm9yT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpbnQgZXJyb3I7Ci0gICAgaWYgKCFlcnJvck9iamVjdC0+Z2V0SW50ZWdlcigiY29kZSIsIGVy
cm9yKSkKKyAgICBhdXRvIGVycm9yID0gZXJyb3JPYmplY3QtPmdldEludGVnZXIoImNvZGUiKTsK
KyAgICBpZiAoIWVycm9yKQogICAgICAgICByZXR1cm47Ci0gICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZTsKLSAgICBpZiAoIWVycm9yT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3Nh
Z2UpKQorCisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBlcnJvck9iamVjdC0+Z2V0U3RyaW5nKCJt
ZXNzYWdlIik7CisgICAgaWYgKCFlcnJvck1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHN3aXRjaCAoZXJyb3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3BwCmluZGV4IGE1NWZhNDkzODBjNDk1MTMw
ZmUzMWE5NmM4NGUwODliNzZkMWNhYzguLjdlYjdiZmRlYzY4YTYwMGQ0Nzc4YTY3YjAxMTdkMWEz
MDBkYWVjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5jcHAKKysrIGIv
U291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcApAQCAtODMsMTEgKzgzLDEwIEBAIGJvb2wgU2Vz
c2lvbjo6aXNDb25uZWN0ZWQoKSBjb25zdAogCiBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBmaXJz
dFdpbmRvd0hhbmRsZUluUmVzdWx0KEpTT046OlZhbHVlJiByZXN1bHQpCiB7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBoYW5kbGVzOwotICAgIGlmIChyZXN1bHQuYXNBcnJheShoYW5kbGVzKSAm
JiBoYW5kbGVzLT5sZW5ndGgoKSkgewotICAgICAgICBhdXRvIGhhbmRsZVZhbHVlID0gaGFuZGxl
cy0+Z2V0KDApOwotICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICBpZiAoaGFuZGxlVmFs
dWUtPmFzU3RyaW5nKGhhbmRsZSkpCisgICAgYXV0byBoYW5kbGVzID0gcmVzdWx0LmFzQXJyYXko
KTsKKyAgICBpZiAoaGFuZGxlcyAmJiBoYW5kbGVzLT5sZW5ndGgoKSkgeworICAgICAgICBhdXRv
IGhhbmRsZSA9IGhhbmRsZXMtPmdldCgwKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCEhaGFu
ZGxlKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAgICB9CiAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKQEAgLTEyNiw3ICsxMjUsNyBAQCB2b2lkIFNlc3Npb246OmNsb3NlKEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAKIHZvaWQgU2Vz
c2lvbjo6Z2V0VGltZW91dHMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIGlmIChtX3NjcmlwdFRpbWVvdXQgPT0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRWYWx1ZSgi
c2NyaXB0Il9zLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKICAgICBlbHNlCkBAIC0xODcsMTEgKzE4
NiwxMyBAQCB2b2lkIFNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgYwogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5k
bGU7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFu
ZGxlIl9zLCBoYW5kbGUpKSB7CisKKyAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKICAgICAgICAgc3dpdGNoVG9Ub3BMZXZlbEJyb3dzaW5nQ29udGV4dCho
YW5kbGUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNz
KCkpOwogICAgIH0pOwpAQCAtMTk5LDE1ICsyMDAsMTYgQEAgdm9pZCBTZXNzaW9uOjpjcmVhdGVU
b3BMZXZlbEJyb3dzaW5nQ29udGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYm
IGMKIAogdm9pZCBTZXNzaW9uOjpoYW5kbGVVc2VyUHJvbXB0cyhGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiaXNTaG93aW5nSmF2
YVNjcmlwdERpYWxvZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSBtdXRh
YmxlIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nOwot
ICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJyZXN1bHQi
LCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKSkgeworCisgICAgICAgIGF1dG8gaXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJy
ZXN1bHQiKTsKKyAgICAgICAgaWYgKCFpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTI3MywxMyArMjc1LDEzIEBAIHZvaWQgU2Vzc2lvbjo6cmVwb3J0VW5leHBlY3Rl
ZEFsZXJ0T3BlbihGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsCiAgICAg
Z2V0QWxlcnRUZXh0KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSB7CiAgICAgICAgIE9wdGlvbmFsPFN0cmluZz4g
YWxlcnRUZXh0OwogICAgICAgICBpZiAoIXJlc3VsdC5pc0Vycm9yKCkpIHsKLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0KCktPmFz
U3RyaW5nKHZhbHVlU3RyaW5nKSkKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXN1
bHQucmVzdWx0KCktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoISF2YWx1ZVN0cmluZykK
ICAgICAgICAgICAgICAgICBhbGVydFRleHQgPSB2YWx1ZVN0cmluZzsKICAgICAgICAgfQogICAg
ICAgICBhdXRvIGVycm9yUmVzdWx0ID0gQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVuZXhwZWN0ZWRBbGVydE9wZW4pOwogICAgICAgICBpZiAoYWxlcnRUZXh0
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBhZGRpdG9uYWxEYXRhID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gYWRkaXRvbmFsRGF0YSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBhZGRpdG9uYWxEYXRhLT5zZXRTdHJp
bmcoInRleHQiX3MsIGFsZXJ0VGV4dC52YWx1ZSgpKTsKICAgICAgICAgICAgIGVycm9yUmVzdWx0
LnNldEFkZGl0aW9uYWxFcnJvckRhdGEoV1RGTW92ZShhZGRpdG9uYWxEYXRhKSk7CiAgICAgICAg
IH0KQEAgLTMwMCw3ICszMDIsNyBAQCB2b2lkIFNlc3Npb246OmdvKGNvbnN0IFN0cmluZyYgdXJs
LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpbwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoInVybCJfcywgdXJsKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0RG91YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKQEAg
LTMzMCwyMyArMzMyLDI2IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0Q3VycmVudFVSTChGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJo
YW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIG1f
aG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImdldEJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNw
b25zZSkgewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCIsIGJyb3dzaW5nQ29udGV4dCkpIHsKKwor
ICAgICAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0T2JqZWN0KCJjb250ZXh0Iik7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4
dCkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwotICAg
ICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygidXJsIiwgdXJsKSkgewor
CisgICAgICAgICAgICBhdXRvIHVybCA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJ1cmwi
KTsKKyAgICAgICAgICAgIGlmICghdXJsKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKHVybCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0zNjQsNyArMzY5
LDcgQEAgdm9pZCBTZXNzaW9uOjpiYWNrKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0RG91YmxlKCJwYWdlTG9hZFRp
bWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAgICAgaWYgKGF1dG8gcGFnZUxvYWRT
dHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKQEAgLTM5Miw3ICszOTcsNyBAQCB2
b2lkIFNlc3Npb246OmZvcndhcmQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXREb3VibGUoInBhZ2VMb2FkVGltZW91
dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwogICAgICAgICBpZiAoYXV0byBwYWdlTG9hZFN0cmF0
ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0cmluZygpKQpAQCAtNDIwLDcgKzQyNSw3IEBAIHZvaWQg
U2Vzc2lvbjo6cmVmcmVzaChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFs
dWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9z
LCBtX3BhZ2VMb2FkVGltZW91dCk7CiAgICAgICAgIGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kg
PSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCkBAIC00NDgsNyArNDUzLDcgQEAgdm9pZCBTZXNz
aW9uOjpnZXRUaXRsZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnVuY3Rp
b24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LnRpdGxlOyB9Il9zKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3VtZW50cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpKTsKQEAgLTQ1NywxNiArNDYyLDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VGl0bGUoRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVz
cG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYg
KCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3Ry
aW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVT
dHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVz
dWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtNDc5LDMwICs0ODcsMzMgQEAg
dm9pZCBTZXNzaW9uOjpnZXRXaW5kb3dIYW5kbGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFs
dWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QnJvd3NpbmdDb250
ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNz
aW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3Bv
bnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVz
cG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5nQ29udGV4
dCkpIHsKKworICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dzaW5nQ29u
dGV4dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAgIGlmICgh
YnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAg
ICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcyk7
CisgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUoaGFuZGxl
KSkpOwogICAgIH0pOwogfQogCiB2b2lkIFNlc3Npb246OmNsb3NlVG9wTGV2ZWxCcm93c2luZ0Nv
bnRleHQoY29uc3QgU3RyaW5nJiB0b3BsZXZlbEJyb3dzaW5nQ29udGV4dCwgRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiaGFuZGxlIl9zLCB0b3BsZXZlbEJyb3dzaW5nQ29udGV4dCk7CiAgICAgbV9o
b3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiY2xvc2VCcm93c2luZ0NvbnRleHQiX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0
OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9o
b3N0LT5pc0Nvbm5lY3RlZCgpKSB7CkBAIC01NDUsNyArNTU2LDcgQEAgdm9pZCBTZXNzaW9uOjpj
bG9zZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogCiB2b2lkIFNlc3Npb246OnN3aXRjaFRvV2luZG93KGNvbnN0IFN0cmluZyYgd2lu
ZG93SGFuZGxlLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUi
X3MsIHdpbmRvd0hhbmRsZSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgic3dp
dGNoVG9Ccm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdpbmRvd0hhbmRsZSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNw
b25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC01
NjQsMjIgKzU3NSwyMyBAQCB2b2lkIFNlc3Npb246OmdldFdpbmRvd0hhbmRsZXMoRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZAogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYnJvd3NpbmdDb250ZXh0QXJyYXk7Ci0gICAgICAgIGlmICghcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5KCJjb250ZXh0cyJfcywgYnJvd3NpbmdDb250
ZXh0QXJyYXkpKSB7CisKKyAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHRBcnJheSA9IHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29udGV4dHMiX3MpOworICAgICAgICBpZiAo
IWJyb3dzaW5nQ29udGV4dEFycmF5KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiB3aW5kb3dIYW5kbGVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAg
IGF1dG8gd2luZG93SGFuZGxlcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyb3dzaW5nQ29udGV4dEFycmF5LT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJyb3dzaW5nQ29udGV4dFZhbHVl
ID0gYnJvd3NpbmdDb250ZXh0QXJyYXktPmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250
ZXh0VmFsdWUtPmFzT2JqZWN0KGJyb3dzaW5nQ29udGV4dCkpIHsKKyAgICAgICAgICAgIGF1dG8g
YnJvd3NpbmdDb250ZXh0ID0gYnJvd3NpbmdDb250ZXh0QXJyYXktPmdldChpKS0+YXNPYmplY3Qo
KTsKKyAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZTsKLSAgICAgICAgICAgIGlmICghYnJv
d3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworICAgICAgICAg
ICAgYXV0byBoYW5kbGUgPSBicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygiaGFuZGxlIl9zKTsK
KyAgICAgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTYx
MywxNyArNjI1LDIwIEBAIHZvaWQgU2Vzc2lvbjo6bmV3V2luZG93KE9wdGlvbmFsPFN0cmluZz4g
dHlwZUhpbnQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmCiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAgICAg
ICAgICBhdXRvIGhhbmRsZSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoImhh
bmRsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBTdHJpbmcgcHJlc2VudGF0aW9uOwotICAgICAgICAgICAgaWYgKCFy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzZW50YXRpb24iX3MsIHByZXNl
bnRhdGlvbikpIHsKKworICAgICAgICAgICAgYXV0byBwcmVzZW50YXRpb24gPSByZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzZW50YXRpb24iX3MpOworICAgICAgICAgICAg
aWYgKCFwcmVzZW50YXRpb24pIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKwor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKTsKICAgICAgICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBwcmVzZW50YXRpb24gPT0gIldpbmRvdyJfcyA/
ICJ3aW5kb3ciX3MgOiAidGFiIl9zKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHQpKSk7CkBAIC02NDksMTUgKzY2NCwx
NCBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZy
YW1lSUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJl
bnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZy
YW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAKLSAgICAg
ICAgaW50IGZyYW1lSW5kZXg7Ci0gICAgICAgIGlmIChmcmFtZUlELT5hc0ludGVnZXIoZnJhbWVJ
bmRleCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZnJhbWVJbmRleCA9IGZyYW1lSUQtPmFzSW50ZWdl
cigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoZnJhbWVJbmRleCA+PSAwICYmIGZyYW1lSW5kZXgg
PCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpOwotICAgICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5hbCJfcywgZnJhbWVJbmRleCk7CisgICAg
ICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKCJvcmRpbmFsIl9zLCAqZnJhbWVJbmRleCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgZnJhbWVFbGVtZW50SUQgPSBl
eHRyYWN0RWxlbWVudElEKCpmcmFtZUlEKTsKICAgICAgICAgICAgIEFTU0VSVCghZnJhbWVFbGVt
ZW50SUQuaXNFbXB0eSgpKTsKQEAgLTY2OSwxMSArNjgzLDEzIEBAIHZvaWQgU2Vzc2lvbjo6c3dp
dGNoVG9GcmFtZShSZWZQdHI8SlNPTjo6VmFsdWU+JiYgZnJhbWVJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBmcmFtZUhhbmRsZTsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zLCBmcmFtZUhhbmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBmcmFtZUhhbmRsZSA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAg
ICAgICBpZiAoIWZyYW1lSGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVIYW5kbGUpOwogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICAgICAgfSk7
CkBAIC02OTcsNyArNzEzLDcgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1BhcmVudEZyYW1lKEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkgKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdD
b250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoInJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAt
NzA1LDExICs3MjEsMTMgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1BhcmVudEZyYW1lKEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkgKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgU3RyaW5nIGZyYW1lSGFuZGxlOwotICAgICAgICAgICAgaWYgKCFyZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIGZyYW1lSGFuZGxlKSkg
eworCisgICAgICAgICAgICBhdXRvIGZyYW1lSGFuZGxlID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghZnJhbWVIYW5kbGUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2hUb0Jyb3dzaW5n
Q29udGV4dChmcmFtZUhhbmRsZSk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAgICAgICB9KTsKQEAgLTcxOCwzOSArNzM2LDYxIEBA
IHZvaWQgU2Vzc2lvbjo6c3dpdGNoVG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25ICiAKIHZvaWQgU2Vzc2lvbjo6Z2V0VG9wbGV2ZWxCcm93
c2luZ0NvbnRleHRSZWN0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3Bs
ZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9C
YWNrZW5kKCJnZXRCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRl
eHQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29u
dGV4dCJfcywgYnJvd3NpbmdDb250ZXh0KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdDb250
ZXh0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCJfcyk7Cisg
ICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gd2luZG93T3JpZ2luOwotICAgICAgICBkb3VibGUgeCA9IDAsIHkgPSAw
OwotICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4i
X3MsIHdpbmRvd09yaWdpbikKLSAgICAgICAgICAgIHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJs
ZSgieCJfcywgeCkKLSAgICAgICAgICAgIHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieSJf
cywgeSkpIHsKKworICAgICAgICBhdXRvIHdpbmRvd09yaWdpbiA9IGJyb3dzaW5nQ29udGV4dC0+
Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4iX3MpOworICAgICAgICBpZiAoIXdpbmRvd09yaWdpbikg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd1NpemU7Ci0g
ICAgICAgIGRvdWJsZSB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgICAgIGlmICghYnJvd3Np
bmdDb250ZXh0LT5nZXRPYmplY3QoIndpbmRvd1NpemUiX3MsIHdpbmRvd1NpemUpCi0gICAgICAg
ICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcywgd2lkdGgpCi0gICAgICAg
ICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCkpIHsKKwor
ICAgICAgICBhdXRvIHggPSB3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieCJfcyk7CisgICAgICAg
IGlmICgheCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgYXV0byB5ID0gd2luZG93T3JpZ2luLT5n
ZXREb3VibGUoInkiX3MpOworICAgICAgICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gd2luZG93U2l6ZSA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXpl
Il9zKTsKKyAgICAgICAgaWYgKCF3aW5kb3dTaXplKSB7CisgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5r
bm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBh
dXRvIHdpZHRoID0gd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcyk7CisgICAgICAgIGlm
ICghd2lkdGgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaGVpZ2h0ID0gd2luZG93U2l6
ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3MpOworICAgICAgICBpZiAoIWhlaWdodCkgeworICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKICAgICAgICAgYXV0byB3aW5kb3dSZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ4Il9zLCB4KTsKLSAgICAgICAgd2luZG93
UmVjdC0+c2V0RG91YmxlKCJ5Il9zLCB5KTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91Ymxl
KCJ3aWR0aCJfcywgd2lkdGgpOwotICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoImhlaWdo
dCJfcywgaGVpZ2h0KTsKKyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ4Il9zLCB4LnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3MsIHku
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgi
X3MsIHdpZHRoLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3Vi
bGUoImhlaWdodCJfcywgaGVpZ2h0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUod2luZG93UmVjdCkpKTsK
ICAgICB9KTsKIH0KQEAgLTc4NCwxNiArODI0LDE2IEBAIHZvaWQgU2Vzc2lvbjo6c2V0V2luZG93
UmVjdChPcHRpb25hbDxkb3VibGU+IHgsIE9wdGlvbmFsPGRvdWJsZT4geSwgT3B0aW9uYWw8ZG91
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUo
KSk7CiAgICAgICAgIGlmICh4ICYmIHkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBh
dXRvIHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICB3
aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieCIsIHgudmFsdWUoKSk7CiAgICAgICAgICAgICB3aW5k
b3dPcmlnaW4tPnNldERvdWJsZSgieSIsIHkudmFsdWUoKSk7CiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRPYmplY3QoIm9yaWdpbiJfcywgV1RGTW92ZSh3aW5kb3dPcmlnaW4pKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiB3aW5kb3dTaXplID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
ICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoIndpZHRoIiwgd2lkdGgudmFsdWUoKSk7CiAgICAg
ICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoImhlaWdodCIsIGhlaWdodC52YWx1ZSgpKTsK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgic2l6ZSJfcywgV1RGTW92ZSh3aW5k
b3dTaXplKSk7CkBAIC04MjEsNyArODYxLDcgQEAgdm9pZCBTZXNzaW9uOjptYXhpbWl6ZVdpbmRv
dyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGUKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsK
ICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgibWF4aW1pemVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTZXNz
aW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUgewogICAgICAgICAg
ICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTg0Niw3ICs4ODYsNyBAQCB2b2lkIFNlc3Np
b246Om1pbmltaXplV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJo
aWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC04NzEsNyArOTExLDcg
QEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhh
bmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgU3RyaW5nKEVudGVyRnVsbHNjcmVlbkph
dmFTY3JpcHQsIHNpemVvZihFbnRlckZ1bGxzY3JlZW5KYXZhU2NyaXB0KSkpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkp
OwpAQCAtODgyLDEzICs5MjIsMTQgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyB2YWx1
ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC04OTgsMjQgKzkzOSwyNCBAQCB2b2lkIFNlc3Npb246OmZ1bGxzY3Jl
ZW5XaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZAogICAgIH0pOwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVt
ZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK1JlZlB0cjxKU09OOjpPYmplY3Q+IFNl
c3Npb246OmNyZWF0ZUVsZW1lbnQoUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlT2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0
KHZhbHVlT2JqZWN0KSkKKyAgICBhdXRvIHZhbHVlT2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBT
dHJpbmcgZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZygic2Vzc2lv
bi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVP
YmplY3QtPmdldFN0cmluZygic2Vzc2lvbi1ub2RlLSIgKyBpZCgpKTsKKyAgICBpZiAoIWVsZW1l
bnRJRCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBlbGVtZW50T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGVsZW1l
bnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNl
dFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBl
bGVtZW50T2JqZWN0OwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVF
bGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElEKQorUmVmPEpTT046Ok9iamVjdD4gU2Vzc2lv
bjo6Y3JlYXRlRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCkKIHsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1l
bnRPYmplY3QtPnNldFN0cmluZygic2Vzc2lvbi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpOwog
ICAgIHJldHVybiBlbGVtZW50T2JqZWN0OwogfQpAQCAtOTI4LDEyICs5NjksMTIgQEAgUmVmUHRy
PEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnQoSlNPTjo6VmFsdWUmIHZhbHVl
KQogCiBTdHJpbmcgU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRChKU09OOjpWYWx1ZSYgdmFsdWUp
CiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1
ZS5hc09iamVjdCh2YWx1ZU9iamVjdCkpCisgICAgYXV0byB2YWx1ZU9iamVjdCA9IHZhbHVlLmFz
T2JqZWN0KCk7CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdl
dFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gZWxl
bWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpKTsK
KyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAg
ICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTQzLDcgKzk4NCw3IEBAIHZvaWQgU2Vzc2lvbjo6Y29t
cHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIE9wdGlvblNldDxFbGVt
ZW50TGF5CiB7CiAgICAgQVNTRVJUKG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3Rv
cGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5
U3RyaW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVs
ZW1lbnRJRCk7CkBAIC05NTQsNTcgKzk5NSw1OCBAQCB2b2lkIFNlc3Npb246OmNvbXB1dGVFbGVt
ZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBPcHRpb25TZXQ8RWxlbWVudExheQog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
IGZhbHNlLCBXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVjdE9iamVj
dDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJyZWN0
Il9zLCByZWN0T2JqZWN0KSkgeworCisgICAgICAgIGF1dG8gcmVjdE9iamVjdCA9IHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoInJlY3QiX3MpOworICAgICAgICBpZiAoIXJlY3RP
YmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBmYWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRYOwogICAgICAgICBPcHRpb25hbDxp
bnQ+IGVsZW1lbnRZOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50UG9zaXRp
b247Ci0gICAgICAgIGlmIChyZWN0T2JqZWN0LT5nZXRPYmplY3QoIm9yaWdpbiJfcywgZWxlbWVu
dFBvc2l0aW9uKSkgewotICAgICAgICAgICAgaW50IHgsIHk7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBlbGVtZW50UG9zaXRpb24tPmdl
dEludGVnZXIoInkiX3MsIHkpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudFggPSB4OwotICAg
ICAgICAgICAgICAgIGVsZW1lbnRZID0geTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgYXV0byBl
bGVtZW50UG9zaXRpb24gPSByZWN0T2JqZWN0LT5nZXRPYmplY3QoIm9yaWdpbiJfcyk7CisgICAg
ICAgIGlmIChlbGVtZW50UG9zaXRpb24pIHsKKyAgICAgICAgICAgIGVsZW1lbnRYID0gZWxlbWVu
dFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgICAgIGVsZW1lbnRZID0gZWxl
bWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
IWVsZW1lbnRYIHx8ICFlbGVtZW50WSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBudWxscHRyKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIE9wdGlvbmFsPGludD4gZWxlbWVudFdpZHRo
OwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRIZWlnaHQ7Ci0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGVsZW1lbnRTaXplOwotICAgICAgICBpZiAocmVjdE9iamVjdC0+Z2V0T2Jq
ZWN0KCJzaXplIl9zLCBlbGVtZW50U2l6ZSkpIHsKLSAgICAgICAgICAgIGludCB3aWR0aCwgaGVp
Z2h0OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJ3aWR0aCJfcywg
d2lkdGgpICYmIGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3MsIGhlaWdodCkpIHsK
LSAgICAgICAgICAgICAgICBlbGVtZW50V2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgICAgICBl
bGVtZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIGVsZW1l
bnRTaXplID0gcmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9zKTsKKyAgICAgICAgaWYgKGVs
ZW1lbnRTaXplKSB7CisgICAgICAgICAgICBlbGVtZW50V2lkdGggPSBlbGVtZW50U2l6ZS0+Z2V0
SW50ZWdlcigid2lkdGgiX3MpOworICAgICAgICAgICAgZWxlbWVudEhlaWdodCA9IGVsZW1lbnRT
aXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3MpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZWxl
bWVudFdpZHRoIHx8ICFlbGVtZW50SGVpZ2h0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgUmVjdCByZWN0ID0geyB7IGVsZW1l
bnRYLnZhbHVlKCksIGVsZW1lbnRZLnZhbHVlKCkgfSwgeyBlbGVtZW50V2lkdGgudmFsdWUoKSwg
ZWxlbWVudEhlaWdodC52YWx1ZSgpIH0gfTsKIAotICAgICAgICBib29sIGlzT2JzY3VyZWQ7Ci0g
ICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEJvb2xlYW4oImlzT2JzY3Vy
ZWQiX3MsIGlzT2JzY3VyZWQpKSB7CisgICAgICAgIGF1dG8gaXNPYnNjdXJlZCA9IHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVkIl9zKTsKKyAgICAgICAgaWYg
KCFpc09ic2N1cmVkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluVmlld0NlbnRlclBvaW50
T2JqZWN0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3Qo
ImluVmlld0NlbnRlclBvaW50Il9zLCBpblZpZXdDZW50ZXJQb2ludE9iamVjdCkpIHsKKworICAg
ICAgICBhdXRvIGluVmlld0NlbnRlclBvaW50T2JqZWN0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldE9iamVjdCgiaW5WaWV3Q2VudGVyUG9pbnQiX3MpOworICAgICAgICBpZiAoIWluVmll
d0NlbnRlclBvaW50T2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0
LCBXVEY6Om51bGxvcHQsIGlzT2JzY3VyZWQsIG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGludCBpblZpZXdDZW50ZXJQb2ludFggPSAwLCBpblZpZXdD
ZW50ZXJQb2ludFkgPSAwOwotICAgICAgICBpZiAoIWluVmlld0NlbnRlclBvaW50T2JqZWN0LT5n
ZXRJbnRlZ2VyKCJ4Il9zLCBpblZpZXdDZW50ZXJQb2ludFgpCi0gICAgICAgICAgICB8fCAhaW5W
aWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIoInkiX3MsIGluVmlld0NlbnRlclBvaW50
WSkpIHsKKworICAgICAgICBhdXRvIGluVmlld0NlbnRlclBvaW50WCA9IGluVmlld0NlbnRlclBv
aW50T2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQ
b2ludFkgPSBpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigieSJfcyk7CisgICAg
ICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRYIHx8ICFpblZpZXdDZW50ZXJQb2ludFkpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBp
c09ic2N1cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAg
ICAgICAgIFBvaW50IGluVmlld0NlbnRlclBvaW50ID0geyBpblZpZXdDZW50ZXJQb2ludFgsIGlu
Vmlld0NlbnRlclBvaW50WSB9OwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0LCBpblZp
ZXdDZW50ZXJQb2ludCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgfSk7CkBAIC0xMDIyLDcg
KzEwNjQsNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0
ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5kRQogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7
CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHN0cmF0
ZWd5KS0+dG9KU09OU3RyaW5nKCkpOwogICAgICAgICBpZiAocm9vdEVsZW1lbnRJRC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6Om51bGwo
KS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTAzMiw3ICsxMDc0LDcgQEAgdm9pZCBTZXNzaW9uOjpm
aW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgRmluZEUKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVh
dGUobW9kZSA9PSBGaW5kRWxlbWVudHNNb2RlOjpTaW5nbGUpLT50b0pTT05TdHJpbmcoKSk7CiAg
ICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKG1faW1wbGlj
aXRXYWl0VGltZW91dCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQp
CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1
cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMDQ4LDIwICsxMDkwLDIzIEBAIHZv
aWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyYXRlZ3ksIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmlu
ZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3Qt
PmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25z
ZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0
cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisKICAgICAgICAg
ICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICAgICAgY2FzZSBGaW5kRWxlbWVudHNNb2RlOjpT
aW5nbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2Jq
ZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50T2JqZWN0KSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTEwNzAsMTIgKzExMTUsMTMgQEAgdm9pZCBTZXNzaW9uOjpmaW5kRWxlbWVudHMoY29u
c3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRmluZEUKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRmluZEVs
ZW1lbnRzTW9kZTo6TXVsdGlwbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGVsZW1lbnRzQXJyYXk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNB
cnJheShlbGVtZW50c0FycmF5KSkgeworICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudHNBcnJh
eSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50
c0FycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBlbGVtZW50T2JqZWN0c0FycmF5ID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOworCisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50T2JqZWN0c0FycmF5
ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVsZW1l
bnRzQXJyYXlMZW5ndGggPSBlbGVtZW50c0FycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNBcnJheUxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50
KGVsZW1lbnRzQXJyYXktPmdldChpKSkpCkBAIC0xMTAxLDcgKzExNDcsNyBAQCB2b2lkIFNlc3Np
b246OmdldEFjdGl2ZUVsZW1lbnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnVu
Y3Rpb24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IH0i
X3MpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpB
cnJheTo6Y3JlYXRlKCkpOwpAQCAtMTExMCwxNyArMTE1NiwyMCBAQCB2b2lkIFNlc3Npb246Omdl
dEFjdGl2ZUVsZW1lbnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0
aW9uSGFuZAogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7
Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJl
c3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAg
ICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0ID0g
Y3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisKKyAgICAgICAgICAgIGF1dG8g
ZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOwogICAg
ICAgICAgICAgaWYgKCFlbGVtZW50T2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Ok5v
U3VjaEVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTQyLDExICsxMTkx
LDExIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAg
ICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9K
U09OU3RyaW5nKCkpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6
OmNyZWF0ZSgic2VsZWN0ZWQiKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3Ms
IG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTExNTcsMjUgKzEyMDYsMzAg
QEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRTZWxlY3RlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJ
RCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAg
ICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsK
LSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVz
dWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAocmVzdWx0VmFsdWUt
PmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKGZhbHNlKSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBib29sZWFuUmVz
dWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoYm9vbGVhblJlc3Vs
dCkgfHwgYm9vbGVhblJlc3VsdCAhPSAidHJ1ZSIpIHsKKworICAgICAgICAgICAgYXV0byBib29s
ZWFuUmVzdWx0ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIWJv
b2xlYW5SZXN1bHQgfHwgYm9vbGVhblJlc3VsdCAhPSAidHJ1ZSIpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpz
dWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUodHJ1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0xMTkzLDEwICsxMjQ3LDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1l
bnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEyMDgsMTYgKzEyNjIsMTkgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRFbGVtZW50VGV4dChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3UKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOwpAQCAtMTIzNSwxMCArMTI5MiwxMCBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRU
YWdOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBK
U09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVh
dGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxC
cm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9z
LCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMjQ5LDE2ICsxMzA2LDE5
IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRhZ05hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAg
ICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmco
InJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7
Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJl
c3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVl
KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAg
ICB9KTsKICAgICB9KTsKQEAgLTEyODEsNyArMTM0MSw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxl
bWVudFJlY3QoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKGVycm9yKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY3RPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byByZWN0T2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIoIngiX3Ms
IHJlY3QudmFsdWUoKS5vcmlnaW4ueCk7CiAgICAgICAgICAgICByZWN0T2JqZWN0LT5zZXRJbnRl
Z2VyKCJ5Il9zLCByZWN0LnZhbHVlKCkub3JpZ2luLnkpOwogICAgICAgICAgICAgcmVjdE9iamVj
dC0+c2V0SW50ZWdlcigid2lkdGgiX3MsIHJlY3QudmFsdWUoKS5zaXplLndpZHRoKTsKQEAgLTEz
MDMsMTAgKzEzNjMsMTAgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRFbmFibGVkKGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmUKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVt
ZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTMxNywxNiArMTM3NywxOSBAQCB2b2lkIFNlc3Np
b246OmlzRWxlbWVudEVuYWJsZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVT
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0xMzQ0LDEwICsxNDA3LDEwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RGlzcGxheWVk
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1l
bnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEzNTgsMTYgKzE0MjEsMTkgQEAgdm9p
ZCBTZXNzaW9uOjppc0VsZW1lbnREaXNwbGF5ZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmQKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOwpAQCAtMTM4NSwxMSArMTQ1MSwxMSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgYXR0cmlidQog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBK
U09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVh
dGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAgYXJndW1lbnRz
LT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUoYXR0cmlidXRlKS0+dG9KU09OU3RyaW5n
KCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAg
aWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKQEAgLTE0MDAsMTYgKzE0NjYsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50QXR0cmli
dXRlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIGF0dHJpYnUKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUo
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAg
aWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVl
U3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFs
dWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUo
cmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTQyNywxMCArMTQ5Niwx
MCBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIGVsZW1l
bnRJRCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNP
TlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2lu
Z0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAg
ICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNDQxLDE2ICsxNTEwLDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVu
dFByb3BlcnR5KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChX
VEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAg
ICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9z
LCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBp
ZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAg
ICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhX
VEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE0NjgsMTAg
KzE1NDAsMTAgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUoY29uc3QgU3RyaW5n
JiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQp
LT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
YnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVl
KCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAg
cGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwpAQCAtMTQ4MiwxNiArMTU1NCwxOSBAQCB2b2lkIFNlc3Npb246Omdl
dEVsZW1lbnRDU1NWYWx1ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBj
c3NQcm9wZQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7
Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJl
c3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAg
ICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1
Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0x
NTA0LDcgKzE1NzksNyBAQCB2b2lkIFNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBpZiAobV9jdXJyZW50
QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xNTM0LDcgKzE2
MDksNyBAQCB2b2lkIFNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbQogCiB2b2lkIFNlc3Npb246OmVsZW1lbnRJ
c0ZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNy
ZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCiAgICAgc3RhdGljIGNv
bnN0IGNoYXIgaXNGaWxlVXBsb2FkU2NyaXB0W10gPQpAQCAtMTU0NCw3ICsxNjE5LDcgQEAgdm9p
ZCBTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBG
dW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAgIiAgICByZXR1cm4geyAnZmlsZVVwbG9hZCc6
IGZhbHNlIH07IgogICAgICAgICAifSI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3Np
bmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwog
ICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKQEAgLTE1NTUsMzIgKzE2MzAsMzUgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAg
ICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgIGlmICghSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAg
YXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOwor
ICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7
CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNlc3Npb246OkZpbGVVcGxvYWRUeXBlPiBTZXNzaW9u
OjpwYXJzZUVsZW1lbnRJc0ZpbGVVcGxvYWRSZXN1bHQoY29uc3QgUmVmUHRyPEpTT046OlZhbHVl
PiYgcmVzdWx0VmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAg
IGlmICghcmVzdWx0VmFsdWUtPmFzT2JqZWN0KHJlc3VsdCkpCisgICAgYXV0byByZXN1bHQgPSBy
ZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGJvb2wgaXNGaWxlVXBsb2FkOwotICAgIGlmICghcmVzdWx0
LT5nZXRCb29sZWFuKCJmaWxlVXBsb2FkIl9zLCBpc0ZpbGVVcGxvYWQpIHx8ICFpc0ZpbGVVcGxv
YWQpCisgICAgYXV0byBpc0ZpbGVVcGxvYWQgPSByZXN1bHQtPmdldEJvb2xlYW4oImZpbGVVcGxv
YWQiXyk7CisgICAgaWYgKCFpc0ZpbGVVcGxvYWQgfHwgISppc0ZpbGVVcGxvYWQpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBib29sIG11bHRpcGxlOwotICAgIGlmICghcmVz
dWx0LT5nZXRCb29sZWFuKCJtdWx0aXBsZSJfcywgbXVsdGlwbGUpIHx8ICFtdWx0aXBsZSkKKyAg
ICBhdXRvIG11bHRpcGxlID0gcmVzdWx0LT5nZXRCb29sZWFuKCJtdWx0aXBsZSJfKTsKKyAgICBp
ZiAoIW11bHRpcGxlIHx8ICEqbXVsdGlwbGUpCiAgICAgICAgIHJldHVybiBGaWxlVXBsb2FkVHlw
ZTo6U2luZ2xlOwogCiAgICAgcmV0dXJuIEZpbGVVcGxvYWRUeXBlOjpNdWx0aXBsZTsKQEAgLTE1
ODgsNyArMTY2Niw3IEBAIE9wdGlvbmFsPFNlc3Npb246OkZpbGVVcGxvYWRUeXBlPiBTZXNzaW9u
OjpwYXJzZUVsZW1lbnRJc0ZpbGVVcGxvYWRSZXN1bHQoY29uc3QKIAogdm9pZCBTZXNzaW9uOjpz
ZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1
dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJf
cywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygibm9kZUhhbmRsZSJfcywgZWxlbWVudElEKTsKQEAgLTE2
NDEsOCArMTcxOSw4IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudENsaWNrKGNvbnN0IFN0cmluZyYg
ZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0CiAgICAgICAgICAgICAgICAg
Z2V0RWxlbWVudFRhZ05hbWUoZWxlbWVudElELCBbdGhpcywgZWxlbWVudElELCBpblZpZXdDZW50
ZXIgPSBXVEZNb3ZlKGluVmlld0NlbnRlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgICAgICBib29sIGlzT3B0aW9uRWxlbWVudCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0Vycm9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyB0YWdOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5y
ZXN1bHQoKS0+YXNTdHJpbmcodGFnTmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHRhZ05hbWUgPSByZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoISF0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3B0
aW9uRWxlbWVudCA9IHRhZ05hbWUgPT0gIm9wdGlvbiI7CiAgICAgICAgICAgICAgICAgICAgIH0K
IApAQCAtMTY2Niw3ICsxNzQ0LDcgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xpY2soY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQKIAogdm9pZCBT
ZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAK
ICAgICBzdGF0aWMgY29uc3QgY2hhciBpc0VkaXRhYmxlU2NyaXB0W10gPQpAQCAtMTY4Niw3ICsx
NzY0LDcgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVs
ZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgIiAgICByZXR1cm4gZmFs
c2U7IgogICAgICAgICAifSI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250
ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIGlm
IChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAg
LTE2OTcsMTYgKzE3NzUsMTkgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShjb25z
dCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgIGlmICghSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgYXV0byBy
ZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAg
ICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAg
fSk7CiB9CkBAIC0xNzMwLDggKzE4MTEsOCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRDbGVhcihj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdAogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCBp
c0VkaXRhYmxlOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVzdWx0KCktPmFzQm9vbGVhbihp
c0VkaXRhYmxlKSB8fCAhaXNFZGl0YWJsZSkgeworICAgICAgICAgICAgYXV0byBpc0VkaXRhYmxl
ID0gcmVzdWx0LnJlc3VsdCgpLT5hc0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGlmICghaXNFZGl0
YWJsZSB8fCAhKmlzRWRpdGFibGUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEVs
ZW1lbnRTdGF0ZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAg
LTE3NDYsMTAgKzE4MjcsMTAgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xlYXIoY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQKICAgICAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OkVsZW1lbnROb3RJbnRlcmFjdGFibGUpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50
b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRC
cm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAg
LTE3ODAsNyArMTg2MSw3IEBAIHZvaWQgU2Vzc2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMo
Y29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGZpbGVuYW1lcyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKKyAgICBhdXRvIGZpbGVuYW1lcyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpbGUgOiBmaWxlcykgewogICAgICAgICBpZiAoIUZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZSkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlk
QXJndW1lbnQpKTsKQEAgLTE3ODksNyArMTg3MCw3IEBAIHZvaWQgU2Vzc2lvbjo6c2V0SW5wdXRG
aWxlVXBsb2FkRmlsZXMoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4
CiAgICAgICAgIGZpbGVuYW1lcy0+cHVzaFN0cmluZyhmaWxlKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5k
bGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsK
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVsZW1lbnRJRCk7CkBA
IC0xOTgwLDkgKzIwNjEsOSBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRTZW5kS2V5cyhjb25zdCBT
dHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBGdW5jdAogICAgICAgICAgICAg
ICAgICAgICAiICAgICAgICB0aHJvdyB7bmFtZTogJ0VsZW1lbnROb3RJbnRlcmFjdGFibGUnLCBt
ZXNzYWdlOiAnRWxlbWVudCBpcyBub3QgZm9jdXNhYmxlLid9OyIKICAgICAgICAgICAgICAgICAg
ICAgIn0iOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudHMg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNo
U3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwotICAgICAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93
c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMjA1Niw3ICsyMTM3LDcgQEAgdm9pZCBT
ZXNzaW9uOjpnZXRQYWdlU291cmNlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQub3V0ZXJIVE1MOyB9Il9zKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3Vt
ZW50cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTIwNjUsMjYgKzIxNDYsMjggQEAg
dm9pZCBTZXNzaW9uOjpnZXRQYWdlU291cmNlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBh
dXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAg
ICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0
VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0p
OwogICAgIH0pOwogfQogCi1SZWZQdHI8SlNPTjo6VmFsdWU+IFNlc3Npb246OmhhbmRsZVNjcmlw
dFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgcmVzdWx0VmFsdWUpCitSZWY8SlNPTjo6VmFs
dWU+IFNlc3Npb246OmhhbmRsZVNjcmlwdFJlc3VsdChSZWY8SlNPTjo6VmFsdWU+JiYgcmVzdWx0
VmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiByZXN1bHRBcnJheTsKLSAgICBpZiAo
cmVzdWx0VmFsdWUtPmFzQXJyYXkocmVzdWx0QXJyYXkpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gcmV0dXJuVmFsdWVBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICBp
ZiAoYXV0byByZXN1bHRBcnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCkpIHsKKyAgICAgICAg
YXV0byByZXR1cm5WYWx1ZUFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICB1
bnNpZ25lZCByZXN1bHRBcnJheUxlbmd0aCA9IHJlc3VsdEFycmF5LT5sZW5ndGgoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdEFycmF5TGVuZ3RoOyArK2kpCiAgICAg
ICAgICAgICByZXR1cm5WYWx1ZUFycmF5LT5wdXNoVmFsdWUoaGFuZGxlU2NyaXB0UmVzdWx0KHJl
c3VsdEFycmF5LT5nZXQoaSkpKTsKQEAgLTIwOTQsOSArMjE3Nyw4IEBAIFJlZlB0cjxKU09OOjpW
YWx1ZT4gU2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBy
ZXN1bHRWYWx1CiAgICAgaWYgKGF1dG8gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoUmVmUHRyPEpT
T046OlZhbHVlPihyZXN1bHRWYWx1ZSkpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBpZiAocmVzdWx0VmFsdWUt
PmFzT2JqZWN0KHJlc3VsdE9iamVjdCkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChhdXRv
IHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpKSB7CisgICAgICAgIGF1dG8g
cmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBhdXRv
IGVuZCA9IHJlc3VsdE9iamVjdC0+ZW5kKCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IHJlc3Vs
dE9iamVjdC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgcmV0dXJuVmFs
dWVPYmplY3QtPnNldFZhbHVlKGl0LT5rZXksIGhhbmRsZVNjcmlwdFJlc3VsdChXVEZNb3ZlKGl0
LT52YWx1ZSkpKTsKQEAgLTIxMTgsNyArMjIwMCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZXhlY3V0ZVNj
cmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJn
dW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9
IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3Ro
ID0gYXJndW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXJndW1lbnRzTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChhdXRvIGFyZ3Vt
ZW50ID0gYXJndW1lbnRzQXJyYXktPmdldChpKSkgewpAQCAtMjEyOSw3ICsyMjExLDcgQEAgdm9p
ZCBTZXNzaW9uOjpleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgYXJndW1lbnQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJy
b3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVI
YW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTIxNDgsMTYg
KzIyMzAsMTkgQEAgdm9pZCBTZXNzaW9uOjpleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2Ny
aXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJf
cywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAg
aWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAg
ICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2Rl
OjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3Mo
aGFuZGxlU2NyaXB0UmVzdWx0KFdURk1vdmUocmVzdWx0VmFsdWUpKSkpOwogICAgICAgICB9KTsK
ICAgICB9KTsKQEAgLTIxODEsOSArMjI2Niw5IEBAIHN0YXRpYyBTdHJpbmcgbW91c2VCdXR0b25G
b3JBdXRvbWF0aW9uKE1vdXNlQnV0dG9uIGJ1dHRvbikKIAogdm9pZCBTZXNzaW9uOjpwZXJmb3Jt
TW91c2VJbnRlcmFjdGlvbihpbnQgeCwgaW50IHksIE1vdXNlQnV0dG9uIGJ1dHRvbiwgTW91c2VJ
bnRlcmFjdGlvbiBpbnRlcmFjdGlvbiwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBvc2l0aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBvc2l0
aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwb3NpdGlvbi0+c2V0SW50ZWdlcigi
eCJfcywgeCk7CiAgICAgcG9zaXRpb24tPnNldEludGVnZXIoInkiX3MsIHkpOwogICAgIHBhcmFt
ZXRlcnMtPnNldE9iamVjdCgicG9zaXRpb24iX3MsIFdURk1vdmUocG9zaXRpb24pKTsKQEAgLTIy
MTcsMTEgKzIzMDIsMTEgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihp
bnQgeCwgaW50IHksIE1vdXNlQnV0dG9uIGJ1dHRvbiwgTW91c2VJbnQKIAogdm9pZCBTZXNzaW9u
OjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoVmVjdG9yPEtleWJvYXJkSW50ZXJhY3Rpb24+
JiYgaW50ZXJhY3Rpb25zLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBp
bnRlcmFjdGlvbnNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICBhdXRvIGludGVy
YWN0aW9uc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0
byYgaW50ZXJhY3Rpb24gOiBpbnRlcmFjdGlvbnMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gaW50ZXJhY3Rpb25PYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIGludGVyYWN0aW9uT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgc3dpdGNoIChpbnRlcmFjdGlvbi50eXBlKSB7CiAgICAgICAgIGNhc2UgS2V5Ym9hcmRJbnRl
cmFjdGlvblR5cGU6OktleVByZXNzOgogICAgICAgICAgICAgaW50ZXJhY3Rpb25PYmplY3QtPnNl
dFN0cmluZygidHlwZSJfcywgIktleVByZXNzIl9zKTsKQEAgLTIyODAsOSArMjM2NSw5IEBAIHN0
YXRpYyBPcHRpb25hbDxTZXNzaW9uOjpDb29raWU+IHBhcnNlQXV0b21hdGlvbkNvb2tpZShjb25z
dCBKU09OOjpPYmplY3QmIGNvb2tpCiAgICAgcmV0dXJuIGNvb2tpZTsKIH0KIAotc3RhdGljIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWx0QXV0b21hdGlvbkNvb2tpZShjb25zdCBTZXNzaW9uOjpD
b29raWUmIGNvb2tpZSkKK3N0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWlsdEF1dG9tYXRpb25D
b29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29raWUpCiB7Ci0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gY29va2llT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRv
IGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgY29va2llT2JqZWN0
LT5zZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKTsKICAgICBjb29raWVPYmplY3QtPnNl
dFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSk7CiAgICAgY29va2llT2JqZWN0LT5zZXRT
dHJpbmcoInBhdGgiX3MsIGNvb2tpZS5wYXRoLnZhbHVlT3IoIi8iKSk7CkBAIC0yMjk0LDkgKzIz
NzksOSBAQCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9uQ29va2ll
KGNvbnN0IFNlc3Npb246OkNvb2tpZSYgY29va2llKQogICAgIHJldHVybiBjb29raWVPYmplY3Q7
CiB9CiAKLXN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzZXJpYWxpemVDb29raWUoY29uc3Qg
U2Vzc2lvbjo6Q29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gc2VyaWFs
aXplQ29va2llKGNvbnN0IFNlc3Npb246OkNvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
YXV0byBjb29raWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGNvb2tpZU9i
amVjdC0+c2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSk7CiAgICAgY29va2llT2JqZWN0
LT5zZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpOwogICAgIGlmIChjb29raWUucGF0
aCkKQEAgLTIzMjUsMjMgKzI0MTAsMjQgQEAgdm9pZCBTZXNzaW9uOjpnZXRBbGxDb29raWVzKEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QWxs
Q29va2llcyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21t
YW5kUmVzcG9uc2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJfcywg
Y29va2llc0FycmF5KSkgeworCisgICAgICAgICAgICBhdXRvIGNvb2tpZXNBcnJheSA9IHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJfcyk7CisgICAgICAgICAgICBp
ZiAoIWNvb2tpZXNBcnJheSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisKKyAg
ICAgICAgICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNvb2tpZVZhbHVlID0gY29v
a2llc0FycmF5LT5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
Y29va2llT2JqZWN0OwotICAgICAgICAgICAgICAgIGlmICghY29va2llVmFsdWUtPmFzT2JqZWN0
KGNvb2tpZU9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9IGNv
b2tpZXNBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICghY29v
a2llT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTIzNjUs
MTQgKzI0NTEsMTEgQEAgdm9pZCBTZXNzaW9uOjpnZXROYW1lZENvb2tpZShjb25zdCBTdHJpbmcm
IG5hbWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJikKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAg
IHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheShjb29raWVzQXJyYXkpOworCisgICAgICAgIGF1dG8g
Y29va2llc0FycmF5ID0gcmVzdWx0LnJlc3VsdCgpLT5hc0FycmF5KCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY29va2llVmFsdWUgPSBjb29raWVzQXJyYXktPmdl
dChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdDsKLSAg
ICAgICAgICAgIGNvb2tpZVZhbHVlLT5hc09iamVjdChjb29raWVPYmplY3QpOwotICAgICAgICAg
ICAgU3RyaW5nIGNvb2tpZU5hbWU7Ci0gICAgICAgICAgICBjb29raWVPYmplY3QtPmdldFN0cmlu
ZygibmFtZSJfcywgY29va2llTmFtZSk7CisgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9
IGNvb2tpZXNBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgYXV0byBjb29r
aWVOYW1lID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MpOwogICAgICAgICAgICAg
aWYgKGNvb2tpZU5hbWUgPT0gbmFtZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShjb29raWVPYmplY3QpKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjM5NCw3ICsyNDc3LDcgQEAgdm9pZCBTZXNzaW9uOjph
ZGRDb29raWUoY29uc3QgQ29va2llJiBjb29raWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoImNvb2tpZSJf
cywgV1RGTW92ZShjb29raWUpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2Vu
ZCgiYWRkU2luZ2xlQ29va2llIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lv
bkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CkBAIC0yNDE5LDcgKzI1MDIsNyBA
QCB2b2lkIFNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiY29va2llTmFtZSJfcywgbmFtZSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1h
bmRUb0JhY2tlbmQoImRlbGV0ZVNpbmdsZUNvb2tpZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
W3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAtMjQ0
NCw3ICsyNTI3LDcgQEAgdm9pZCBTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0
SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBt
X2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJkZWxldGVBbGxDb29raWVzIl9zLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSB7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjUxNywyMyAr
MjYwMCwyMyBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1BY3Rpb25zKFZlY3RvcjxWZWN0b3I8QWN0
aW9uPj4mJiBhY3Rpb25zQnlUaWNrLCBGdW5jdGlvbjx2bwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJm
cmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlucHV0U291cmNlcyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKKyAgICAgICAgYXV0byBpbnB1dFNvdXJjZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBtX2FjdGl2ZUlucHV0U291cmNl
cykgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmplY3Qg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBpbnB1dFNvdXJjZU9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpbnB1dFNvdXJjZU9i
amVjdC0+c2V0U3RyaW5nKCJzb3VyY2VJZCJfcywgaW5wdXRTb3VyY2Uua2V5KTsKICAgICAgICAg
ICAgIGlucHV0U291cmNlT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIGF1dG9tYXRp
b25Tb3VyY2VUeXBlKGlucHV0U291cmNlLnZhbHVlLnR5cGUpKTsKICAgICAgICAgICAgIGlucHV0
U291cmNlcy0+cHVzaE9iamVjdChXVEZNb3ZlKGlucHV0U291cmNlT2JqZWN0KSk7CiAgICAgICAg
IH0KICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImlucHV0U291cmNlcyJfcywgV1RGTW92
ZShpbnB1dFNvdXJjZXMpKTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwcyA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBzdGVwcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0aWNrIDogYWN0aW9uc0J5VGljaykg
ewotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGF0ZXMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIHN0YXRlcyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgYWN0aW9uIDogdGljaykgewotICAgICAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgICAgICBhdXRvJiBjdXJyZW50U3RhdGUgPSBpbnB1dFNvdXJjZVN0YXRl
KGFjdGlvbi5pZCk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPnNldFN0cmluZygic291cmNlSWQi
X3MsIGFjdGlvbi5pZCk7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkgewpA
QCAtMjU1MSw3ICsyNjM0LDcgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8
VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbjo6U3Vi
dHlwZTo6UG9pbnRlck1vdmU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zZXRT
dHJpbmcoIm9yaWdpbiJfcywgYXV0b21hdGlvbk9yaWdpblR5cGUoYWN0aW9uLm9yaWdpbi0+dHlw
ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRp
b24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBsb2NhdGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbi0+c2V0SW50ZWdlcigieCJfcywgYWN0aW9uLngudmFsdWUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+c2V0SW50ZWdlcigieSJfcywgYWN0aW9uLnku
dmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2V0T2JqZWN0KCJsb2Nh
dGlvbiJfcywgV1RGTW92ZShsb2NhdGlvbikpOwpAQCAtMjYxNyw3ICsyNzAwLDcgQEAgdm9pZCBT
ZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9uc0J5
VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3Rh
dGVzLT5wdXNoT2JqZWN0KFdURk1vdmUoc3RhdGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0ZXBTdGF0ZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzdGVwU3RhdGVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgIHN0ZXBTdGF0ZXMtPnNldEFycmF5KCJzdGF0ZXMiX3MsIFdURk1vdmUo
c3RhdGVzKSk7CiAgICAgICAgICAgICBzdGVwcy0+cHVzaE9iamVjdChXVEZNb3ZlKHN0ZXBTdGF0
ZXMpKTsKICAgICAgICAgfQpAQCAtMjY0Myw3ICsyNzI2LDcgQEAgdm9pZCBTZXNzaW9uOjpyZWxl
YXNlQWN0aW9ucyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGUKICAgICBtX2FjdGl2ZUlucHV0U291cmNlcy5jbGVhcigpOwogICAgIG1faW5wdXRTdGF0
ZVRhYmxlLmNsZWFyKCk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3Rv
cGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRU
b0JhY2tlbmQoImNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UiX3MsIFdURk1vdmUocGFyYW1ldGVy
cyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2Um
JiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjY2MSw3
ICsyNzQ0LDcgQEAgdm9pZCBTZXNzaW9uOjpkaXNtaXNzQWxlcnQoRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFu
ZFRvQmFja2VuZCgiZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJl
c3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAg
LTI2NzksNyArMjc2Miw3IEBAIHZvaWQgU2Vzc2lvbjo6YWNjZXB0QWxlcnQoRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUi
X3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5k
Q29tbWFuZFRvQmFja2VuZCgiYWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2ciX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21t
YW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikg
ewpAQCAtMjY5NywxOCArMjc4MCwyMCBAQCB2b2lkIFNlc3Npb246OmdldEFsZXJ0VGV4dChGdW5j
dGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hv
c3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxv
ZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lv
bkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25z
ZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0
cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICBhdXRvIHZh
bHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJf
cyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtu
b3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0
ZSh2YWx1ZVN0cmluZykpKTsKICAgICB9KTsKIH0KQEAgLTI3MjAsNyArMjgwNSw3IEBAIHZvaWQg
U2Vzc2lvbjo6c2VuZEFsZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJik+CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygidXNlcklucHV0Il9z
LCB0ZXh0KTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJzZXRVc2VySW5wdXRG
b3JDdXJyZW50SmF2YVNjcmlwdFByb21wdCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNl
KSB7CkBAIC0yNzQ0LDcgKzI4MjksNyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9w
dGlvbmFsPFN0cmluZz4gZWxlbWVudElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5k
bGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmICht
X2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBA
IC0yNzU4LDExICsyODQzLDEzIEBAIHZvaWQgU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoT3B0aW9u
YWw8U3RyaW5nPiBlbGVtZW50SUQsIE9wdGlvbmFsPGJvb2w+IHNjcm9sbEluCiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBkYXRhOwotICAgICAgICAgICAgaWYgKCFyZXNwb25z
ZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9zLCBkYXRhKSkgeworCisgICAgICAg
ICAgICBhdXRvIGRhdGEgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJkYXRh
Il9zKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNP
Tjo6VmFsdWU6OmNyZWF0ZShkYXRhKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwIGIvU291cmNlL1dlYkRyaXZlci9T
ZXNzaW9uSG9zdC5jcHAKaW5kZXggZDE2OWI5NWM0YjZjZWU0Mjg5ZDhjODg5ZTU1M2RmNzYzOTU1
YWFiYy4uNDcyZWJkZmFmNGE2MmI2YjIwMGI0ZDFlYzdiMjFiZTU5MTE4NWUwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZl
ci9TZXNzaW9uSG9zdC5jcHAKQEAgLTYyLDMxICs2MiwyNyBAQCBsb25nIFNlc3Npb25Ib3N0Ojpz
ZW5kQ29tbWFuZFRvQmFja2VuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIFJlZlB0cjxKU09OOjpP
YmplYwogCiB2b2lkIFNlc3Npb25Ib3N0OjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgIGlm
ICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlLCBtZXNzYWdlVmFsdWUpKQorICAgIGF1
dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICBp
ZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbWVzc2FnZU9iamVjdDsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QobWVz
c2FnZU9iamVjdCkpCisgICAgYXV0byBtZXNzYWdlT2JqZWN0ID0gbWVzc2FnZVZhbHVlLT5hc09i
amVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bG9uZyBzZXF1ZW5jZUlEOwotICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiaWQi
X3MsIHNlcXVlbmNlSUQpKQorICAgIGF1dG8gc2VxdWVuY2VJRCA9IG1lc3NhZ2VPYmplY3QtPmdl
dEludGVnZXIoImlkIl9zKTsKKyAgICBpZiAoIXNlcXVlbmNlSUQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0gbV9jb21tYW5kUmVxdWVzdHMudGFrZShzZXF1
ZW5jZUlEKTsKKyAgICBhdXRvIHJlc3BvbnNlSGFuZGxlciA9IG1fY29tbWFuZFJlcXVlc3RzLnRh
a2UoKnNlcXVlbmNlSUQpOwogICAgIEFTU0VSVChyZXNwb25zZUhhbmRsZXIpOwogCiAgICAgQ29t
bWFuZFJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVycm9yT2Jq
ZWN0OwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImVycm9yIl9zLCBlcnJvck9i
amVjdCkpIHsKKyAgICBpZiAoYXV0byBlcnJvck9iamVjdCA9IG1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgiZXJyb3IiX3MpKSB7CiAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0ID0gV1RG
TW92ZShlcnJvck9iamVjdCk7CiAgICAgICAgIHJlc3BvbnNlLmlzRXJyb3IgPSB0cnVlOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAg
ICAgICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmpl
Y3QpICYmIHJlc3VsdE9iamVjdC0+c2l6ZSgpKQotICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QgPSBXVEZNb3ZlKHJlc3VsdE9iamVjdCk7Ci0gICAgfQorICAgIH0gZWxzZSBpZiAo
YXV0byByZXN1bHRPYmplY3QgPSBtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInJlc3VsdCJfcykp
CisgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0ID0gV1RGTW92ZShyZXN1bHRPYmplY3Qp
OwogCiAgICAgcmVzcG9uc2VIYW5kbGVyKFdURk1vdmUocmVzcG9uc2UpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAgYi9Tb3VyY2UvV2ViRHJp
dmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCmluZGV4IDliYjk3NmQ5ZjBjNWUzYjQ4OWIyMDlmM2Ri
ODUwZGMzMjFiNjBmNGUuLjljNWY0ZmQ1NTA5ZTkzODAwOTBjZmU0NjQ5MTJiY2NmY2I5MDRiMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKKysrIGIv
U291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcApAQCAtMjM5LDEzICsyMzksMTQg
QEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpoYW5kbGVSZXF1ZXN0KEhUVFBSZXF1ZXN0SGFuZGxl
cjo6UmVxdWVzdCYmIHJlcXVlc3QsIEZ1bmMKIAogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnNPYmplY3Q7CiAgICAgaWYgKG1ldGhvZC52YWx1ZSgpID09IEhUVFBNZXRob2Q6OlBv
c3QpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgICAg
IGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihTdHJpbmc6OmZyb21VVEY4KHJlcXVlc3QuZGF0
YSwgcmVxdWVzdC5kYXRhTGVuZ3RoKSwgbWVzc2FnZVZhbHVlKSkgeworICAgICAgICBhdXRvIG1l
c3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oU3RyaW5nOjpmcm9tVVRGOChyZXF1
ZXN0LmRhdGEsIHJlcXVlc3QuZGF0YUxlbmd0aCkpOworICAgICAgICBpZiAoIW1lc3NhZ2VWYWx1
ZSkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNlKFdURk1vdmUocmVwbHlIYW5kbGVyKSwgQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVu
dCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtZXNz
YWdlVmFsdWUtPmFzT2JqZWN0KHBhcmFtZXRlcnNPYmplY3QpKSB7CisgICAgICAgIHBhcmFtZXRl
cnNPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghcGFyYW1l
dGVyc09iamVjdCkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNlKFdURk1vdmUocmVwbHlIYW5k
bGVyKSwgQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFs
aWRBcmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzQsNyAr
Mjc1LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UoRnVuY3Rpb248dm9p
ZCAoSFRUUFJlcXVlc3RIYW5kbGVyOjpSZXNwb25zZSYKICAgICAgICAgZXJyb3JPYmplY3QtPnNl
dFN0cmluZygic3RhY2t0cmFjZSJfcywgZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIC8vIElmIHRo
ZSBlcnJvciBkYXRhIGRpY3Rpb25hcnkgY29udGFpbnMgYW55IGVudHJpZXMsIHNldCB0aGUgImRh
dGEiIGZpZWxkIG9uIGJvZHkgdG8gYSBuZXcgSlNPTiBPYmplY3QgcG9wdWxhdGVkIHdpdGggdGhl
IGRpY3Rpb25hcnkuCiAgICAgICAgIGlmIChhdXRvJiBhZGRpdGlvbmFsRGF0YSA9IHJlc3VsdC5h
ZGRpdGlvbmFsRXJyb3JEYXRhKCkpCi0gICAgICAgICAgICBlcnJvck9iamVjdC0+c2V0T2JqZWN0
KCJkYXRhIl9zLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB7IGFkZGl0aW9uYWxEYXRhIH0pOworICAg
ICAgICAgICAgZXJyb3JPYmplY3QtPnNldE9iamVjdCgiZGF0YSJfcywgYWRkaXRpb25hbERhdGEt
PnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAvLyBTZW5kIGEgcmVzcG9uc2Ugd2l0aCBzdGF0
dXMgYW5kIGJvZHkgYXMgYXJndW1lbnRzLgogICAgICAgICByZXN1bHRWYWx1ZSA9IFdURk1vdmUo
ZXJyb3JPYmplY3QpOwogICAgIH0gZWxzZSBpZiAoYXV0byB2YWx1ZSA9IHJlc3VsdC5yZXN1bHQo
KSkKQEAgLTI4NCwyNCArMjg1LDI0IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2VuZFJlc3Bv
bnNlKEZ1bmN0aW9uPHZvaWQgKEhUVFBSZXF1ZXN0SGFuZGxlcjo6UmVzcG9uc2UmCiAKICAgICAv
LyBXaGVuIHJlcXVpcmVkIHRvIHNlbmQgYSByZXNwb25zZS4KICAgICAvLyBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLXNlbmQtYS1yZXNwb25z
ZQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3BvbnNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICByZXNwb25zZU9iamVjdC0+c2V0VmFsdWUoInZhbHVlIl9zLCBXVEZNb3ZlKHJl
c3VsdFZhbHVlKSk7CiAgICAgcmVwbHlIYW5kbGVyKHsgcmVzdWx0Lmh0dHBTdGF0dXNDb2RlKCks
IHJlc3BvbnNlT2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCksICJhcHBsaWNhdGlvbi9qc29u
OyBjaGFyc2V0PXV0Zi04Il9zIH0pOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiB2YWx1
ZUFzTnVtYmVySW5SYW5nZShjb25zdCBKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSBtaW5BbGxv
d2VkID0gMCwgZG91YmxlIG1heEFsbG93ZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKQogewotICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgaWYgKCF2YWx1ZS5hc0RvdWJsZShudW1i
ZXIpKQorICAgIGF1dG8gbnVtYmVyID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICBpZiAoIW51bWJl
cikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChzdGQ6OmlzbmFuKG51
bWJlcikgfHwgc3RkOjppc2luZihudW1iZXIpKQorICAgIGlmIChzdGQ6OmlzbmFuKCpudW1iZXIp
IHx8IHN0ZDo6aXNpbmYoKm51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBpZiAobnVtYmVyIDwgbWluQWxsb3dlZCB8fCBudW1iZXIgPiBtYXhBbGxvd2VkKQorICAg
IGlmICgqbnVtYmVyIDwgbWluQWxsb3dlZCB8fCAqbnVtYmVyID4gbWF4QWxsb3dlZCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBudW1iZXI7CisgICAgcmV0dXJu
ICpudW1iZXI7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gdW5zaWduZWRWYWx1ZShK
U09OOjpWYWx1ZSYgdmFsdWUpCkBAIC0zMzgsNyArMzM5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFRp
bWVvdXRzPiBkZXNlcmlhbGl6ZVRpbWVvdXRzKEpTT046Ok9iamVjdCYgdGltZW91dHNPYmplY3Qs
IElnbm8KICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2Vy
LCBvciBpdCBpcyBsZXNzIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gc2FmZSBp
bnRlZ2VyLCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCi0g
ICAgICAgIGF1dG8gdGltZW91dE1TID0gdW5zaWduZWRWYWx1ZSgqaXQtPnZhbHVlKTsKKyAgICAg
ICAgYXV0byB0aW1lb3V0TVMgPSB1bnNpZ25lZFZhbHVlKGl0LT52YWx1ZSk7CiAgICAgICAgIGlm
ICghdGltZW91dE1TKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzU5
LDYxICszNjAsNjEgQEAgc3RhdGljIE9wdGlvbmFsPFByb3h5PiBkZXNlcmlhbGl6ZVByb3h5KEpT
T046Ok9iamVjdCYgcHJveHlPYmplY3QpCiAgICAgLy8gwqc3LjEgUHJveHkuCiAgICAgLy8gaHR0
cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jcHJveHkKICAgICBQcm94eSBwcm94eTsKLSAg
ICBpZiAoIXByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlUeXBlIl9zLCBwcm94eS50eXBlKSkK
KworICAgIHByb3h5LnR5cGUgPSBwcm94eU9iamVjdC5nZXRTdHJpbmcoInByb3h5VHlwZSJfcyk7
CisgICAgaWYgKCFwcm94eS50eXBlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgaWYgKHByb3h5LnR5cGUgPT0gImRpcmVjdCIgfHwgcHJveHkudHlwZSA9PSAiYXV0b2RldGVj
dCIgfHwgcHJveHkudHlwZSA9PSAic3lzdGVtIikKICAgICAgICAgcmV0dXJuIHByb3h5OwogCiAg
ICAgaWYgKHByb3h5LnR5cGUgPT0gInBhYyIpIHsKLSAgICAgICAgU3RyaW5nIGF1dG9jb25maWdV
Ukw7Ci0gICAgICAgIGlmICghcHJveHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdV
cmwiX3MsIGF1dG9jb25maWdVUkwpKQorICAgICAgICBwcm94eS5hdXRvY29uZmlnVVJMID0gcHJv
eHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdVcmwiX3MpOworICAgICAgICBpZiAo
IXByb3h5LmF1dG9jb25maWdVUkwpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgICAgIHByb3h5LmF1dG9jb25maWdVUkwgPSBhdXRvY29uZmlnVVJMOwogICAgICAgICBy
ZXR1cm4gcHJveHk7CiAgICAgfQogCiAgICAgaWYgKHByb3h5LnR5cGUgPT0gIm1hbnVhbCIpIHsK
LSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKHByb3h5T2Jq
ZWN0LmdldFZhbHVlKCJmdHBQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
ZnRwUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhmdHBQcm94eSkpCisg
ICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoImZ0cFByb3h5Il9z
KSkgeworICAgICAgICAgICAgYXV0byBmdHBQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAg
ICAgICAgICAgaWYgKCFmdHBQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgICAgICAgICBwcm94eS5mdHBVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJm
dHA6Ly8iLCBmdHBQcm94eSkpOwogICAgICAgICAgICAgaWYgKCFwcm94eS5mdHBVUkwtPmlzVmFs
aWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgiaHR0cFByb3h5Il9zLCB2YWx1ZSkpIHsK
LSAgICAgICAgICAgIFN0cmluZyBodHRwUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5h
c1N0cmluZyhodHRwUHJveHkpKQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0
LmdldFZhbHVlKCJodHRwUHJveHkiX3MpKSB7CisgICAgICAgICAgICBhdXRvIGh0dHBQcm94eSA9
IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFodHRwUHJveHkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuaHR0cFVS
TCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBodHRwUHJveHkpKTsKICAgICAgICAg
ICAgIGlmICghcHJveHkuaHR0cFVSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZh
bHVlKCJzc2xQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3NsUHJveHk7
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzc2xQcm94eSkpCisgICAgICAgIGlm
IChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNzbFByb3h5Il9zKSkgeworICAg
ICAgICAgICAgYXV0byBzc2xQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAg
aWYgKCFzc2xQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgICAgICAgICBwcm94eS5odHRwc1VSTCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImh0dHBzOi8v
Iiwgc3NsUHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHkuaHR0cHNVUkwtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgic29ja3NQcm94eSIsIHZhbHVlKSkgewotICAg
ICAgICAgICAgU3RyaW5nIHNvY2tzUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0
cmluZyhzb2Nrc1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVjdC5n
ZXRWYWx1ZSgic29ja3NQcm94eSIpKSB7CisgICAgICAgICAgICBhdXRvIHNvY2tzUHJveHkgPSB2
YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghc29ja3NQcm94eSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBwcm94eS5zb2Nrc1VS
TCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoInNvY2tzOi8vIiwgc29ja3NQcm94eSkpOwogICAgICAg
ICAgICAgaWYgKCFwcm94eS5zb2Nrc1VSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gc29j
a3NWZXJzaW9uVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXByb3h5T2JqZWN0LmdldFZhbHVlKCJz
b2Nrc1ZlcnNpb24iLCBzb2Nrc1ZlcnNpb25WYWx1ZSkpCisgICAgICAgICAgICBhdXRvIHNvY2tz
VmVyc2lvblZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzVmVyc2lvbiIpOworICAg
ICAgICAgICAgaWYgKCFzb2Nrc1ZlcnNpb25WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBhdXRvIHNvY2tzVmVyc2lvbiA9IHVuc2lnbmVk
VmFsdWUoKnNvY2tzVmVyc2lvblZhbHVlKTsKQEAgLTQyMSwxOCArNDIyLDE3IEBAIHN0YXRpYyBP
cHRpb25hbDxQcm94eT4gZGVzZXJpYWxpemVQcm94eShKU09OOjpPYmplY3QmIHByb3h5T2JqZWN0
KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBwcm94
eS5zb2Nrc1ZlcnNpb24gPSBzb2Nrc1ZlcnNpb24udmFsdWUoKTsKICAgICAgICAgfQotICAgICAg
ICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoIm5vUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBub1Byb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1
ZS0+YXNBcnJheShub1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVj
dC5nZXRWYWx1ZSgibm9Qcm94eSJfcykpIHsKKyAgICAgICAgICAgIGF1dG8gbm9Qcm94eSA9IHZh
bHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICBpZiAoIW5vUHJveHkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgYXV0byBub1Byb3h5TGVuZ3Ro
ID0gbm9Qcm94eS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbm9Qcm94eUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBhZGRyZXNzVmFsdWUgPSBub1Byb3h5LT5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIGFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzVmFsdWUtPmFzU3RyaW5n
KGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGF1dG8gYWRkcmVzcyA9IG5vUHJveHktPmdldChp
KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3MpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICAgICAgcHJveHkuaWdu
b3JlQWRkcmVzc0xpc3QuYXBwZW5kKFdURk1vdmUoYWRkcmVzcykpOworICAgICAgICAgICAgICAg
IHByb3h5Lmlnbm9yZUFkZHJlc3NMaXN0LmFwcGVuZChhZGRyZXNzKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCkBAIC00NzEsNDMgKzQ3MSw1MyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3I+IGRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IoY29u
cwogdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpP
YmplY3QmIG1hdGNoZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKSBj
b25zdAogewogICAgIC8vIE1hdGNoZWQgY2FwYWJpbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIHZh
bGlkYXRlZC4KLSAgICBib29sIGFjY2VwdEluc2VjdXJlQ2VydHM7Ci0gICAgaWYgKG1hdGNoZWRD
YXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVDZXJ0cyJfcywgYWNjZXB0SW5z
ZWN1cmVDZXJ0cykpCi0gICAgICAgIGNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0g
YWNjZXB0SW5zZWN1cmVDZXJ0czsKLSAgICBib29sIHNldFdpbmRvd1JlY3Q7Ci0gICAgaWYgKG1h
dGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic2V0V2luZG93UmVjdCJfcywgc2V0V2luZG93
UmVjdCkpCi0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaW5kb3dSZWN0ID0gc2V0V2luZG93UmVj
dDsKLSAgICBTdHJpbmcgYnJvd3Nlck5hbWU7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMu
Z2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgYnJvd3Nlck5hbWUpKQorICAgIGF1dG8gYWNjZXB0
SW5zZWN1cmVDZXJ0cyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5z
ZWN1cmVDZXJ0cyJfcyk7CisgICAgaWYgKGFjY2VwdEluc2VjdXJlQ2VydHMpCisgICAgICAgIGNh
cGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0gKmFjY2VwdEluc2VjdXJlQ2VydHM7CisK
KyAgICBhdXRvIHNldFdpbmRvd1JlY3QgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4o
InNldFdpbmRvd1JlY3QiX3MpOworICAgIGlmIChzZXRXaW5kb3dSZWN0KQorICAgICAgICBjYXBh
YmlsaXRpZXMuc2V0V2luZG93UmVjdCA9ICpzZXRXaW5kb3dSZWN0OworCisgICAgYXV0byBicm93
c2VyTmFtZSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcyk7
CisgICAgaWYgKCEhYnJvd3Nlck5hbWUpCiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyTmFt
ZSA9IGJyb3dzZXJOYW1lOwotICAgIFN0cmluZyBicm93c2VyVmVyc2lvbjsKLSAgICBpZiAobWF0
Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zLCBicm93c2VyVmVy
c2lvbikpCisKKyAgICBhdXRvIGJyb3dzZXJWZXJzaW9uID0gbWF0Y2hlZENhcGFiaWxpdGllcy5n
ZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zKTsKKyAgICBpZiAoISFicm93c2VyVmVyc2lvbikK
ICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uID0gYnJvd3NlclZlcnNpb247Ci0g
ICAgU3RyaW5nIHBsYXRmb3JtTmFtZTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRT
dHJpbmcoInBsYXRmb3JtTmFtZSJfcywgcGxhdGZvcm1OYW1lKSkKKworICAgIGF1dG8gcGxhdGZv
cm1OYW1lID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInBsYXRmb3JtTmFtZSJfcyk7
CisgICAgaWYgKCEhcGxhdGZvcm1OYW1lKQogICAgICAgICBjYXBhYmlsaXRpZXMucGxhdGZvcm1O
YW1lID0gcGxhdGZvcm1OYW1lOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAg
IGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3MsIHByb3h5KSkKKwor
ICAgIGF1dG8gcHJveHkgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3Mp
OworICAgIGlmIChwcm94eSkKICAgICAgICAgY2FwYWJpbGl0aWVzLnByb3h5ID0gZGVzZXJpYWxp
emVQcm94eSgqcHJveHkpOwotICAgIGJvb2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAg
ICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJzdHJpY3RGaWxlSW50ZXJhY3Rh
YmlsaXR5Il9zLCBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkKLSAgICAgICAgY2FwYWJpbGl0
aWVzLnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5
OwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHRpbWVvdXRzOwotICAgIGlmIChtYXRjaGVkQ2Fw
YWJpbGl0aWVzLmdldE9iamVjdCgidGltZW91dHMiX3MsIHRpbWVvdXRzKSkKKworICAgIGF1dG8g
c3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVh
bigic3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSJfcyk7CisgICAgaWYgKHN0cmljdEZpbGVJbnRl
cmFjdGFiaWxpdHkpCisgICAgICAgIGNhcGFiaWxpdGllcy5zdHJpY3RGaWxlSW50ZXJhY3RhYmls
aXR5ID0gKnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7CisKKyAgICBhdXRvIHRpbWVvdXRzID0g
bWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInRpbWVvdXRzIl9zKTsKKyAgICBpZiAodGlt
ZW91dHMpCiAgICAgICAgIGNhcGFiaWxpdGllcy50aW1lb3V0cyA9IGRlc2VyaWFsaXplVGltZW91
dHMoKnRpbWVvdXRzLCBJZ25vcmVVbmtub3duVGltZW91dDo6Tm8pOwotICAgIFN0cmluZyBwYWdl
TG9hZFN0cmF0ZWd5OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFn
ZUxvYWRTdHJhdGVneSJfcywgcGFnZUxvYWRTdHJhdGVneSkpCisKKyAgICBhdXRvIHBhZ2VMb2Fk
U3RyYXRlZ3kgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFnZUxvYWRTdHJhdGVn
eSJfcyk7CisgICAgaWYgKCEhcGFnZUxvYWRTdHJhdGVneSkKICAgICAgICAgY2FwYWJpbGl0aWVz
LnBhZ2VMb2FkU3RyYXRlZ3kgPSBkZXNlcmlhbGl6ZVBhZ2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRT
dHJhdGVneSk7Ci0gICAgU3RyaW5nIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yOwotICAgIGlmICht
YXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiX3Ms
IHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSkKKworICAgIGF1dG8gdW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IiX3MpOworICAgIGlmICghIXVuaGFuZGxlZFByb21wdEJlaGF2aW9yKQogICAgICAgICBj
YXBhYmlsaXRpZXMudW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBkZXNlcmlhbGl6ZVVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKTsKKwogICAgIHBsYXRmb3Jt
UGFyc2VDYXBhYmlsaXRpZXMobWF0Y2hlZENhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVzKTsKIH0K
IAogYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3Io
SlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYp
PiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIHNlc3Npb25JRDsKLSAgICBpZiAo
IXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNlc3Npb25JRCkpIHsKKyAgICBh
dXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MpOworICAg
IGlmICghc2Vzc2lvbklEKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTUzMCw1MCArNTQwLDUwIEBAIFJlZlB0cjxK
U09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6OnZhbGlkYXRlZENhcGFiaWxpdGllcyhjb25z
dCBKU09OOjpPYmplY3QmCiB7CiAgICAgLy8gwqc3LjIgUHJvY2Vzc2luZyBDYXBhYmlsaXRpZXMu
CiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5o
dG1sI2Rmbi12YWxpZGF0ZS1jYXBhYmlsaXRpZXMKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGVuZCA9IGNhcGFiaWxpdGllcy5lbmQoKTsKICAg
ICBmb3IgKGF1dG8gaXQgPSBjYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmIChpdC0+a2V5ID09ICJhY2NlcHRJbnNlY3VyZUNlcnRzIikgewotICAgICAg
ICAgICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFs
dWUtPmFzQm9vbGVhbihhY2NlcHRJbnNlY3VyZUNlcnRzKSkKKyAgICAgICAgICAgIGF1dG8gYWNj
ZXB0SW5zZWN1cmVDZXJ0cyA9IGl0LT52YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgICAgICBp
ZiAoIWFjY2VwdEluc2VjdXJlQ2VydHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgYWNjZXB0SW5zZWN1cmVD
ZXJ0cyk7CisgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgKmFjY2VwdElu
c2VjdXJlQ2VydHMpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gImJyb3dzZXJOYW1l
IiB8fCBpdC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgfHwgaXQtPmtleSA9PSAicGxhdGZvcm1O
YW1lIikgewotICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICAgICAgaWYg
KCFpdC0+dmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gc3Ry
aW5nVmFsdWUgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXN0cmlu
Z1ZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoaXQtPmtleSwgc3RyaW5nVmFsdWUpOwogICAgICAgICB9IGVsc2UgaWYg
KGl0LT5rZXkgPT0gInBhZ2VMb2FkU3RyYXRlZ3kiKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcGFn
ZUxvYWRTdHJhdGVneTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyhwYWdl
TG9hZFN0cmF0ZWd5KSB8fCAhZGVzZXJpYWxpemVQYWdlTG9hZFN0cmF0ZWd5KHBhZ2VMb2FkU3Ry
YXRlZ3kpKQorICAgICAgICAgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gaXQtPnZhbHVlLT5h
c1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5IHx8ICFkZXNlcmlh
bGl6ZVBhZ2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVneSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCBw
YWdlTG9hZFN0cmF0ZWd5KTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwcm94eSIp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgICAgICAgICAg
aWYgKCFpdC0+dmFsdWUtPmFzT2JqZWN0KHByb3h5KSB8fCAhZGVzZXJpYWxpemVQcm94eSgqcHJv
eHkpKQorICAgICAgICAgICAgYXV0byBwcm94eSA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICAgICAgICAgIGlmICghcHJveHkgfHwgIWRlc2VyaWFsaXplUHJveHkoKnByb3h5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
aXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKml0LT52YWx1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXQtPmtleSA9PSAic3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSIpIHsKLSAgICAgICAgICAgIGJv
b2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVl
LT5hc0Jvb2xlYW4oc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSkpCisgICAgICAgICAgICBhdXRv
IHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigpOworICAg
ICAgICAgICAgaWYgKCFzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKGl0LT5rZXks
IHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29s
ZWFuKGl0LT5rZXksICpzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KTsKICAgICAgICAgfSBlbHNl
IGlmIChpdC0+a2V5ID09ICJ0aW1lb3V0cyIpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzT2JqZWN0KHRp
bWVvdXRzKSB8fCAhZGVzZXJpYWxpemVUaW1lb3V0cygqdGltZW91dHMsIElnbm9yZVVua25vd25U
aW1lb3V0OjpObykpCisgICAgICAgICAgICBhdXRvIHRpbWVvdXRzID0gaXQtPnZhbHVlLT5hc09i
amVjdCgpOworICAgICAgICAgICAgaWYgKCF0aW1lb3V0cyB8fCAhZGVzZXJpYWxpemVUaW1lb3V0
cygqdGltZW91dHMsIElnbm9yZVVua25vd25UaW1lb3V0OjpObykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJl
ZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldFZh
bHVlKGl0LT5rZXksICppdC0+dmFsdWUpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0g
InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIikgewotICAgICAgICAgICAgU3RyaW5nIHVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzU3RyaW5nKHVu
aGFuZGxlZFByb21wdEJlaGF2aW9yKSB8fCAhZGVzZXJpYWxpemVVbmhhbmRsZWRQcm9tcHRCZWhh
dmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCisgICAgICAgICAgICBhdXRvIHVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYg
KCF1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciB8fCAhZGVzZXJpYWxpemVVbmhhbmRsZWRQcm9tcHRC
ZWhhdmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCB1bmhhbmRs
ZWRQcm9tcHRCZWhhdmlvcik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleS5maW5kKCI6Iikg
IT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIGlmICghcGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxp
dHkoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVl
PihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKml0
LT52YWx1ZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQpAQCAtNTg0LDE0ICs1OTQsMTQgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gV2ViRHJpdmVy
U2VydmljZTo6bWVyZ2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiByZXEKIHsKICAg
ICAvLyDCpzcuMiBQcm9jZXNzaW5nIENhcGFiaWxpdGllcy4KICAgICAvLyBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLW1lcmdpbmctY2FwYWJp
bGl0aWVzCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byByZXF1aXJlZEVuZCA9IHJlcXVpcmVkQ2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZvciAo
YXV0byBpdCA9IHJlcXVpcmVkQ2FwYWJpbGl0aWVzLmJlZ2luKCk7IGl0ICE9IHJlcXVpcmVkRW5k
OyArK2l0KQotICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpW
YWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKml0
LT52YWx1ZSk7CiAKICAgICBhdXRvIGZpcnN0TWF0Y2hFbmQgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzLmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMuYmVn
aW4oKTsgaXQgIT0gZmlyc3RNYXRjaEVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1
ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFsdWU+KGl0LT52YWx1ZSkpOworICAgICAgICByZXN1
bHQtPnNldFZhbHVlKGl0LT5rZXksICppdC0+dmFsdWUpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTYwNCw3ICs2MTQsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBXZWJEcml2ZXJTZXJ2
aWNlOjptYXRjaENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1lcgogCiAgICAgLy8g
U29tZSBjYXBhYmlsaXRpZXMgbGlrZSBicm93c2VyIG5hbWUgYW5kIHZlcnNpb24gbWlnaHQgbmVl
ZCB0byBsYXVuY2ggdGhlIGJyb3dzZXIsCiAgICAgLy8gc28gd2Ugb25seSByZWplY3QgdGhlIGtu
b3duIGNhcGFiaWxpdGllcyB0aGF0IGRvbid0IG1hdGNoLgotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG1hdGNoZWRDYXBhYmlsaXRpZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1
dG8gbWF0Y2hlZENhcGFiaWxpdGllcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgaWYg
KHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKQogICAgICAgICBtYXRjaGVkQ2FwYWJp
bGl0aWVzLT5zZXRTdHJpbmcoImJyb3dzZXJOYW1lIl9zLCBwbGF0Zm9ybUNhcGFiaWxpdGllcy5i
cm93c2VyTmFtZS52YWx1ZSgpKTsKICAgICBpZiAocGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3Nl
clZlcnNpb24pCkBAIC02MjEsMzUgKzYzMSwyOCBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBXZWJE
cml2ZXJTZXJ2aWNlOjptYXRjaENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1lcgog
ICAgIGF1dG8gZW5kID0gbWVyZ2VkQ2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZvciAoYXV0byBp
dCA9IG1lcmdlZENhcGFiaWxpdGllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgaWYgKGl0LT5rZXkgPT0gImJyb3dzZXJOYW1lIiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGllcy5i
cm93c2VyTmFtZSkgewotICAgICAgICAgICAgU3RyaW5nIGJyb3dzZXJOYW1lOwotICAgICAgICAg
ICAgaXQtPnZhbHVlLT5hc1N0cmluZyhicm93c2VyTmFtZSk7CisgICAgICAgICAgICBhdXRvIGJy
b3dzZXJOYW1lID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lLnZhbHVl
KCksIGJyb3dzZXJOYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgJiYgcGxhdGZvcm1DYXBh
YmlsaXRpZXMuYnJvd3NlclZlcnNpb24pIHsKLSAgICAgICAgICAgIFN0cmluZyBicm93c2VyVmVy
c2lvbjsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoYnJvd3NlclZlcnNpb24pOwor
ICAgICAgICAgICAgYXV0byBicm93c2VyVmVyc2lvbiA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsK
ICAgICAgICAgICAgIGlmICghcGxhdGZvcm1Db21wYXJlQnJvd3NlclZlcnNpb25zKGJyb3dzZXJW
ZXJzaW9uLCBwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbi52YWx1ZSgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5
ID09ICJwbGF0Zm9ybU5hbWUiICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZSkg
ewotICAgICAgICAgICAgU3RyaW5nIHBsYXRmb3JtTmFtZTsKLSAgICAgICAgICAgIGl0LT52YWx1
ZS0+YXNTdHJpbmcocGxhdGZvcm1OYW1lKTsKKyAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1OYW1l
ID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShwbGF0Zm9ybU5hbWUsICJhbnkiKSAmJiBwbGF0Zm9ybUNhcGFiaWxp
dGllcy5wbGF0Zm9ybU5hbWUudmFsdWUoKSAhPSBwbGF0Zm9ybU5hbWUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAiYWNjZXB0
SW5zZWN1cmVDZXJ0cyIgJiYgcGxhdGZvcm1DYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0
cykgewotICAgICAgICAgICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAgICAgICAg
aXQtPnZhbHVlLT5hc0Jvb2xlYW4oYWNjZXB0SW5zZWN1cmVDZXJ0cyk7CisgICAgICAgICAgICBh
dXRvIGFjY2VwdEluc2VjdXJlQ2VydHMgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigpOwogICAgICAg
ICAgICAgaWYgKGFjY2VwdEluc2VjdXJlQ2VydHMgJiYgIXBsYXRmb3JtQ2FwYWJpbGl0aWVzLmFj
Y2VwdEluc2VjdXJlQ2VydHMudmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwcm94eSIpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgICAgICAgICAgaXQtPnZhbHVlLT5hc09i
amVjdChwcm94eSk7Ci0gICAgICAgICAgICBTdHJpbmcgcHJveHlUeXBlOwotICAgICAgICAgICAg
cHJveHktPmdldFN0cmluZygicHJveHlUeXBlIl9zLCBwcm94eVR5cGUpOworICAgICAgICAgICAg
YXV0byBwcm94eVR5cGUgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCktPmdldFN0cmluZygicHJveHlU
eXBlIl9zKTsKICAgICAgICAgICAgIGlmICghcGxhdGZvcm1TdXBwb3J0UHJveHlUeXBlKHByb3h5
VHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBp
ZiAoIXBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGl0LT5rZXksIGl0LT52YWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbWF0Y2hlZENhcGFiaWxpdGllcy0+c2V0VmFs
dWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgbWF0
Y2hlZENhcGFiaWxpdGllcy0+c2V0VmFsdWUoaXQtPmtleSwgKml0LT52YWx1ZSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG1hdGNoZWRDYXBhYmlsaXRpZXM7CkBAIC02NjEsMTkgKzY2NCwxOSBAQCBW
ZWN0b3I8Q2FwYWJpbGl0aWVzPiBXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNzQ2FwYWJpbGl0aWVz
KGNvbnN0IEpTT046Ok9iamVjdCYgcAogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJk
cml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNwcm9jZXNzaW5nLWNhcGFiaWxpdGllcwogCiAgICAg
Ly8gMS4gTGV0IGNhcGFiaWxpdGllcyByZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0
aGUgcHJvcGVydHkgImNhcGFiaWxpdGllcyIgZnJvbSBwYXJhbWV0ZXJzLgotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGNhcGFiaWxpdGllc09iamVjdDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0
T2JqZWN0KCJjYXBhYmlsaXRpZXMiX3MsIGNhcGFiaWxpdGllc09iamVjdCkpIHsKKyAgICBhdXRv
IGNhcGFiaWxpdGllc09iamVjdCA9IHBhcmFtZXRlcnMuZ2V0T2JqZWN0KCJjYXBhYmlsaXRpZXMi
X3MpOworICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0KSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICAvLyAyLiBM
ZXQgcmVxdWlyZWQgY2FwYWJpbGl0aWVzIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgcHJv
cGVydHkgImFsd2F5c01hdGNoIiBmcm9tIGNhcGFiaWxpdGllcyByZXF1ZXN0LgotICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZTsKLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiByZXF1aXJlZENhcGFiaWxpdGllczsKLSAgICBpZiAoIWNhcGFiaWxpdGllc09i
amVjdC0+Z2V0VmFsdWUoImFsd2F5c01hdGNoIl9zLCByZXF1aXJlZENhcGFiaWxpdGllc1ZhbHVl
KSkKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlcXVpcmVkQ2FwYWJpbGl0aWVzOworICAgIGF1
dG8gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSA9IGNhcGFiaWxpdGllc09iamVjdC0+Z2V0VmFs
dWUoImFsd2F5c01hdGNoIl9zKTsKKyAgICBpZiAoIXJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUp
IHsKICAgICAgICAgLy8gMi4xLiBJZiByZXF1aXJlZCBjYXBhYmlsaXRpZXMgaXMgdW5kZWZpbmVk
LCBzZXQgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICByZXF1aXJl
ZENhcGFiaWxpdGllcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZWxzZSBpZiAoIXJl
cXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUtPmFzT2JqZWN0KHJlcXVpcmVkQ2FwYWJpbGl0aWVzKSkg
eworICAgIH0gZWxzZSBpZiAoIShyZXF1aXJlZENhcGFiaWxpdGllcyA9IHJlcXVpcmVkQ2FwYWJp
bGl0aWVzVmFsdWUtPmFzT2JqZWN0KCkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQsIFN0cmluZygiYWx3YXlzTWF0Y2ggaXMgaW52YWxpZCBpbiBjYXBhYmlsaXRpZXMiKSkpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTY4NiwxMyArNjg5LDEzIEBAIFZlY3RvcjxD
YXBhYmlsaXRpZXM+IFdlYkRyaXZlclNlcnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMoY29uc3Qg
SlNPTjo6T2JqZWN0JiBwCiAgICAgfQogCiAgICAgLy8gMy4gTGV0IGFsbCBmaXJzdCBtYXRjaCBj
YXBhYmlsaXRpZXMgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAiZmlyc3RN
YXRjaCIgZnJvbSBjYXBhYmlsaXRpZXMgcmVxdWVzdC4KLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZTsKICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGZp
cnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0OwotICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0LT5n
ZXRWYWx1ZSgiZmlyc3RNYXRjaCJfcywgZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlKSkgewor
ICAgIGF1dG8gZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlID0gY2FwYWJpbGl0aWVzT2JqZWN0
LT5nZXRWYWx1ZSgiZmlyc3RNYXRjaCJfcyk7CisgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzVmFsdWUpIHsKICAgICAgICAgLy8gMy4xLiBJZiBhbGwgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0
aWVzIGlzIHVuZGVmaW5lZCwgc2V0IHRoZSB2YWx1ZSB0byBhIEpTT04gTGlzdCB3aXRoIGEgc2lu
Z2xlIGVudHJ5IG9mIGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICBmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzTGlzdCA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZmlyc3RNYXRj
aENhcGFiaWxpdGllc0xpc3QtPnB1c2hPYmplY3QoSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfSBlbHNlIGlmICghZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc0FycmF5KGZpcnN0
TWF0Y2hDYXBhYmlsaXRpZXNMaXN0KSkgeworICAgIH0gZWxzZSBpZiAoIShmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzTGlzdCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZS0+YXNBcnJheSgpKSkg
ewogICAgICAgICAvLyAzLjIuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgaXMgbm90
IGEgSlNPTiBMaXN0LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1l
bnQuCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQsIFN0cmluZygiZmlyc3RNYXRjaCBp
cyBpbnZhbGlkIGluIGNhcGFiaWxpdGllcyIpKSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC03
MDQsOSArNzA3LDggQEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVyU2VydmljZTo6cHJv
Y2Vzc0NhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICB2YWxpZGF0ZWRGaXJz
dE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpcnN0TWF0Y2hD
YXBhYmlsaXRpZXNMaXN0TGVuZ3RoKTsKICAgICAvLyA1LiBGb3IgZWFjaCBmaXJzdCBtYXRjaCBj
YXBhYmlsaXRpZXMgY29ycmVzcG9uZGluZyB0byBhbiBpbmRleGVkIHByb3BlcnR5IGluIGFsbCBm
aXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZp
cnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUgPSBmaXJzdE1hdGNoQ2FwYWJp
bGl0aWVzTGlzdC0+Z2V0KGkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBmaXJzdE1h
dGNoQ2FwYWJpbGl0aWVzOwotICAgICAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1
ZS0+YXNPYmplY3QoZmlyc3RNYXRjaENhcGFiaWxpdGllcykpIHsKKyAgICAgICAgYXV0byBmaXJz
dE1hdGNoQ2FwYWJpbGl0aWVzID0gZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3QtPmdldChpKS0+
YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzKSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50LCBTdHJpbmcoIkludmFsaWQgY2FwYWJpbGl0
aWVzIGZvdW5kIGluIGZpcnN0TWF0Y2giKSkpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgfQpAQCAtODE1LDkgKzgxNyw5IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRl
U2Vzc2lvbihWZWN0b3I8Q2FwYWJpbGl0aWVzPiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAKICAg
ICAgICAgICAgIG1fc2Vzc2lvbiA9IFdURk1vdmUoc2Vzc2lvbik7CiAKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2Vzc2lvbklkIl9zLCBtX3Nl
c3Npb24tPmlkKCkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY2FwYWJpbGl0
aWVzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2Fw
YWJpbGl0aWVzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNv
bnN0IGF1dG8mIGNhcGFiaWxpdGllcyA9IG1fc2Vzc2lvbi0+Y2FwYWJpbGl0aWVzKCk7CiAgICAg
ICAgICAgICBjYXBhYmlsaXRpZXNPYmplY3QtPnNldFN0cmluZygiYnJvd3Nlck5hbWUiX3MsIGNh
cGFiaWxpdGllcy5icm93c2VyTmFtZS52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICAgICAg
ICAgIGNhcGFiaWxpdGllc09iamVjdC0+c2V0U3RyaW5nKCJicm93c2VyVmVyc2lvbiJfcywgY2Fw
YWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uLnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwpAQCAtODU1
LDcgKzg1Nyw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRlU2Vzc2lvbihWZWN0b3I8
Q2FwYWJpbGl0aWVzPiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5wcm94eSkKICAgICAgICAgICAgICAgICBjYXBhYmls
aXRpZXNPYmplY3QtPnNldE9iamVjdCgicHJveHkiX3MsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdGltZW91dHNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byB0aW1lb3V0c09iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpZiAobV9zZXNzaW9uLT5zY3JpcHRU
aW1lb3V0KCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAg
ICAgICAgICAgICAgIHRpbWVvdXRzT2JqZWN0LT5zZXRWYWx1ZSgic2NyaXB0Il9zLCBKU09OOjpW
YWx1ZTo6bnVsbCgpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTExMzUsOCArMTEzNyw4IEBAIHZv
aWQgV2ViRHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjx2CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGhhbmRsZXM7Ci0gICAgICAgIGlmIChyZXN1bHQu
cmVzdWx0KCktPmFzQXJyYXkoaGFuZGxlcykgJiYgIWhhbmRsZXMtPmxlbmd0aCgpKQorICAgICAg
ICBhdXRvIGhhbmRsZXMgPSByZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoKTsKKyAgICAgICAgaWYg
KGhhbmRsZXMgJiYgIWhhbmRsZXMtPmxlbmd0aCgpKQogICAgICAgICAgICAgbV9zZXNzaW9uID0g
bnVsbHB0cjsKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwpA
QCAtMTE3NSwxMyArMTE3NywxMSBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6Om5ld1dpbmRvdyhS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaQogICAgICAgICBy
ZXR1cm47CiAKICAgICBPcHRpb25hbDxTdHJpbmc+IHR5cGVIaW50OwotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ0eXBlIl9zLCB2
YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAodmFsdWUt
PmFzU3RyaW5nKHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09
ICJ3aW5kb3ciIHx8IHZhbHVlU3RyaW5nID09ICJ0YWIiKQotICAgICAgICAgICAgICAgIHR5cGVI
aW50ID0gdmFsdWVTdHJpbmc7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkg
eworICAgIGlmIChhdXRvIHZhbHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoInR5cGUiX3MpKSB7
CisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKHZhbHVlU3RyaW5nID09ICJ3aW5kb3ciIHx8IHZhbHVlU3RyaW5nID09ICJ0YWIiKQorICAg
ICAgICAgICAgdHlwZUhpbnQgPSB2YWx1ZVN0cmluZzsKKyAgICAgICAgZWxzZSBpZiAoIXZhbHVl
LT5pc051bGwoKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMjE0LDggKzEyMTQsNyBAQCB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbgogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSlNP
Tjo6VmFsdWU6OlR5cGU6Ok9iamVjdDogewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBm
cmFtZUlET2JqZWN0OwotICAgICAgICBmcmFtZUlELT5hc09iamVjdChmcmFtZUlET2JqZWN0KTsK
KyAgICAgICAgYXV0byBmcmFtZUlET2JqZWN0ID0gZnJhbWVJRC0+YXNPYmplY3QoKTsKICAgICAg
ICAgaWYgKGZyYW1lSURPYmplY3QtPmZpbmQoU2Vzc2lvbjo6d2ViRWxlbWVudElkZW50aWZpZXIo
KSkgPT0gZnJhbWVJRE9iamVjdC0+ZW5kKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlk
QXJndW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyNTYsOCArMTI1NSw4IEBAIHZv
aWQgV2ViRHJpdmVyU2VydmljZTo6c3dpdGNoVG9QYXJlbnRGcmFtZShSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1CiAKIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGZpbmRFbGVt
ZW50T3JDb21wbGV0ZVdpdGhFcnJvcihKU09OOjpPYmplY3QmIHBhcmFtZXRlcnMsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBTdHJp
bmcgZWxlbWVudElEOwotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoImVsZW1lbnRJZCJf
cywgZWxlbWVudElEKSB8fCBlbGVtZW50SUQuaXNFbXB0eSgpKSB7CisgICAgYXV0byBlbGVtZW50
SUQgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygiZWxlbWVudElkIl9zKTsKKyAgICBpZiAoZWxlbWVu
dElELmlzRW1wdHkoKSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTI3NywxMSArMTI3NiwxMyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFN0cmF0ZWd5KGNvbnN0IFN0cmluZyYgc3RyYXRlZ3kp
CiAKIHN0YXRpYyBib29sIGZpbmRTdHJhdGVneUFuZFNlbGVjdG9yT3JDb21wbGV0ZVdpdGhFcnJv
cihKU09OOjpPYmplY3QmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiBjb21wbGV0aW9uSGFuZGxlciwgU3RyaW5nJiBzdHJhdGVneSwgU3RyaW5nJiBzZWxlY3Rv
cikKIHsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJ1c2luZyJfcywgc3RyYXRlZ3kp
IHx8ICFpc1ZhbGlkU3RyYXRlZ3koc3RyYXRlZ3kpKSB7CisgICAgc3RyYXRlZ3kgPSBwYXJhbWV0
ZXJzLmdldFN0cmluZygidXNpbmciX3MpOworICAgIGlmICghaXNWYWxpZFN0cmF0ZWd5KHN0cmF0
ZWd5KSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygidmFsdWUiX3Ms
IHNlbGVjdG9yKSkgeworICAgIHNlbGVjdG9yID0gcGFyYW1ldGVycy5nZXRTdHJpbmcoInZhbHVl
Il9zKTsKKyAgICBpZiAoIXNlbGVjdG9yKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE1ODQsMTEgKzE1ODUsMTMg
QEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRQYWdlU291cmNlKFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KIAogc3RhdGljIGJvb2wgZmluZFNjcmlwdEFuZEFy
Z3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5j
dGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhhbmRsZXIsIFN0cmluZyYg
c2NyaXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKCFwYXJh
bWV0ZXJzLmdldFN0cmluZygic2NyaXB0Il9zLCBzY3JpcHQpKSB7CisgICAgc2NyaXB0ID0gcGFy
YW1ldGVycy5nZXRTdHJpbmcoInNjcmlwdCJfcyk7CisgICAgaWYgKCFzY3JpcHQpIHsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIGlmICghcGFyYW1ldGVycy5nZXRBcnJheSgiYXJncyJfcywgYXJndW1lbnRzKSkgewor
ICAgIGFyZ3VtZW50cyA9IHBhcmFtZXRlcnMuZ2V0QXJyYXkoImFyZ3MiX3MpOworICAgIGlmICgh
YXJndW1lbnRzKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2NzgsMzcgKzE2ODEsNDAgQEAgdm9pZCBXZWJEcml2
ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMsIEZ1bmN0aW8KIHN0YXRpYyBPcHRpb25hbDxTZXNzaW9uOjpDb29raWU+IGRlc2VyaWFsaXpl
Q29va2llKEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KQogewogICAgIFNlc3Npb246OkNvb2tp
ZSBjb29raWU7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29r
aWUubmFtZSkgfHwgY29va2llLm5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MsIGNvb2tp
ZS52YWx1ZSkgfHwgY29va2llLnZhbHVlLmlzRW1wdHkoKSkKKworICAgIGNvb2tpZS5uYW1lID0g
Y29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKGNvb2tpZS5uYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgicGF0aCJfcywg
dmFsdWUpKSB7Ci0gICAgICAgIFN0cmluZyBwYXRoOwotICAgICAgICBpZiAoIXZhbHVlLT5hc1N0
cmluZyhwYXRoKSkKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2
YWx1ZSJfcyk7CisgICAgaWYgKGNvb2tpZS52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRW
YWx1ZSgicGF0aCJfcykpIHsKKyAgICAgICAgYXV0byBwYXRoID0gdmFsdWUtPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghcGF0aCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIGNvb2tpZS5wYXRoID0gcGF0aDsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5n
ZXRWYWx1ZSgiZG9tYWluIl9zLCB2YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIGRvbWFpbjsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoZG9tYWluKSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9
IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiZG9tYWluIl9zKSkgeworICAgICAgICBhdXRvIGRvbWFp
biA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWRvbWFpbikKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGNvb2tpZS5kb21haW4gPSBkb21haW47CiAg
ICAgfQotICAgIGlmIChjb29raWVPYmplY3QuZ2V0VmFsdWUoInNlY3VyZSJfcywgdmFsdWUpKSB7
Ci0gICAgICAgIGJvb2wgc2VjdXJlOwotICAgICAgICBpZiAoIXZhbHVlLT5hc0Jvb2xlYW4oc2Vj
dXJlKSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgic2VjdXJl
Il9zKSkgeworICAgICAgICBhdXRvIHNlY3VyZSA9IHZhbHVlLT5hc0Jvb2xlYW4oKTsKKyAgICAg
ICAgaWYgKCFzZWN1cmUpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAg
ICBjb29raWUuc2VjdXJlID0gc2VjdXJlOwogICAgIH0KLSAgICBpZiAoY29va2llT2JqZWN0Lmdl
dFZhbHVlKCJodHRwT25seSJfcywgdmFsdWUpKSB7Ci0gICAgICAgIGJvb2wgaHR0cE9ubHk7Ci0g
ICAgICAgIGlmICghdmFsdWUtPmFzQm9vbGVhbihodHRwT25seSkpCisgICAgaWYgKGF1dG8gdmFs
dWUgPSBjb29raWVPYmplY3QuZ2V0VmFsdWUoImh0dHBPbmx5Il9zKSkgeworICAgICAgICBhdXRv
IGh0dHBPbmx5ID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBpZiAoIWh0dHBPbmx5KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY29va2llLmh0dHBPbmx5
ID0gaHR0cE9ubHk7CiAgICAgfQotICAgIGlmIChjb29raWVPYmplY3QuZ2V0VmFsdWUoImV4cGly
eSJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0VmFs
dWUoImV4cGlyeSJfcykpIHsKICAgICAgICAgYXV0byBleHBpcnkgPSB1bnNpZ25lZFZhbHVlKCp2
YWx1ZSk7CiAgICAgICAgIGlmICghZXhwaXJ5KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKQEAgLTE3ODYsOCArMTc5Miw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVsZXRl
QWxsQ29va2llcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0CiAKIHN0
YXRpYyBib29sIHByb2Nlc3NQYXVzZUFjdGlvbihKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIEFj
dGlvbiYgYWN0aW9uLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBkdXJhdGlvblZhbHVlOwotICAgIGlmICghYWN0aW9uSXRlbS5nZXRW
YWx1ZSgiZHVyYXRpb24iX3MsIGR1cmF0aW9uVmFsdWUpKQorICAgIGF1dG8gZHVyYXRpb25WYWx1
ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zKTsKKyAgICBpZiAoIWR1cmF0aW9u
VmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBkdXJhdGlvbiA9IHVuc2ln
bmVkVmFsdWUoKmR1cmF0aW9uVmFsdWUpOwpAQCAtMTgwMiw4ICsxODA4LDcgQEAgc3RhdGljIGJv
b2wgcHJvY2Vzc1BhdXNlQWN0aW9uKEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgQWN0aW9uJiBh
Y3Rpb24sIE9wdGlvbmEKIAogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc051bGxBY3Rp
b24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBPcHRpb25hbDxT
dHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgU3RyaW5nIHN1YnR5cGU7Ci0gICAgYWN0aW9u
SXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAgIGF1dG8gc3VidHlwZSA9IGFj
dGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAoc3VidHlwZSAhPSAicGF1c2Ui
KSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAndHlwZScg
aW4gbnVsbCBhY3Rpb24gaXMgaW52YWxpZCBvciBtaXNzaW5nIik7CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CkBAIC0xODE5LDggKzE4MjQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9u
PiBwcm9jZXNzTnVsbEFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlv
bgogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc0tleUFjdGlvbihjb25zdCBTdHJpbmcm
IGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVz
c2FnZSkKIHsKICAgICBBY3Rpb246OlN1YnR5cGUgYWN0aW9uU3VidHlwZTsKLSAgICBTdHJpbmcg
c3VidHlwZTsKLSAgICBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcywgc3VidHlwZSk7Cisg
ICAgYXV0byBzdWJ0eXBlID0gYWN0aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MpOwogICAgIGlm
IChzdWJ0eXBlID09ICJwYXVzZSIpCiAgICAgICAgIGFjdGlvblN1YnR5cGUgPSBBY3Rpb246OlN1
YnR5cGU6OlBhdXNlOwogICAgIGVsc2UgaWYgKHN1YnR5cGUgPT0gImtleVVwIikKQEAgLTE4NDEs
MTMgKzE4NDUsMTMgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc0tleUFjdGlvbihj
b25zdCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkkKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OktleVVwOgogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBl
OjpLZXlEb3duOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4ga2V5VmFsdWU7Ci0gICAg
ICAgIGlmICghYWN0aW9uSXRlbS5nZXRWYWx1ZSgidmFsdWUiX3MsIGtleVZhbHVlKSkgeworICAg
ICAgICBhdXRvIGtleVZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgidmFsdWUiX3MpOworICAg
ICAgICBpZiAoIWtleVZhbHVlKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmco
IlRoZSBwYXJhbWF0ZXIgJ3ZhbHVlJyBpcyBtaXNzaW5nIGZvciBrZXkgdXAvZG93biBhY3Rpb24i
KTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAg
U3RyaW5nIGtleTsKLSAgICAgICAgaWYgKCFrZXlWYWx1ZS0+YXNTdHJpbmcoa2V5KSB8fCBrZXku
aXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8ga2V5ID0ga2V5VmFsdWUtPmFzU3RyaW5nKGtleSk7
CisgICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd2YWx1ZScgaXMgaW52YWxpZCBmb3Iga2V5IHVwL2Rv
d24gYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9
CkBAIC0xODg0LDggKzE4ODgsNyBAQCBzdGF0aWMgTW91c2VCdXR0b24gYWN0aW9uTW91c2VCdXR0
b24odW5zaWduZWQgYnV0dG9uKQogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50
ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMmIHBhcmFtZXRlcnMs
IEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdl
KQogewogICAgIEFjdGlvbjo6U3VidHlwZSBhY3Rpb25TdWJ0eXBlOwotICAgIFN0cmluZyBzdWJ0
eXBlOwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zLCBzdWJ0eXBlKTsKKyAgICBh
dXRvIHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcyk7CiAgICAgaWYgKHN1
YnR5cGUgPT0gInBhdXNlIikKICAgICAgICAgYWN0aW9uU3VidHlwZSA9IEFjdGlvbjo6U3VidHlw
ZTo6UGF1c2U7CiAgICAgZWxzZSBpZiAoc3VidHlwZSA9PSAicG9pbnRlclVwIikKQEAgLTE5MTEs
OCArMTkxNCw4IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9u
KGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyVXA6CiAgICAgY2FzZSBBY3Rpb246OlN1YnR5
cGU6OlBvaW50ZXJEb3duOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnV0dG9uVmFs
dWU7Ci0gICAgICAgIGlmICghYWN0aW9uSXRlbS5nZXRWYWx1ZSgiYnV0dG9uIl9zLCBidXR0b25W
YWx1ZSkpIHsKKyAgICAgICAgYXV0byBidXR0b25WYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUo
ImJ1dHRvbiJfcyk7CisgICAgICAgIGlmICghYnV0dG9uVmFsdWUpIHsKICAgICAgICAgICAgIGVy
cm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRlciAnYnV0dG9uJyBpcyBtaXNzaW5nIGZv
ciBwb2ludGVyIHVwL2Rvd24gYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICB9CkBAIC0xOTI1LDggKzE5MjgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0
aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1l
dGVycwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OlBv
aW50ZXJNb3ZlOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZHVyYXRpb25WYWx1ZTsK
LSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zLCBkdXJhdGlvblZh
bHVlKSkgeworICAgICAgICBpZiAoYXV0byBkdXJhdGlvblZhbHVlID0gYWN0aW9uSXRlbS5nZXRW
YWx1ZSgiZHVyYXRpb24iX3MpKSB7CiAgICAgICAgICAgICBhdXRvIGR1cmF0aW9uID0gdW5zaWdu
ZWRWYWx1ZSgqZHVyYXRpb25WYWx1ZSk7CiAgICAgICAgICAgICBpZiAoIWR1cmF0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1ldGVyICdkdXJh
dGlvbicgaXMgaW52YWxpZCBpbiBwb2ludGVyIG1vdmUgYWN0aW9uIik7CkBAIC0xOTM1LDIwICsx
OTM3LDE2IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNv
bnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgICAgICBhY3Rpb24uZHVy
YXRpb24gPSBkdXJhdGlvbi52YWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiBvcmlnaW5WYWx1ZTsKLSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUo
Im9yaWdpbiJfcywgb3JpZ2luVmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAob3JpZ2luVmFsdWUt
PnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb3JpZ2luT2JqZWN0OwotICAgICAgICAgICAgICAgIG9yaWdp
blZhbHVlLT5hc09iamVjdChvcmlnaW5PYmplY3QpOwotICAgICAgICAgICAgICAgIFN0cmluZyBl
bGVtZW50SUQ7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5PYmplY3QtPmdldFN0cmluZyhT
ZXNzaW9uOjp3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50SUQpKSB7CisgICAgICAgIGlm
IChhdXRvIG9yaWdpblZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgib3JpZ2luIl9zKSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8gb3JpZ2luT2JqZWN0ID0gb3JpZ2luVmFsdWUtPmFzT2JqZWN0
KG9yaWdpbk9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRJRCA9IG9yaWdp
bk9iamVjdC0+Z2V0U3RyaW5nKFNlc3Npb246OndlYkVsZW1lbnRJZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgICAgIGlmICghZWxlbWVudElEKSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnb3JpZ2luJyBpcyBub3QgYSB2YWxpZCB3
ZWIgZWxlbWVudCBvYmplY3QgaW4gcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBhY3Rpb24ub3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50ZXJPcmlnaW46OlR5
cGU6OkVsZW1lbnQsIGVsZW1lbnRJRCB9OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgb3JpZ2luOwotICAgICAgICAgICAgICAgIG9yaWdpblZhbHVlLT5hc1N0
cmluZyhvcmlnaW4pOworICAgICAgICAgICAgICAgIGF1dG8gb3JpZ2luID0gb3JpZ2luVmFsdWUt
PmFzU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbiA9PSAidmlld3BvcnQiKQog
ICAgICAgICAgICAgICAgICAgICBhY3Rpb24ub3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50
ZXJPcmlnaW46OlR5cGU6OlZpZXdwb3J0LCBXVEY6Om51bGxvcHQgfTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvcmlnaW4gPT0gInBvaW50ZXIiKQpAQCAtMTk2MSw4ICsxOTU5LDcgQEAgc3Rh
dGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBp
ZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhY3Rpb24u
b3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50ZXJPcmlnaW46OlR5cGU6OlZpZXdwb3J0LCBX
VEY6Om51bGxvcHQgfTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHhWYWx1ZTsKLSAg
ICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoIngiX3MsIHhWYWx1ZSkpIHsKKyAgICAgICAg
aWYgKGF1dG8geFZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgieCJfcykpIHsKICAgICAgICAg
ICAgIGF1dG8geCA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp4VmFsdWUsIElOVF9NSU4pOwogICAg
ICAgICAgICAgaWYgKCF4KSB7CiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5n
KCJUaGUgcGFyYW1hdGVyICd4JyBpcyBpbnZhbGlkIGZvciBwb2ludGVyIG1vdmUgYWN0aW9uIik7
CkBAIC0xOTcxLDggKzE5NjgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9p
bnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycwogICAgICAgICAg
ICAgYWN0aW9uLnggPSB4LnZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHlWYWx1ZTsKLSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInkiX3Ms
IHlWYWx1ZSkpIHsKKyAgICAgICAgaWYgKGF1dG8geVZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1
ZSgieSJfcykpIHsKICAgICAgICAgICAgIGF1dG8geSA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp5
VmFsdWUsIElOVF9NSU4pOwogICAgICAgICAgICAgaWYgKCF5KSB7CiAgICAgICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd5JyBpcyBpbnZhbGlkIGZvciBw
b2ludGVyIG1vdmUgYWN0aW9uIik7CkBAIC0xOTk1LDE4ICsxOTkxLDE5IEBAIHN0YXRpYyBPcHRp
b25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50
ZXJQYXJhbWV0ZXJzCiBzdGF0aWMgT3B0aW9uYWw8UG9pbnRlclBhcmFtZXRlcnM+IHByb2Nlc3NQ
b2ludGVyUGFyYW1ldGVycyhKU09OOjpPYmplY3QmIGFjdGlvblNlcXVlbmNlLCBPcHRpb25hbDxT
dHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgUG9pbnRlclBhcmFtZXRlcnMgcGFyYW1ldGVy
czsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcmFtZXRlcnNEYXRhVmFsdWU7Ci0gICAgaWYg
KCFhY3Rpb25TZXF1ZW5jZS5nZXRWYWx1ZSgicGFyYW1ldGVycyJfcywgcGFyYW1ldGVyc0RhdGFW
YWx1ZSkpCisKKyAgICBhdXRvIHBhcmFtZXRlcnNEYXRhVmFsdWUgPSBhY3Rpb25TZXF1ZW5jZS5n
ZXRWYWx1ZSgicGFyYW1ldGVycyJfcyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzRGF0YVZhbHVlKQog
ICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnNEYXRhOwotICAgIGlmICghcGFyYW1ldGVyc0RhdGFWYWx1ZS0+YXNPYmplY3QocGFy
YW1ldGVyc0RhdGEpKSB7CisgICAgYXV0byBwYXJhbWV0ZXJzRGF0YSA9IHBhcmFtZXRlcnNEYXRh
VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFwYXJhbWV0ZXJzRGF0YSkgewogICAgICAgICBl
cnJvck1lc3NhZ2UgPSBTdHJpbmcoIkFjdGlvbiBzZXF1ZW5jZSBwb2ludGVyIHBhcmFtZXRlcnMg
aXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIFN0cmluZyBwb2ludGVyVHlwZTsKLSAgICBpZiAoIXBhcmFtZXRlcnNEYXRhLT5nZXRT
dHJpbmcoInBvaW50ZXJUeXBlIl9zLCBwb2ludGVyVHlwZSkpCisgICAgYXV0byBwb2ludGVyVHlw
ZSA9IHBhcmFtZXRlcnNEYXRhLT5nZXRTdHJpbmcoInBvaW50ZXJUeXBlIl9zKTsKKyAgICBpZiAo
IXBvaW50ZXJUeXBlKQogICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKIAogICAgIGlmIChwb2lu
dGVyVHlwZSA9PSAibW91c2UiKQpAQCAtMjAyNSwxNCArMjAyMiwxMyBAQCBzdGF0aWMgT3B0aW9u
YWw8UG9pbnRlclBhcmFtZXRlcnM+IHByb2Nlc3NQb2ludGVyUGFyYW1ldGVycyhKU09OOjpPYmpl
Y3QmIGFjdGlvbgogCiBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJbnB1
dEFjdGlvblNlcXVlbmNlKFNlc3Npb24mIHNlc3Npb24sIEpTT046OlZhbHVlJiBhY3Rpb25TZXF1
ZW5jZVZhbHVlLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gYWN0aW9uU2VxdWVuY2U7Ci0gICAgaWYgKCFhY3Rpb25TZXF1ZW5jZVZh
bHVlLmFzT2JqZWN0KGFjdGlvblNlcXVlbmNlKSkgeworICAgIGF1dG8gYWN0aW9uU2VxdWVuY2Ug
PSBhY3Rpb25TZXF1ZW5jZVZhbHVlLmFzT2JqZWN0KCk7CisgICAgaWYgKCFhY3Rpb25TZXF1ZW5j
ZSkgewogICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBhY3Rpb24gc2VxdWVuY2Ug
aXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIFN0cmluZyB0eXBlOwotICAgIGFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmcoInR5cGUi
X3MsIHR5cGUpOworICAgIGF1dG8gdHlwZSA9IGFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmcoInR5
cGUiX3MpOwogICAgIElucHV0U291cmNlOjpUeXBlIGlucHV0U291cmNlVHlwZTsKICAgICBpZiAo
dHlwZSA9PSAia2V5IikKICAgICAgICAgaW5wdXRTb3VyY2VUeXBlID0gSW5wdXRTb3VyY2U6OlR5
cGU6OktleTsKQEAgLTIwNDUsOCArMjA0MSw4IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8QWN0
aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNPCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIGlkOwotICAg
IGlmICghYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygiaWQiX3MsIGlkKSkgeworICAgIGF1dG8g
aWQgPSBhY3Rpb25TZXF1ZW5jZS0+Z2V0U3RyaW5nKCJpZCJfcyk7CisgICAgaWYgKCFpZCkgewog
ICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ2lkJyBpcyBpbnZh
bGlkIG9yIG1pc3NpbmcgaW4gYWN0aW9uIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQpAQCAtMjA4MSw5ICsyMDc3LDggQEAgc3RhdGljIE9wdGlvbmFsPFZl
Y3RvcjxBY3Rpb24+PiBwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9u
LCBKU08KICAgICBWZWN0b3I8QWN0aW9uPiBhY3Rpb25zOwogICAgIHVuc2lnbmVkIGFjdGlvbkl0
ZW1zTGVuZ3RoID0gYWN0aW9uSXRlbXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhY3Rpb25JdGVtc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gYWN0aW9uSXRl
bVZhbHVlID0gYWN0aW9uSXRlbXMtPmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gYWN0aW9uSXRlbTsKLSAgICAgICAgaWYgKCFhY3Rpb25JdGVtVmFsdWUtPmFzT2JqZWN0KGFj
dGlvbkl0ZW0pKSB7CisgICAgICAgIGF1dG8gYWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zLT5nZXQo
aSktPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghYWN0aW9uSXRlbSkgewogICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJBbiBhY3Rpb24gaW4gYWN0aW9uIHNlcXVlbmNlIGlzIG5v
dCBhbiBvYmplY3QiKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0NTU01hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9DU1NNYW5hZ2VyLmpzCmluZGV4IDY4YWVhYTk3ODcwMjhlZThkMTg1OGEx
ZDI3MDc1MDMzNjBiZDRlOTIuLjE1YjYyMzFhZjMzYjRjZjdlZWI4ZDI5MDk4NzNiNGRhNGE1YmE3
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0NTU01hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5qcwpAQCAtMjAzLDMyICsyMDMsMzQgQEAgV0ku
Q1NTTWFuYWdlciA9IGNsYXNzIENTU01hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAg
aWYgKCF0aGlzLmNhbkZvcmNlQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGxldCBwcm90b2NvbE5hbWUgPSAiIjsKKyAgICAgICAgbGV0IGNvbW1hbmRBcmd1bWVu
dHMgPSB7fTsKIAogICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgY2FzZSBXSS5DU1NN
YW5hZ2VyLkFwcGVhcmFuY2UuTGlnaHQ6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNw
ZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkxpZ2h0OworICAgICAgICAgICAgY29t
bWFuZEFyZ3VtZW50cy5hcHBlYXJhbmNlID0gSW5zcGVjdG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBw
ZWFyYW5jZS5MaWdodDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0kuQ1NT
TWFuYWdlci5BcHBlYXJhbmNlLkRhcms6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNw
ZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkRhcms7CisgICAgICAgICAgICBjb21t
YW5kQXJndW1lbnRzLmFwcGVhcmFuY2UgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBl
YXJhbmNlLkRhcms7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIG51bGw6Ci0g
ICAgICAgIGNhc2UgdW5kZWZpbmVkOgotICAgICAgICBjYXNlICIiOgotICAgICAgICAgICAgcHJv
dG9jb2xOYW1lID0gIiI7CisgICAgICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTQpOiB0
aGUgYGFwcGVhcmFuY2VgYCBwYXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAg
d2FzIG5vdCBvcHRpb25hbC4KKyAgICAgICAgICAgIC8vIFNpbmNlIHN1cHBvcnQgY2FuJ3QgYmUg
dGVzdGVkIGRpcmVjdGx5LCBjaGVjayBmb3IgdGhlIGBvcHRpb25zYGAgcGFyYW1ldGVyIG9mIGBE
T01EZWJ1Z2dlci5zZXRET01CcmVha3BvaW50YCAoaU9TIDE0LjArKS4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBVc2UgZXhwbGljaXQgdmVyc2lvbiBjaGVja2luZyBvbmNlIGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE0ODY4MCBpcyBmaXhlZC4KKyAgICAgICAgICAgIGlmICghSW5zcGVjdG9yQmFja2Vu
ZC5oYXNDb21tYW5kKCJET01EZWJ1Z2dlci5zZXRET01CcmVha3BvaW50IiwgIm9wdGlvbnMiKSkK
KyAgICAgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVhcmFuY2UgPSAiIjsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBBYm9ydCBm
b3IgdW5rbm93biB2YWx1ZXMuCisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVu
a25vd24gYXBwZWFyYW5jZSIsIG5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgdGhpcy5fZm9yY2VkQXBwZWFyYW5jZSA9IG5hbWUgfHwgbnVsbDsKIAogICAg
ICAgICBsZXQgdGFyZ2V0ID0gV0kuYXNzdW1pbmdNYWluVGFyZ2V0KCk7Ci0gICAgICAgIHRhcmdl
dC5QYWdlQWdlbnQuc2V0Rm9yY2VkQXBwZWFyYW5jZShwcm90b2NvbE5hbWUpLnRoZW4oKCkgPT4g
eworICAgICAgICB0YXJnZXQuUGFnZUFnZW50LnNldEZvcmNlZEFwcGVhcmFuY2UuaW52b2tlKGNv
bW1hbmRBcmd1bWVudHMpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgdGhpcy5tZWRpYVF1ZXJ5
UmVzdWx0Q2hhbmdlZCgpOwogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV0kuQ1NTTWFuYWdlci5FdmVudC5Gb3JjZWRBcHBlYXJhbmNlRGlkQ2hhbmdlLCB7YXBwZWFy
YW5jZTogdGhpcy5fZm9yY2VkQXBwZWFyYW5jZX0pOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29u
dGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
ZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzCmluZGV4IDQ4MmUxNDJhZTExZDYzYzAwMTVmOTZjNzRi
Y2IyZGVhMmZlNTA2OWQuLjkxODM2ZWNjNzY5Nzc1NmE5NjZlZmVhNzEwM2M5MmQzNDA4ZTQ0NjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Nl
dHRpbmdzVGFiQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcwpAQCAtMzQ2LDE0ICszNDYs
MTggQEAgV0kuU2V0dGluZ3NUYWJDb250ZW50VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVu
dFZpZXcgZXh0ZW5kcyBXSS5UYWJDb250ZW50VmkKICAgICAgICAgICAgICAgICBbV0kuTG9nZ2lu
Z0NoYW5uZWwuTGV2ZWwuVmVyYm9zZSwgV0kuVUlTdHJpbmcoIlZlcmJvc2UiKV0sCiAgICAgICAg
ICAgICBdOwogICAgICAgICAgICAgY29uc3QgZWRpdG9yTGFiZWxzID0gewotICAgICAgICAgICAg
ICAgIG1lZGlhOiBXSS5VSVN0cmluZygiTWVkaWEgTG9nZ2luZzoiKSwKLSAgICAgICAgICAgICAg
ICBtZWRpYXNvdXJjZTogV0kuVUlTdHJpbmcoIk1TRSBMb2dnaW5nOiIpLAotICAgICAgICAgICAg
ICAgIHdlYnJ0YzogV0kuVUlTdHJpbmcoIldlYlJUQyBMb2dnaW5nOiIpLAorICAgICAgICAgICAg
ICAgIFtXSS5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk1lZGlhXTogV0kuVUlTdHJpbmco
Ik1lZGlhIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VTb3VyY2UuTWVkaWFTb3VyY2VdOiBXSS5VSVN0cmluZygiTVNFIExvZ2dpbmc6IiksCisg
ICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuV2ViUlRDXTog
V0kuVUlTdHJpbmcoIldlYlJUQyBMb2dnaW5nOiIpLAogICAgICAgICAgICAgfTsKIAogICAgICAg
ICAgICAgbGV0IGNoYW5uZWxzID0gV0kuY29uc29sZU1hbmFnZXIuY3VzdG9tTG9nZ2luZ0NoYW5u
ZWxzOwogICAgICAgICAgICAgZm9yIChsZXQgY2hhbm5lbCBvZiBjaGFubmVscykgewotICAgICAg
ICAgICAgICAgIGxldCBsb2dFZGl0b3IgPSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0
aEN1c3RvbVNldHRpbmcoZWRpdG9yTGFiZWxzW2NoYW5uZWwuc291cmNlXSwgV0kuU2V0dGluZ0Vk
aXRvci5UeXBlLlNlbGVjdCwge3ZhbHVlczogbG9nTGV2ZWxzfSk7CisgICAgICAgICAgICAgICAg
bGV0IGxhYmVsID0gZWRpdG9yTGFiZWxzW2NoYW5uZWwuc291cmNlXTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWxhYmVsKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgIGxldCBsb2dFZGl0b3IgPSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1
c3RvbVNldHRpbmcobGFiZWwsIFdJLlNldHRpbmdFZGl0b3IuVHlwZS5TZWxlY3QsIHt2YWx1ZXM6
IGxvZ0xldmVsc30pOwogICAgICAgICAgICAgICAgIGxvZ0VkaXRvci52YWx1ZSA9IGNoYW5uZWwu
bGV2ZWw7CiAgICAgICAgICAgICAgICAgbG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0
dGluZ0VkaXRvci5FdmVudC5WYWx1ZURpZENoYW5nZSwgKCkgPT4gewogICAgICAgICAgICAgICAg
ICAgICBmb3IgKGxldCB0YXJnZXQgb2YgV0kudGFyZ2V0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KaW5kZXggM2RjYjIxNDFlYjBk
Mjc5NDcwN2RlMjg0Yzg3MDcxMGU4NzcyMWMzOS4uZWIzY2RiNWY4NjZjNWY5M2E4ODIyOTgzYTQ5
ZDkxNmYzZTZlYWZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb24KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb24KQEAgLTMyLDcgKzMyLDggQEAKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaW4gd2hpY2ggcmVjdHMsIHBvaW50cywg
YW5kIHNpemVzIGFyZSB0byBiZSBpbnRlcnByZXRlZC4iLAogICAgICAgICAgICAgImVudW0iOiBb
CiAgICAgICAgICAgICAgICAgIlBhZ2UiLAotICAgICAgICAgICAgICAgICJWaWV3cG9ydCIKKyAg
ICAgICAgICAgICAgICAiVmlld3BvcnQiLAorICAgICAgICAgICAgICAgICJMYXlvdXRWaWV3cG9y
dCIKICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcAppbmRleCBkODdhNGRmZWM3OTRmMzFkY2I2NGU1ZTllZjRiY2U0YjE4YzE5MmEyLi4zZjdl
NDBlNThkNGFkODFhZjc0MjA4YmNhNjEwYmE5ZjhmNTE3Nzg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcApAQCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJy
b3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mCiAgICAgZ2V0
TmV4dENvbnRleHQobWFrZVJlZigqdGhpcyksIFdURk1vdmUocGFnZXMpLCBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD46OmNyZWF0
ZSgpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmdldEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdldEJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Z2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVBy
b3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMzI4LDcgKzMyOCw3IEBA
IHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQ
cmVzZW50YXRpb24gdG9Qcm90b2NvbChBCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXRpb25IaW50LCBSZWY8Q3JlYXRlQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpjcmVhdGVCcm93c2luZ0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uPiYmIHByZXNlbnRhdGlvbkhpbnQs
IFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBB
U1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0zMzYsMTEgKzMzNiw4IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBT
dHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0CiAKICAgICB1aW50MTZfdCBvcHRpb25zID0gMDsKIAot
ICAgIGlmIChvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQpIHsKLSAgICAgICAgYXV0byBwYXJzZWRQ
cmVzZW50YXRpb25IaW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24+KCpvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQp
OwotICAgICAgICBpZiAocGFyc2VkUHJlc2VudGF0aW9uSGludC5oYXNWYWx1ZSgpICYmIHBhcnNl
ZFByZXNlbnRhdGlvbkhpbnQudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb246OlRhYikKLSAgICAgICAgICAgIG9wdGlv
bnMgfD0gQVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnNQcmVmZXJO
ZXdUYWI7Ci0gICAgfQorICAgIGlmIChwcmVzZW50YXRpb25IaW50ID09IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbjo6VGFiKQorICAg
ICAgICBvcHRpb25zIHw9IEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRp
b25zUHJlZmVyTmV3VGFiOwogCiAgICAgbV9jbGllbnQtPnJlcXVlc3ROZXdQYWdlV2l0aE9wdGlv
bnMoKnRoaXMsIHN0YXRpY19jYXN0PEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRl
eHRPcHRpb25zPihvcHRpb25zKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oV2ViUGFnZVByb3h5KiBwYWdlKSB7CiAgICAgICAg
IGlmICghcGFnZSkKQEAgLTM1MiwyMyArMzQ5LDI1IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdD
b250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0
b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlKQogewogICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAg
IGlmICghcGFnZSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKICAgICBwYWdlLT5jbG9zZVBhZ2UoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNh
bGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRl
eHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFN3aXRjaFRvQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYg
KCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dO
b3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZy
YW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9u
YWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8g
ZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQp
OwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMzgxLDI1ICszODAsMjUgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHQKICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25hbE9yaWdpbk9iamVjdCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRpb25hbFNpemVPYmplY3QsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRX
aW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93
RnJhbWVPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIE9wdGlv
bmFsPGZsb2F0PiB4OwotICAgIE9wdGlvbmFsPGZsb2F0PiB5OwotICAgIGlmIChvcHRpb25hbE9y
aWdpbk9iamVjdCkgewotICAgICAgICBpZiAoISh4ID0gb3B0aW9uYWxPcmlnaW5PYmplY3QtPmdl
dE51bWJlcjxmbG9hdD4oIngiX3MpKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IHg7CisgICAgT3B0
aW9uYWw8ZG91YmxlPiB5OworICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgaWYgKCEoeCA9IG9y
aWdpbi0+Z2V0RG91YmxlKCJ4Il9zKSkpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlICd4JyBwYXJh
bWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBpbnZhbGlkLiIpOwogCi0gICAgICAgIGlmICghKHkgPSBv
cHRpb25hbE9yaWdpbk9iamVjdC0+Z2V0TnVtYmVyPGZsb2F0PigieSJfcykpKQorICAgICAgICBp
ZiAoISh5ID0gb3JpZ2luLT5nZXREb3VibGUoInkiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJU
aGUgJ3knIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAgICAgfQogCi0g
ICAgT3B0aW9uYWw8ZmxvYXQ+IHdpZHRoOwotICAgIE9wdGlvbmFsPGZsb2F0PiBoZWlnaHQ7Ci0g
ICAgaWYgKG9wdGlvbmFsU2l6ZU9iamVjdCkgewotICAgICAgICBpZiAoISh3aWR0aCA9IG9wdGlv
bmFsU2l6ZU9iamVjdC0+Z2V0TnVtYmVyPGZsb2F0Pigid2lkdGgiX3MpKSkKKyAgICBPcHRpb25h
bDxkb3VibGU+IHdpZHRoOworICAgIE9wdGlvbmFsPGRvdWJsZT4gaGVpZ2h0OworICAgIGlmIChz
aXplKSB7CisgICAgICAgIGlmICghKHdpZHRoID0gc2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcykp
KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAnd2lkdGgnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5k
IG9yIGludmFsaWQuIik7CiAKLSAgICAgICAgaWYgKCEoaGVpZ2h0ID0gb3B0aW9uYWxTaXplT2Jq
ZWN0LT5nZXROdW1iZXI8ZmxvYXQ+KCJoZWlnaHQiX3MpKSkKKyAgICAgICAgaWYgKCEoaGVpZ2h0
ID0gc2l6ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUg
J2hlaWdodCcgcGFyYW1ldGVyIHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAogICAgICAg
ICBpZiAod2lkdGgudmFsdWUoKSA8IDApCkBAIC00MjgsMjYgKzQyNywxOCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0
cmluZyYgaGFuZGxlLAogICAgIH0pOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4gcGFnZUxvYWRTdHJhdGVneUZy
b21TdHJpbmdQYXJhbWV0ZXIoY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lT
dHJpbmcpCitzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRT
dHJhdGVneSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneSkKIHsKLSAgICBpZiAoIW9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZykK
LSAgICAgICAgcmV0dXJuIGRlZmF1bHRQYWdlTG9hZFN0cmF0ZWd5OwotCi0gICAgYXV0byBwYXJz
ZWRQYWdlTG9hZFN0cmF0ZWd5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQYWdlTG9hZFN0cmF0ZWd5Pigqb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsK
LSAgICBpZiAoIXBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgcmV0dXJuIHBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3k7CisgICAgcmV0dXJuIG9w
dGlvbmFsUGFnZUxvYWRTdHJhdGVneS52YWx1ZU9yKGRlZmF1bHRQYWdlTG9hZFN0cmF0ZWd5KTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5
U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1l
SGFuZGxlJiBvcHRpb25hbEZyYW1lSGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFn
ZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRs
ZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdl
TG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lT
dHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBw
YXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdl
TG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRp
b25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlv
bmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIC8vIElmIHBh
Z2UgaXMgbG9hZGluZyBhbmQgdGhlcmUncyBhbiBhY3RpdmUgSmF2YVNjcmlwdCBkaWFsb2cgaXMg
cHJvYmFibHkgYmVjYXVzZSB0aGUKQEAgLTQ1NSwyMiArNDQ2LDIyIEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29uCiAgICAgLy8gbG9hZCB3aWxsIG5vdCBmaW5pc2ggdW50aWwgdGhlIGRpYWxvZyBp
cyBkaXNtaXNzZWQuIEluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIHRpbWVvdXQsCiAgICAgLy8g
d2UgcmV0dXJuIHdpdGhvdXQgd2FpdGluZyBzaW5jZSB3ZSBrbm93IGl0IHdpbGwgdGltZW91dCBm
b3Igc3VyZS4gV2Ugd2FudCB0byBjaGVjawogICAgIC8vIGFyZ3VtZW50cyBmaXJzdCwgdGhvdWdo
LgotICAgIGJvb2wgc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRT
dHJhdGVneS52YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VM
b2FkU3RyYXRlZ3k6Ok5vcm1hbAorICAgIGJvb2wgc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3Rl
ZEFsZXJ0ID0gcGFnZUxvYWRTdHJhdGVneSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQYWdlTG9hZFN0cmF0ZWd5OjpOb3JtYWwKICAgICAgICAgJiYgcGFnZS0+cGFnZUxvYWRT
dGF0ZSgpLmlzTG9hZGluZygpICYmIG1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9n
T25QYWdlKCp0aGlzLCAqcGFnZSk7CiAKLSAgICBpZiAob3B0aW9uYWxGcmFtZUhhbmRsZSAmJiAh
b3B0aW9uYWxGcmFtZUhhbmRsZS0+aXNFbXB0eSgpKSB7CisgICAgaWYgKCFvcHRpb25hbEZyYW1l
SGFuZGxlLmlzRW1wdHkoKSkgewogICAgICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsK
LSAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZSgqb3B0aW9uYWxGcmFt
ZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1l
SURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgICAg
IGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAgICAgICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0g
cGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKGZyYW1lSUQudmFsdWUoKSk7CiAgICAgICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFt
ZU5vdEZvdW5kKTsKICAgICAgICAgaWYgKCFzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxl
cnQpCi0gICAgICAgICAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKCpmcmFt
ZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2Fs
bGJhY2spKTsKKyAgICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUo
KmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhw
ZWN0ZWRBbGVydCkKLSAgICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFn
ZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1v
dmUoY2FsbGJhY2spKTsKKyAgICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRB
bGVydCkgewpAQCAtNTI3LDcgKzUxOCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Ondh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoV2ViRnJhbWVQcm94eSYgZnJhCiAKIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNh
bGxiYWNrc1dpdGhUaW1lb3V0KEhhc2hNYXA8V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVmUHRy
PEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0g
ICAgSW5zcGVjdG9yOjpFcnJvclN0cmluZyB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURF
RklORURfRVJST1JfTkFNRShUaW1lb3V0KTsKKyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklO
R19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6
IGNvcHlUb1ZlY3RvcihtYXAua2V5cygpKSkgewogICAgICAgICBhdXRvIHBhZ2UgPSBXZWJQcm9j
ZXNzUHJveHk6OndlYlBhZ2UoaWQpOwogICAgICAgICBhdXRvIGNhbGxiYWNrID0gbWFwLnRha2Uo
aWQpOwpAQCAtNTQ5LDcgKzU0MCw3IEBAIHN0YXRpYyBXZWJQYWdlUHJveHkqIGZpbmRQYWdlRm9y
RnJhbWVJRChjb25zdCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIEZyYW1lCiAKIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OnJlc3BvbmRUb1BlbmRpbmdGcmFtZU5hdmlnYXRpb25DYWxs
YmFja3NXaXRoVGltZW91dChIYXNoTWFwPEZyYW1lSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rv
cjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVj
dG9yOjpFcnJvclN0cmluZyB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJS
T1JfTkFNRShUaW1lb3V0KTsKKyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJF
REVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1Zl
Y3RvcihtYXAua2V5cygpKSkgewogICAgICAgICBhdXRvKiBwYWdlID0gZmluZFBhZ2VGb3JGcmFt
ZUlEKCptX3Byb2Nlc3NQb29sLCBpZCk7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFr
ZShpZCk7CkBAIC01NjgsNyArNTU5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bG9h
ZFRpbWVyRmlyZWQoKQogICAgIHJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNr
c1dpdGhUaW1lb3V0KG1fcGVuZGluZ0VhZ2VyTmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2tzUGVyUGFnZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1heGltaXpl
V2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5k
bGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdD
b250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8TWF4aW1pemVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIGF1dG8qIHBhZ2UgPSB3
ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBh
Z2UpCkBAIC01ODQsNyArNTc1LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1p
emVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW4KICAgICB9KTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aGlkZVdpbmRvd09mQnJvd3NpbmdDb250
ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8SGlkZVdpbmRvd09m
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFj
aykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJv
d3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC02OTMsNjQgKzY4NCw1NiBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFeGl0RnVsbFNjcmVlbkZvclBhZ2UoY29u
c3QgV2ViUGFnZVByb3h5JikKICAgICAgICAgbV93aW5kb3dTdGF0ZVRyYW5zaXRpb25DYWxsYmFj
ayhXaW5kb3dUcmFuc2l0aW9uZWRUb1N0YXRlOjpVbmZ1bGxzY3JlZW4pOwogfQogCi12b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9h
ZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBS
ZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246Om5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBj
b25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFs
PGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBh
dXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRl
cihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJh
dGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlz
IGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVn
eUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBh
dXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6
ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VM
b2FkVGltZW91dDsKIAogICAgIHBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgdXJsKSk7Ci0g
ICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0
ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwg
cGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdvQmFja0luQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91
YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJ
bkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRl
Z3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFj
a0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVBy
b3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3Vu
ZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0
cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICgh
cGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2Fk
U3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFn
ZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRl
Z3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0
ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDog
ZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2UtPmdvQmFjaygpOwotICAgIHdhaXRG
b3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1
ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2
aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2Fk
VGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSog
b3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29Gb3J3YXJk
SW5Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0
ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0Zv
cndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBh
Z2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCi0gICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZy
b21TdHJpbmdQYXJhbWV0ZXIob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBp
ZiAoIXBhZ2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdl
TG9hZFN0cmF0ZWd5JyBpcyBpbnZhbGlkLiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9
IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tUGFyYW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0
cmF0ZWd5KSk7CiAgICAgYXV0byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCA/IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0
KSA6IGRlZmF1bHRQYWdlTG9hZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5nb0ZvcndhcmQoKTsKLSAg
ICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRl
Z3kudmFsdWUoKSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBw
YWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91Ymxl
KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3Np
bmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYgaGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0
aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAg
ICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFt
ZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRT
dHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3kn
IGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJh
dGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAg
ICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25k
czo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBh
Z2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2UtPnJlbG9hZCh7IH0pOwotICAgIHdhaXRGb3JOYXZp
Z2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBw
YWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91
dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpu
YXZpZ2F0aW9uT2NjdXJyZWRGb3JGcmFtZShjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSkKQEAg
LTkyMiwzNSArOTA1LDI3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZVJ1bk9w
ZW5QYW5lbChjb25zdCBXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdlCiAgICAgbV9kb21haW5O
b3RpZmllci0+ZmlsZUNob29zZXJEaXNtaXNzZWQoYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEpTT046
OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2Fs
bGJhY2tBcmd1bWVudCwgY29uc3QgZG91YmxlKiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVm
PEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dz
aW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNP
Tjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENh
bGxiYWNrQXJndW1lbnQsIE9wdGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxF
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdl
YlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRI
YW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFs
c2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1l
SGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZv
dW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxl
LCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8
U3RyaW5nPiBhcmd1bWVudHNWZWN0b3I7Ci0gICAgYXJndW1lbnRzVmVjdG9yLnJlc2VydmVDYXBh
Y2l0eShhcmd1bWVudHMubGVuZ3RoKCkpOworICAgIGFyZ3VtZW50c1ZlY3Rvci5yZXNlcnZlQ2Fw
YWNpdHkoYXJndW1lbnRzLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDog
YXJndW1lbnRzKSB7Ci0gICAgICAgIFN0cmluZyBhcmd1bWVudFN0cmluZzsKLSAgICAgICAgYXJn
dW1lbnQtPmFzU3RyaW5nKGFyZ3VtZW50U3RyaW5nKTsKLSAgICAgICAgYXJndW1lbnRzVmVjdG9y
LnVuY2hlY2tlZEFwcGVuZChhcmd1bWVudFN0cmluZyk7Ci0gICAgfQotCi0gICAgYm9vbCBleHBl
Y3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50ID0gb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxs
YmFja0FyZ3VtZW50ID8gKm9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA6
IGZhbHNlOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gY2FsbGJhY2tUaW1lb3V0OwotICAgIGlmIChv
cHRpb25hbENhbGxiYWNrVGltZW91dCkKLSAgICAgICAgY2FsbGJhY2tUaW1lb3V0ID0gKm9wdGlv
bmFsQ2FsbGJhY2tUaW1lb3V0OworICAgIGZvciAoY29uc3QgYXV0byYgYXJndW1lbnQgOiBhcmd1
bWVudHMuZ2V0KCkpCisgICAgICAgIGFyZ3VtZW50c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoYXJn
dW1lbnQtPmFzU3RyaW5nKCkpOwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1fbmV4dEV2
YWx1YXRlSmF2YVNjcmlwdENhbGxiYWNrSUQrKzsKICAgICBtX2V2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uQ2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAg
ICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQs
IGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1l
bnQsIGNhbGxiYWNrVGltZW91dCwgY2FsbGJhY2tJRCksIDApOworICAgIHBhZ2UtPnByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFT
Y3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3Vt
ZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudC52YWx1ZU9yKGZhbHNl
KSwgV1RGTW92ZShjYWxsYmFja1RpbWVvdXQpLCBjYWxsYmFja0lEKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2
NF90IGNhbGxiYWNrSUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9y
VHlwZSkKQEAgLTk2NSw3ICs5NDAsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRF
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjbwogICAgICAg
ICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MocmVzdWx0KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50
KiBvcHRpb25hbE9yZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJh
Y2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRG
cmFtZUhhbmRsZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBPcHRpb25hbDxp
bnQ+JiYgb3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsTmFtZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgb3B0aW9uYWxOb2Rl
SGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykK
IHsKICAgICBpZiAoIW9wdGlvbmFsT3JkaW5hbCAmJiAhb3B0aW9uYWxOYW1lICYmICFvcHRpb25h
bE5vZGVIYW5kbGUpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJDb21tYW5kIG11c3Qgc3BlY2lmeSBhIGNoaWxk
IGZyYW1lIGJ5IG9yZGluYWwsIG5hbWUsIG9yIGVsZW1lbnQgaGFuZGxlLiIpOwpAQCAtOTc1LDcg
Kzk1MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFu
ZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RG
b3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0
aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwg
ZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShm
cmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBA
IC05ODgsMTMgKzk2MywxMyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hp
bGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgICAgICBjYWxs
YmFjay0+c2VuZFN1Y2Nlc3MoaGFuZGxlRm9yV2ViRnJhbWVJRChmcmFtZUlEKSk7CiAgICAgfTsK
IAotICAgIGlmIChvcHRpb25hbE5vZGVIYW5kbGUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6
UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJ
RCwgKm9wdGlvbmFsTm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBpZiAoISFvcHRpb25hbE5vZGVIYW5kbGUpIHsKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVz
b2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwg
b3B0aW9uYWxOb2RlSGFuZGxlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsTmFtZSkgewotICAgICAgICBwYWdl
LT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBm
cmFtZUlELCAqb3B0aW9uYWxOYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IGlmICghIW9wdGlvbmFsTmFtZSkgeworICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hp
bGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBvcHRpb25hbE5hbWUp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTEwMDYsNyArOTgxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNo
aWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBh
cmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25z
dCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJh
Y2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50
RnJhbWVIYW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29s
dmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUp
OwogICAgIGlmICghcGFnZSkKQEAgLTEwMjksMTYgKzEwMDQsMjIgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXgKICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlUGFyZW50RnJhbWUocGFnZS0+d2Vi
UGFnZUlEKCksIGZyYW1lSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXN0
YXRpYyBPcHRpb25hbDxDb29yZGluYXRlU3lzdGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0
ZVN5c3RlbShjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcpCitzdGF0aWMgT3B0
aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0o
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKQogewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJQYWdlIikK
KyAgICBzd2l0Y2ggKGNvb3JkaW5hdGVTeXN0ZW0pIHsKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW06OlBhZ2U6CiAgICAgICAgIHJldHVy
biBDb29yZGluYXRlU3lzdGVtOjpQYWdlOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5n
ID09ICJMYXlvdXRWaWV3cG9ydCIpCisKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXdwb3J0OgorICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbTo6TGF5b3V0Vmlld3BvcnQ6
CiAgICAgICAgIHJldHVybiBDb29yZGluYXRlU3lzdGVtOjpMYXlvdXRWaWV3cG9ydDsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
fQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbElu
dG9WaWV3SWZOZWVkZWQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZywgUmVm
PENvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
IGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2Rl
SGFuZGxlJiBub2RlSGFuZGxlLCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1Zp
ZXdJZk5lZWRlZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtVmFsdWUsIFJlZjxDb21wdXRlRWxlbWVudExheW91dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94
eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEw
NDksNyArMTAzMCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50
TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuCiAgICAgaWYgKGZyYW1lTm90
Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90
Rm91bmQpOwogCi0gICAgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3Rl
bSA9IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1TdHJp
bmcpOworICAgIE9wdGlvbmFsPENvb3JkaW5hdGVTeXN0ZW0+IGNvb3JkaW5hdGVTeXN0ZW0gPSBw
cm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShjb29yZGluYXRlU3lzdGVtVmFsdWUpOwog
ICAgIGlmICghY29vcmRpbmF0ZVN5c3RlbSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J2Nvb3JkaW5hdGVTeXN0ZW0nIGlzIGludmFsaWQuIik7CiAKQEAgLTEwOTEsNyArMTA3Miw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6Q29tcHV0ZUVsZW1l
bnRMYXlvdXQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIHNjcm9sbElu
dG9WaWV3SWZOZWVkZWQsIGNvb3JkaW5hdGVTeXN0ZW0udmFsdWUoKSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0
aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3Ry
aW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0
aW9uRWxlbWVudENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2Rl
SGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewog
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0Nv
bnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTExMTQsNyArMTA5NSw3IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OnNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2VsZWN0T3B0aW9uRWxlbWVu
dChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkKK0luc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8Ym9vbD4gV2ViQXV0b21hdGlvblNlc3Npb246Omlz
U2hvd2luZ0phdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAg
ICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTEyNCwxMCArMTEw
NSwxMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppc1Nob3dpbmdKYXZhU2NyaXB0RGlh
bG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycgogICAgIGlmICghcGFnZSkKICAgICAgICAg
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICAq
cmVzdWx0ID0gbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMs
ICpwYWdlKTsKKyAgICByZXR1cm4gbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dP
blBhZ2UoKnRoaXMsICpwYWdlKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlz
bWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21p
c3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsK
ICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTQxLDkgKzEx
MjIsMTEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcKICAgICAgICAgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihOb0phdmFTY3JpcHREaWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmRp
c21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVu
dEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEph
dmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJU
KG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTE1Nyw5ICsxMTQwLDExIEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAogICAgIG1fY2xpZW50LT5hY2NlcHRDdXJyZW50
SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3Jp
cHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBTdHJpbmcqIHRleHQpCitJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VP
ZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewog
ICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNzIsMTAgKzEx
NTcsMTAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFT
Y3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmkKICAgICBpZiAoIW1fY2xpZW50LT5pc1No
b3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSkpCiAgICAgICAgIFNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAotICAgICp0
ZXh0ID0gbV9jbGllbnQtPm1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0
aGlzLCAqcGFnZSk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5tZXNzYWdlT2ZDdXJyZW50SmF2YVNj
cmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IFN0cmluZyYgcHJvbXB0VmFsdWUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JD
dXJyZW50SmF2YVNjcmlwdFByb21wdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBwcm9tcHRWYWx1ZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICgh
bV9jbGllbnQpCkBAIC0xMjA3LDE5ICsxMTkyLDIxIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJy
CiAgICAgfQogCiAgICAgbV9jbGllbnQtPnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0
UHJvbXB0T25QYWdlKCp0aGlzLCAqcGFnZSwgcHJvbXB0VmFsdWUpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZp
bGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6
QXJyYXkqIGZpbGVDb250ZW50cykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2Fk
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgZmlsZW5hbWVz
LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgZmlsZUNvbnRlbnRzKQogewogICAgIFZlY3RvcjxTdHJp
bmc+IG5ld0ZpbGVMaXN0OwotICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZmlsZW5hbWVzLmxlbmd0aCgpKTsKKyAgICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGZpbGVuYW1lcy0+bGVuZ3RoKCkpOwogCi0gICAgaWYgKGZpbGVDb250ZW50cyAmJiBmaWxl
Q29udGVudHMtPmxlbmd0aCgpICE9IGZpbGVuYW1lcy5sZW5ndGgoKSkKKyAgICBpZiAoZmlsZUNv
bnRlbnRzICYmIGZpbGVDb250ZW50cy0+bGVuZ3RoKCkgIT0gZmlsZW5hbWVzLT5sZW5ndGgoKSkK
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRl
cm5hbEVycm9yLCAiVGhlIHBhcmFtZXRlcnMgJ2ZpbGVuYW1lcycgYW5kICdmaWxlQ29udGVudHMn
IG11c3QgaGF2ZSBlcXVhbCBsZW5ndGguIik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpbGVuYW1lcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZTsKLSAg
ICAgICAgaWYgKCFmaWxlbmFtZXMuZ2V0KGkpLT5hc1N0cmluZyhmaWxlbmFtZSkpCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
YXV0byBmaWxlbmFtZSA9IGZpbGVuYW1lcy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBp
ZiAoIWZpbGVuYW1lKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBj
b250YWlucyBhIG5vbi1zdHJpbmcgdmFsdWUuIik7CiAKICAgICAgICAgaWYgKCFmaWxlQ29udGVu
dHMpIHsKQEAgLTEyMjcsOCArMTIxNCw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNl
dEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFN0cmluZyBmaWxlRGF0YTsK
LSAgICAgICAgaWYgKCFmaWxlQ29udGVudHMtPmdldChpKS0+YXNTdHJpbmcoZmlsZURhdGEpKQor
ICAgICAgICBhdXRvIGZpbGVEYXRhID0gZmlsZUNvbnRlbnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghZmlsZURhdGEpCiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdm
aWxlQ29udGVudHMnIGNvbnRhaW5zIGEgbm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBP
cHRpb25hbDxTdHJpbmc+IGxvY2FsRmlsZVBhdGggPSBwbGF0Zm9ybUdlbmVyYXRlTG9jYWxGaWxl
UGF0aEZvclJlbW90ZUZpbGUoZmlsZW5hbWUsIGZpbGVEYXRhKTsKQEAgLTEyMzksOSArMTIyNiwx
MSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVw
bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAgIH0KIAogICAgIG1fZmlsZXNUb1NlbGVj
dEZvckZpbGVVcGxvYWQuc3dhcChuZXdGaWxlTGlzdCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhh
bmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5h
bWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4mJiBjYWxsYmFjaykK
K3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4m
JiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNh
bGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRs
ZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEyNTMsMTAgKzEy
NDIsMTAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVV
cGxvYWQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnQKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBu
ZXdGaWxlTGlzdDsKLSAgICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVu
YW1lcy5sZW5ndGgoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVu
Z3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAgICAgIGlmICghZmls
ZW5hbWVzLmdldChpKS0+YXNTdHJpbmcoZmlsZW5hbWUpKQorICAgIG5ld0ZpbGVMaXN0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLT5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmaWxlbmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVuYW1lcy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVu
YW1lKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXIgJ2ZpbGVuYW1lcycgY29udGFpbnMg
YSBub24tc3RyaW5nIHZhbHVlLiIpOwogCiAgICAgICAgIG5ld0ZpbGVMaXN0LmFwcGVuZChmaWxl
bmFtZSk7CkBAIC0xMjk5LDcgKzEyODgsNyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29va2llPj4gYnVpbGRBcnJheUZvcgogICAg
IHJldHVybiBjb29raWVzOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxD
b29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29v
a2llc0NhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tpZXND
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdl
UHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBA
IC0xMzE3LDcgKzEzMDYsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29r
aWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZQogICAgIHBhZ2UtPnBy
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OkdldENvb2tpZXNGb3JGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNh
bGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2lu
Z2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVDb29raWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250
ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMzQ3LDcgKzEzMzYsNyBAQCBzdGF0aWMg
U3RyaW5nIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoU3RyaW5nIGRvbWFpbikKICAg
ICByZXR1cm4gZG9tYWluOwogfQogICAgIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRk
U2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBK
U09OOjpPYmplY3QmIGNvb2tpZU9iamVjdCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVj
dCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBh
Z2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5k
bGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEzNTgsMTQgKzEzNDcsMTYgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLAogCiAgICAgV2ViQ29yZTo6Q29va2llIGNvb2tpZTsKIAotICAgIGlmICghY29v
a2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcywgY29va2llLm5hbWUpKQorICAgIGNvb2tpZS5u
YW1lID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY29va2ll
Lm5hbWUpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICduYW1lJyB3YXMgbm90IGZvdW5k
LiIpOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2ll
LnZhbHVlKSkKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZygidmFs
dWUiX3MpOworICAgIGlmICghY29va2llLnZhbHVlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAndmFsdWUnIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBTdHJpbmcgZG9tYWluOwotICAg
IGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygiZG9tYWluIl9zLCBkb21haW4pKQorICAgIGF1
dG8gZG9tYWluID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoImRvbWFpbiJfcyk7CisgICAgaWYg
KCFkb21haW4pCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdkb21haW4nIHdhcyBub3Qg
Zm91bmQuIik7CiAKICAgICAvLyBJbmhlcml0IHRoZSBkb21haW4vaG9zdCBmcm9tIHRoZSBtYWlu
IGZyYW1lJ3MgVVJMIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNldC4KQEAgLTEzNzQsMzEgKzEz
NjUsNDEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogICAgIGVsc2UKICAgICAgICAgY29va2ll
LmRvbWFpbiA9IGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoZG9tYWluKTsKIAotICAg
IGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKQorICAg
IGNvb2tpZS5wYXRoID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoInBhdGgiX3MpOworICAgIGlm
ICghY29va2llLnBhdGgpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYXRoJyB3YXMg
bm90IGZvdW5kLiIpOwogCi0gICAgZG91YmxlIGV4cGlyZXM7Ci0gICAgaWYgKCFjb29raWVPYmpl
Y3QuZ2V0RG91YmxlKCJleHBpcmVzIl9zLCBleHBpcmVzKSkKKyAgICBhdXRvIGV4cGlyZXMgPSBj
b29raWVPYmplY3QtPmdldERvdWJsZSgiZXhwaXJlcyJfcyk7CisgICAgaWYgKCFleHBpcmVzKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNz
aW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnZXhwaXJlcycgd2FzIG5vdCBmb3VuZC4iKTsK
IAotICAgIGNvb2tpZS5leHBpcmVzID0gZXhwaXJlcyAqIDEwMDAuMDsKKyAgICBjb29raWUuZXhw
aXJlcyA9ICpleHBpcmVzICogMTAwMC4wOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9v
bGVhbigic2VjdXJlIl9zLCBjb29raWUuc2VjdXJlKSkKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tp
ZU9iamVjdC0+Z2V0Qm9vbGVhbigic2VjdXJlIl9zKTsKKyAgICBpZiAoIXNlY3VyZSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1Bh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3NlY3VyZScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAg
IGlmICghY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9u
KSkKKyAgICBjb29raWUuc2VjdXJlID0gKnNlY3VyZTsKKworICAgIGF1dG8gc2Vzc2lvbiA9IGNv
b2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigic2Vzc2lvbiJfcyk7CisgICAgaWYgKCFzZXNzaW9uKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNz
aW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnc2Vzc2lvbicgd2FzIG5vdCBmb3VuZC4iKTsK
IAotICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUu
aHR0cE9ubHkpKQorICAgIGNvb2tpZS5zZXNzaW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIGh0
dHBPbmx5ID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKCJodHRwT25seSJfcyk7CisgICAgaWYg
KCFodHRwT25seSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMg
bm90IGZvdW5kLiIpOwogCisgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCiAgICAg
V2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgY29va2llTWFuYWdlci0+c2V0
Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0s
IFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUp
CitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewog
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0Nv
bnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTE0MTEsOSArMTQxMiwxMSBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaQogCiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVN
YW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7CiAgICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Np
b25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpCitJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Z2V0U2Vzc2lvblBlcm1pc3Npb25zKCkKIHsKICAgICBhdXRvIHBlcm1pc3Npb25zT2JqZWN0QXJy
YXkgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Np
b25QZXJtaXNzaW9uRGF0YT46OmNyZWF0ZSgpOwogICAgIGF1dG8gZ2V0VXNlck1lZGlhUGVybWlz
c2lvbk9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJt
aXNzaW9uRGF0YTo6Y3JlYXRlKCkKQEAgLTE0MjIsMzQgKzE0MjUsMzYgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRy
PEpTT046OkFycmEKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIHBlcm1pc3Npb25zT2JqZWN0
QXJyYXktPmFkZEl0ZW0oV1RGTW92ZShnZXRVc2VyTWVkaWFQZXJtaXNzaW9uT2JqZWN0KSk7Ci0g
ICAgb3V0X3Blcm1pc3Npb25zID0gV1RGTW92ZShwZXJtaXNzaW9uc09iamVjdEFycmF5KTsKKyAg
ICByZXR1cm4gV1RGTW92ZShwZXJtaXNzaW9uc09iamVjdEFycmF5KTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIHBlcm1pc3Npb25zKQorSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vzc2lv
blBlcm1pc3Npb25zKFJlZjxKU09OOjpBcnJheT4mJiBwZXJtaXNzaW9ucykKIHsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBwZXJtaXNzaW9ucy5iZWdpbigpOyBpdCAhPSBwZXJtaXNzaW9ucy5lbmQoKTsg
KytpdCkgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwZXJtaXNzaW9uOwotICAgICAg
ICBpZiAoIWl0LT5nZXQoKS0+YXNPYmplY3QocGVybWlzc2lvbikpCisgICAgZm9yIChhdXRvIGl0
ID0gcGVybWlzc2lvbnMtPmJlZ2luKCk7IGl0ICE9IHBlcm1pc3Npb25zLT5lbmQoKTsgKytpdCkg
eworICAgICAgICBhdXRvIHBlcm1pc3Npb24gPSBpdC0+Z2V0KCkuYXNPYmplY3QoKTsKKyAgICAg
ICAgaWYgKCFwZXJtaXNzaW9uKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVy
bWlzc2lvbnMnIGlzIGludmFsaWQuIik7CiAKLSAgICAgICAgU3RyaW5nIHBlcm1pc3Npb25OYW1l
OwotICAgICAgICBpZiAoIXBlcm1pc3Npb24tPmdldFN0cmluZygicGVybWlzc2lvbiJfcywgcGVy
bWlzc2lvbk5hbWUpKQorICAgICAgICBhdXRvIHBlcm1pc3Npb25OYW1lID0gcGVybWlzc2lvbi0+
Z2V0U3RyaW5nKCJwZXJtaXNzaW9uIl9zKTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZSkK
ICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Blcm1pc3Npb24nIGlzIG1pc3Npbmcg
b3IgaW52YWxpZC4iKTsKIAogICAgICAgICBhdXRvIHBhcnNlZFBlcm1pc3Npb25OYW1lID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbj4o
cGVybWlzc2lvbk5hbWUpOwogICAgICAgICBpZiAoIXBhcnNlZFBlcm1pc3Npb25OYW1lKQogICAg
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVybWlzc2lvbicgaGFzIGFuIHVua25vd24g
dmFsdWUuIik7CiAKLSAgICAgICAgYm9vbCBwZXJtaXNzaW9uVmFsdWU7Ci0gICAgICAgIGlmICgh
cGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigidmFsdWUiX3MsIHBlcm1pc3Npb25WYWx1ZSkpCisgICAg
ICAgIGF1dG8gcGVybWlzc2lvblZhbHVlID0gcGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigidmFsdWUi
X3MpOworICAgICAgICBpZiAoIXBlcm1pc3Npb25WYWx1ZSkKICAgICAgICAgICAgIFNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRo
ZSBwYXJhbWV0ZXIgJ3ZhbHVlJyBpcyBtaXNzaW5nIG9yIGludmFsaWQuIik7CiAKICAgICAgICAg
c3dpdGNoIChwYXJzZWRQZXJtaXNzaW9uTmFtZS52YWx1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb246OkdldFVzZXJN
ZWRpYToKLSAgICAgICAgICAgIG1fcGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9IHBlcm1pc3Np
b25WYWx1ZTsKKyAgICAgICAgICAgIG1fcGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9ICpwZXJt
aXNzaW9uVmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKIGJvb2wgV2ViQXV0b21hdGlvblNlc3Npb246OnNob3VsZEFsbG93
R2V0VXNlck1lZGlhRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKSBjb25zdApAQCAtMTQ5NCw3
ICsxNDk5LDcgQEAgU2ltdWxhdGVkSW5wdXRTb3VyY2UqIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpp
bnB1dFNvdXJjZUZvclR5cGUoU2ltdWxhdGVkSW5wdXRTb3UKIH0KIAogLy8gTUFSSzogU2ltdWxh
dGVkSW5wdXREaXNwYXRjaGVyOjpDbGllbnQgQVBJCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
Ojp2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwg
T3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG5vZGVIYW5k
bGUsIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8
QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6dmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQ
YWdlUHJveHkmIHBhZ2UsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwg
RnVuY3Rpb248dm9pZChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9t
YXRpb25Db21tYW5kRXJyb3I+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBXVEY6OkNv
bXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgV2ViQ29yZTo6SW50UmVjdCwg
T3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBib29sKT4gZGlkQ29tcHV0ZUVsZW1lbnRMYXlv
dXRIYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKE9wdGlvbmFsPFN0cmluZz4gZXJyb3JUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25h
bDxXZWJDb3JlOjpJbnRQb2ludD4gaW5WaWV3Q2VudGVyUG9pbnQsIGJvb2wpIG11dGFibGUgewog
ICAgICAgICBpZiAoZXJyb3JUeXBlKSB7CkBAIC0xNjM1LDcgKzE2NDAsNyBAQCBzdGF0aWMgV2Vi
RXZlbnQ6Ok1vZGlmaWVyIHByb3RvY29sTW9kaWZpZXJUb1dlYkV2ZW50TW9kaWZpZXIoSW5zcGVj
dG9yOjpQcm90b2NvbAogfQogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJB
Q1RJT05TKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFj
dGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQ
b3NpdGlvbk9iamVjdCwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3Ry
aW5nJiBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYga2V5TW9kaWZp
ZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFj
aykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgaGFuZGxlLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlcXVlc3RlZFBvc2l0aW9uLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbiBtb3VzZUludGVyYWN0
aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1v
dXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICNpZiAhRU5BQkxFKFdFQkRS
SVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMTY0NCw0OCArMTY0OSw0NCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhh
bmRsZSwgY29uc3QgSgogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgZmxvYXQgeDsKLSAgICBpZiAo
IXJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LmdldERvdWJsZSgieCJfcywgeCkpCisgICAgYXV0byB4
ID0gcmVxdWVzdGVkUG9zaXRpb24tPmdldERvdWJsZSgieCJfcyk7CisgICAgaWYgKCF4KQogICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5n
UGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAneCcgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGZs
b2F0IHk7Ci0gICAgaWYgKCFyZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoInkiX3Ms
IHkpKQorICAgIGF1dG8gZmxvYXRYID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCp4KTsKKworICAgIGF1
dG8geSA9IHJlcXVlc3RlZFBvc2l0aW9uLT5nZXREb3VibGUoInkiX3MpOworICAgIGlmICgheSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlz
c2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3knIHdhcyBub3QgZm91bmQuIik7CiAKKyAg
ICBhdXRvIGZsb2F0WSA9IHN0YXRpY19jYXN0PGZsb2F0PigqeSk7CisKICAgICBPcHRpb25TZXQ8
V2ViRXZlbnQ6Ok1vZGlmaWVyPiBrZXlNb2RpZmllcnM7Ci0gICAgZm9yIChhdXRvIGl0ID0ga2V5
TW9kaWZpZXJTdHJpbmdzLmJlZ2luKCk7IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy5lbmQoKTsg
KytpdCkgewotICAgICAgICBTdHJpbmcgbW9kaWZpZXJTdHJpbmc7Ci0gICAgICAgIGlmICghaXQt
PmdldCgpLT5hc1N0cmluZyhtb2RpZmllclN0cmluZykpCisgICAgZm9yIChhdXRvIGl0ID0ga2V5
TW9kaWZpZXJTdHJpbmdzLT5iZWdpbigpOyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MtPmVuZCgp
OyArK2l0KSB7CisgICAgICAgIGF1dG8gbW9kaWZpZXJTdHJpbmcgPSBpdC0+Z2V0KCkuYXNTdHJp
bmcoKTsKKyAgICAgICAgaWYgKCFtb2RpZmllclN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJU
aGUgcGFyYW1ldGVyICdtb2RpZmllcnMnIGlzIGludmFsaWQuIik7CiAKICAgICAgICAgYXV0byBw
YXJzZWRNb2RpZmllciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
S2V5TW9kaWZpZXI+KG1vZGlmaWVyU3RyaW5nKTsKICAgICAgICAgaWYgKCFwYXJzZWRNb2RpZmll
cikKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJBIG1vZGlmaWVyIGluIHRoZSAnbW9kaWZpZXJzJyBhcnJh
eSBpcyBpbnZhbGlkLiIpOworCiAgICAgICAgIGtleU1vZGlmaWVycy5hZGQocHJvdG9jb2xNb2Rp
ZmllclRvV2ViRXZlbnRNb2RpZmllcihwYXJzZWRNb2RpZmllci52YWx1ZSgpKSk7CiAgICAgfQog
Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9
IG1ha2VSZWYoKnBhZ2UpLCB4LCB5LCBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBtb3VzZUJ1dHRv
blN0cmluZywga2V5TW9kaWZpZXJzXShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpIG11
dGFibGUgeworICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgZmxvYXRYLCBmbG9hdFksIG1vdXNlSW50ZXJhY3Rpb24s
IG1vdXNlQnV0dG9uLCBrZXlNb2RpZmllcnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFt
ZSkgbXV0YWJsZSB7CisgICAgICAgIGZsb2F0WCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIGZs
b2F0WCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0aCgpKTsKKyAgICAgICAgZmxvYXRZID0gc3Rk
OjptaW4oc3RkOjptYXgoMC4wZiwgZmxvYXRZKSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgp
KTsKIAotICAgICAgICB4ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1l
LnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkp
LCB3aW5kb3dGcmFtZS5zaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBXZWJDb3JlOjpJbnRQb2lu
dCBsb2NhdGlvbkluVmlld3BvcnQgPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0WCksIHN0YXRpY19jYXN0PGludD4oZmxvYXRZKSk7CiAKLSAgICAgICAgV2ViQ29yZTo6
SW50UG9pbnQgbG9jYXRpb25JblZpZXdwb3J0ID0gV2ViQ29yZTo6SW50UG9pbnQoc3RhdGljX2Nh
c3Q8aW50Pih4KSwgc3RhdGljX2Nhc3Q8aW50Pih5KSk7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRJ
bnRlcmFjdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91
c2VJbnRlcmFjdGlvbj4obW91c2VJbnRlcmFjdGlvblN0cmluZyk7Ci0gICAgICAgIGlmICghcGFy
c2VkSW50ZXJhY3Rpb24pCi0gICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJh
Y3Rpb24nIGlzIGludmFsaWQuIik7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRCdXR0b24gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihtb3VzZUJ1
dHRvblN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VkQnV0dG9uKQotICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRl
ciwgIlRoZSBwYXJhbWV0ZXIgJ2J1dHRvbicgaXMgaW52YWxpZC4iKTsKLQotICAgICAgICBhdXRv
IG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCB4LCB5XShP
cHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPiBlcnJvcikgeworICAgICAgICBhdXRvIG1v
dXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3Rl
Y3RlZFRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCBmbG9hdFgsIGZs
b2F0WV0oT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKICAgICAgICAg
ICAgIGlmIChlcnJvcikKICAgICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJy
b3IudmFsdWUoKS50b1Byb3RvY29sU3RyaW5nKCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2V0WCh4KQot
ICAgICAgICAgICAgICAgICAgICAuc2V0WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgIC5zZXRYKGZsb2F0WCkKKyAgICAgICAgICAgICAgICAgICAgLnNl
dFkoZmxvYXRZIC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCiAgICAgICAgICAgICAgICAgICAg
IC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTY5NSw3ICsxNjk2
LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24o
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEoKICAgICAgICAgICAgIGNhbGxiYWNrSW5NYXAo
QVVUT01BVElPTl9DT01NQU5EX0VSUk9SX1dJVEhfTkFNRShUaW1lb3V0KSk7CiAgICAgICAgIGNh
bGxiYWNrSW5NYXAgPSBXVEZNb3ZlKG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAotICAg
ICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCBwYXJzZWRJbnRlcmFj
dGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0b24udmFsdWUoKSwgbG9jYXRpb25JblZpZXdwb3J0LCBr
ZXlNb2RpZmllcnMpOworICAgICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihw
YWdlLCBtb3VzZUludGVyYWN0aW9uLCBtb3VzZUJ1dHRvbiwgbG9jYXRpb25JblZpZXdwb3J0LCBr
ZXlNb2RpZmllcnMpOwogCiAgICAgICAgIC8vIElmIHRoZSBldmVudCBsb2NhdGlvbiB3YXMgcHJl
dmlvdXNseSBjbGlwcGVkIGFuZCBkb2VzIG5vdCBoaXQgdGVzdCBhbnl0aGluZyBpbiB0aGUgd2lu
ZG93LCB0aGVuIGl0IHdpbGwgbm90IGJlIHByb2Nlc3NlZC4KICAgICAgICAgLy8gRm9yIGNvbXBh
dGliaWxpdHkgd2l0aCBwcmUtVzNDIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMsIGRvbid0IG1ha2Ug
dGhpcyBhIGhhcmQgZXJyb3I7IGp1c3QgZG8gbm90aGluZyBzaWxlbnRseS4KQEAgLTE3MDgsNyAr
MTcwOSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0
aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRS
SVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
SlNPTjo6QXJyYXkmIGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9u
c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9y
bUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW50
ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCiB7CiAjaWYgIUVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQog
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAg
LTE3MTcsMjggKzE3MTgsMjcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZv
dW5kKTsKIAotICAgIGlmICghaW50ZXJhY3Rpb25zLmxlbmd0aCgpKQorICAgIGlmICghaW50ZXJh
Y3Rpb25zLT5sZW5ndGgoKSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0
aW9ucycgd2FzIG5vdCBmb3VuZCBvciBlbXB0eS4iKTsKIAogICAgIC8vIFZhbGlkYXRlIGFsbCBv
ZiB0aGUgcGFyYW1ldGVycyBiZWZvcmUgcGVyZm9ybWluZyBhbnkgaW50ZXJhY3Rpb25zIHdpdGgg
dGhlIGJyb3dzaW5nIGNvbnRleHQgdW5kZXIgdGVzdC4KICAgICBWZWN0b3I8V1RGOjpGdW5jdGlv
bjx2b2lkKCk+PiBhY3Rpb25zVG9QZXJmb3JtOwotICAgIGFjdGlvbnNUb1BlcmZvcm0ucmVzZXJ2
ZUNhcGFjaXR5KGludGVyYWN0aW9ucy5sZW5ndGgoKSk7CisgICAgYWN0aW9uc1RvUGVyZm9ybS5y
ZXNlcnZlQ2FwYWNpdHkoaW50ZXJhY3Rpb25zLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGludGVyYWN0aW9uIDogaW50ZXJhY3Rpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGludGVyYWN0aW9uT2JqZWN0OwotICAgICAgICBpZiAoIWludGVyYWN0aW9uLT5h
c09iamVjdChpbnRlcmFjdGlvbk9iamVjdCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmFj
dGlvblZhbHVlIDogaW50ZXJhY3Rpb25zLmdldCgpKSB7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rp
b25PYmplY3QgPSBpbnRlcmFjdGlvblZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWlu
dGVyYWN0aW9uT2JqZWN0KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRo
ZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgd2FzIGludmFsaWQuIik7CiAKLSAgICAgICAgU3Ry
aW5nIGludGVyYWN0aW9uVHlwZVN0cmluZzsKLSAgICAgICAgaWYgKCFpbnRlcmFjdGlvbk9iamVj
dC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBpbnRlcmFjdGlvblR5cGVTdHJpbmcpKQorICAgICAgICBh
dXRvIGludGVyYWN0aW9uVHlwZVN0cmluZyA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmco
InR5cGUiX3MpOworICAgICAgICBpZiAoIWludGVyYWN0aW9uVHlwZVN0cmluZykKICAgICAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQ
YXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVy
IGlzIG1pc3NpbmcgdGhlICd0eXBlJyBrZXkuIik7CiAgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25U
eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZElu
dGVyYWN0aW9uVHlwZT4oaW50ZXJhY3Rpb25UeXBlU3RyaW5nKTsKICAgICAgICAgaWYgKCFpbnRl
cmFjdGlvblR5cGUpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdp
bnRlcmFjdGlvbnMnIHBhcmFtZXRlciBoYXMgYW4gaW52YWxpZCAndHlwZScga2V5LiIpOwogCi0g
ICAgICAgIFN0cmluZyB2aXJ0dWFsS2V5U3RyaW5nOwotICAgICAgICBib29sIGZvdW5kVmlydHVh
bEtleSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImtleSJfcywgdmlydHVhbEtleVN0
cmluZyk7Ci0gICAgICAgIGlmIChmb3VuZFZpcnR1YWxLZXkpIHsKKyAgICAgICAgYXV0byB2aXJ0
dWFsS2V5U3RyaW5nID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygia2V5Il9zKTsKKyAg
ICAgICAgaWYgKCEhdmlydHVhbEtleVN0cmluZykgewogICAgICAgICAgICAgT3B0aW9uYWw8Vmly
dHVhbEtleT4gdmlydHVhbEtleSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxw
ZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6VmlydHVhbEtleT4odmlydHVhbEtleVN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIXZp
cnR1YWxLZXkpCiAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAn
aW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaGFzIGFuIGludmFsaWQgJ2tleScgdmFsdWUuIik7CkBA
IC0xNzQ4LDkgKzE3NDgsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5
Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcga2V5U2VxdWVuY2U7Ci0gICAgICAgIGJv
b2wgZm91bmRLZXlTZXF1ZW5jZSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQi
X3MsIGtleVNlcXVlbmNlKTsKLSAgICAgICAgaWYgKGZvdW5kS2V5U2VxdWVuY2UpIHsKKyAgICAg
ICAgYXV0byBrZXlTZXF1ZW5jZSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQi
X3MpOworICAgICAgICBpZiAoISFrZXlTZXF1ZW5jZSkgewogICAgICAgICAgICAgc3dpdGNoIChp
bnRlcmFjdGlvblR5cGUudmFsdWUoKSkgewogICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJlc3M6CiAg
ICAgICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJk
SW50ZXJhY3Rpb25UeXBlOjpLZXlSZWxlYXNlOgpAQCAtMTc2NSw3ICsxNzY0LDcgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghZm91bmRWaXJ0dWFsS2V5ICYmICFmb3VuZEtleVNlcXVlbmNlKQorICAgICAgICBpZiAoIXZp
cnR1YWxLZXlTdHJpbmcgJiYgIWtleVNlcXVlbmNlKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIkFuIGlu
dGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBib3Ro
ICdrZXknIGFuZCAndGV4dCcuIE9uZSBtdXN0IGJlIHByb3ZpZGVkLiIpOwogICAgIH0KIApAQCAt
MTgwOCw3ICsxODA3LDcgQEAgc3RhdGljIFNpbXVsYXRlZElucHV0U291cmNlVHlwZSBzaW11bGF0
ZWRJbnB1dFNvdXJjZVR5cGVGcm9tUHJvdG9jb2xTb3VyY2VUeXBlKEkKIH0KICNlbmRpZiAvLyBF
TkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW5wdXRTb3Vy
Y2VzLCBjb25zdCBKU09OOjpBcnJheSYgc3RlcHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
UGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJh
bWVIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBpbnB1dFNvdXJjZXMsIFJlZjxKU09OOjpBcnJh
eT4mJiBzdGVwcywgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25T
ZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBs
ZW1lbnRzIFdlYktpdCBzdXBwb3J0IGZvciDCpzE3LjUgUGVyZm9ybSBBY3Rpb25zLgogCkBAIC0x
ODIwLDcgKzE4MTksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJh
Y3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZy
YW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFu
ZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3Ry
aW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JI
YW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5k
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5k
KTsKIApAQCAtMTgyOSwyMCArMTgyOCwyMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogCiAg
ICAgLy8gUGFyc2UgYW5kIHZhbGlkYXRlIEF1dG9tYXRpb24gcHJvdG9jb2wgYXJndW1lbnRzLiBC
eSB0aGlzIHBvaW50LCB0aGUgZHJpdmVyIGhhcwogICAgIC8vIGFscmVhZHkgcGVyZm9ybWVkIHRo
ZSBzdGVwcyBpbiDCpzE3LjMgUHJvY2Vzc2luZyBBY3Rpb25zIFJlcXVlc3RzLgotICAgIGlmICgh
aW5wdXRTb3VyY2VzLmxlbmd0aCgpKQorICAgIGlmICghaW5wdXRTb3VyY2VzLT5sZW5ndGgoKSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2lucHV0U291cmNlcycgd2FzIG5vdCBmb3Vu
ZCBvciBlbXB0eS4iKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1
dFNvdXJjZXMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmpl
Y3Q7Ci0gICAgICAgIGlmICghaW5wdXRTb3VyY2UtPmFzT2JqZWN0KGlucHV0U291cmNlT2JqZWN0
KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0U291cmNlVmFsdWUgOiBpbnB1dFNvdXJjZXMu
Z2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnB1dFNvdXJjZU9iamVjdCA9IGlucHV0U291cmNlVmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghaW5wdXRTb3VyY2VPYmplY3QpCiAgICAgICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlk
UGFyYW1ldGVyLCAiQW4gaW5wdXQgc291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0
ZXIgd2FzIGludmFsaWQuIik7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgc291cmNlSWQ7Ci0g
ICAgICAgIGlmICghaW5wdXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MsIHNv
dXJjZUlkKSkKKworICAgICAgICBhdXRvIHNvdXJjZUlkID0gaW5wdXRTb3VyY2VPYmplY3QtPmdl
dFN0cmluZygic291cmNlSWQiX3MpOworICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVy
IGlzIG1pc3NpbmcgYSAnc291cmNlSWQnLiIpOwogCi0gICAgICAgIFN0cmluZyBzb3VyY2VUeXBl
OwotICAgICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZVR5cGUi
X3MsIHNvdXJjZVR5cGUpKQorICAgICAgICBhdXRvIHNvdXJjZVR5cGUgPSBpbnB1dFNvdXJjZU9i
amVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VUeXBlIl9zKTsKKyAgICAgICAgaWYgKCFzb3VyY2VUeXBl
KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNl
cycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAnc291cmNlVHlwZScuIik7CiAKICAgICAgICAgYXV0
byBwYXJzZWRJbnB1dFNvdXJjZVR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OklucHV0U291cmNlVHlwZT4oc291cmNlVHlwZSk7CkBAIC0xODgxLDI4ICsxODgw
LDI4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVl
bmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAKICAgICBWZWN0b3I8U2ltdWxhdGVkSW5w
dXRLZXlGcmFtZT4ga2V5RnJhbWVzOwogCi0gICAgaWYgKCFzdGVwcy5sZW5ndGgoKSkKKyAgICBp
ZiAoIXN0ZXBzLT5sZW5ndGgoKSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3N0ZXBz
JyB3YXMgbm90IGZvdW5kIG9yIGVtcHR5LiIpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzdGVw
IDogc3RlcHMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RlcE9iamVjdDsKLSAg
ICAgICAgaWYgKCFzdGVwLT5hc09iamVjdChzdGVwT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHN0ZXBWYWx1ZSA6IHN0ZXBzLmdldCgpKSB7CisgICAgICAgIGF1dG8gc3RlcE9iamVjdCA9
IHN0ZXBWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFzdGVwT2JqZWN0KQogICAgICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIkEgc3RlcCBpbiB0aGUgJ3N0ZXBzJyBwYXJhbWV0ZXIgd2FzIG5vdCBhbiBv
YmplY3QuIik7CiAKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwU3RhdGVzOwotICAg
ICAgICBpZiAoIXN0ZXBPYmplY3QtPmdldEFycmF5KCJzdGF0ZXMiX3MsIHN0ZXBTdGF0ZXMpKQor
ICAgICAgICBhdXRvIHN0ZXBTdGF0ZXMgPSBzdGVwT2JqZWN0LT5nZXRBcnJheSgic3RhdGVzIl9z
KTsKKyAgICAgICAgaWYgKCFzdGVwU3RhdGVzKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBp
cyBtaXNzaW5nIHRoZSAnc3RhdGVzJyBwcm9wZXJ0eS4iKTsKIAogICAgICAgICBWZWN0b3I8U2lt
dWxhdGVkSW5wdXRLZXlGcmFtZTo6U3RhdGVFbnRyeT4gZW50cmllczsKICAgICAgICAgZW50cmll
cy5yZXNlcnZlQ2FwYWNpdHkoc3RlcFN0YXRlcy0+bGVuZ3RoKCkpOwogCi0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgc3RhdGUgOiAqc3RlcFN0YXRlcykgewotICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gc3RhdGVPYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlLT5hc09iamVj
dChzdGF0ZU9iamVjdCkpCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGVWYWx1ZSA6ICpz
dGVwU3RhdGVzKSB7CisgICAgICAgICAgICBhdXRvIHN0YXRlT2JqZWN0ID0gc3RhdGVWYWx1ZS0+
YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVPYmplY3QpCiAgICAgICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIkVuY291bnRlcmVkIGEgbm9uLW9iamVjdCBzdGVwIHN0YXRlLiIpOwogCi0gICAg
ICAgICAgICBTdHJpbmcgc291cmNlSWQ7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5n
ZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBzb3VyY2VJZCkpCisgICAgICAgICAgICBhdXRvIHNvdXJj
ZUlkID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MpOworICAgICAgICAgICAg
aWYgKCFzb3VyY2VJZCkKICAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiU3RlcCBzdGF0ZSBsYWNrcyBy
ZXF1aXJlZCAnc291cmNlSWQnIHByb3BlcnR5LiIpOwogCiAgICAgICAgICAgICBpZiAoIXNvdXJj
ZUlkVG9JbnB1dFNvdXJjZU1hcC5jb250YWlucyhzb3VyY2VJZCkpCkBAIC0xOTExLDE3ICsxOTEw
LDE2IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVl
bmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1
dFNvdXJjZSYgaW5wdXRTb3VyY2UgPSAqc291cmNlSWRUb0lucHV0U291cmNlTWFwLmdldChzb3Vy
Y2VJZCk7CiAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1dFNvdXJjZVN0YXRlIHNvdXJjZVN0YXRl
IHsgfTsKIAotICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRDaGFyS2V5U3RyaW5nOwotICAgICAg
ICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5Il9zLCBwcmVz
c2VkQ2hhcktleVN0cmluZykpCisgICAgICAgICAgICBhdXRvIHByZXNzZWRDaGFyS2V5U3RyaW5n
ID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZENoYXJLZXkiX3MpOworICAgICAgICAg
ICAgaWYgKCEhcHJlc3NlZENoYXJLZXlTdHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3Rh
dGUucHJlc3NlZENoYXJLZXkgPSBwcmVzc2VkQ2hhcktleVN0cmluZy5jaGFyYWN0ZXJBdCgwKTsK
IAotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBwcmVzc2VkVmlydHVhbEtleXNBcnJh
eTsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0QXJyYXkoInByZXNzZWRWaXJ0dWFs
S2V5cyJfcywgcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXkpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byBwcmVzc2VkVmlydHVhbEtleXNBcnJheSA9IHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3Nl
ZFZpcnR1YWxLZXlzIl9zKSkgewogICAgICAgICAgICAgICAgIFZpcnR1YWxLZXlTZXQgcHJlc3Nl
ZFZpcnR1YWxLZXlzIHsgfTsKIAogICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHByZXNz
ZWRWaXJ0dWFsS2V5c0FycmF5LT5iZWdpbigpOyBpdCAhPSBwcmVzc2VkVmlydHVhbEtleXNBcnJh
eS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRWaXJ0
dWFsS2V5U3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBpZiAoISgqaXQpLT5hc1N0cmluZyhw
cmVzc2VkVmlydHVhbEtleVN0cmluZykpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gcHJlc3Nl
ZFZpcnR1YWxLZXlTdHJpbmcgPSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwcmVzc2VkVmlydHVhbEtleVN0cmluZykKICAgICAgICAgICAgICAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJFbmNvdW50ZXJlZCBhIG5vbi1zdHJpbmcgdmlydHVhbCBrZXkgdmFsdWUuIik7CiAK
ICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8VmlydHVhbEtleT4gcGFyc2VkVmlydHVhbEtl
eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4o
cHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcpOwpAQCAtMTkzNCwzMyArMTkzMiwzMiBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29ucwogICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRWaXJ0
dWFsS2V5cyA9IHByZXNzZWRWaXJ0dWFsS2V5czsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgU3RyaW5nIHByZXNzZWRCdXR0b25TdHJpbmc7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmpl
Y3QtPmdldFN0cmluZygicHJlc3NlZEJ1dHRvbiJfcywgcHJlc3NlZEJ1dHRvblN0cmluZykpIHsK
KyAgICAgICAgICAgIGF1dG8gcHJlc3NlZEJ1dHRvblN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRT
dHJpbmcoInByZXNzZWRCdXR0b24iX3MpOworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZEJ1dHRv
blN0cmluZykgewogICAgICAgICAgICAgICAgIGF1dG8gcHJvdG9jb2xCdXR0b24gPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihwcmVzc2VkQnV0
dG9uU3RyaW5nKTsKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkTW91c2VCdXR0
b24gPSBwcm90b2NvbEJ1dHRvbi52YWx1ZU9yKE1vdXNlQnV0dG9uOjpOb25lKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIG9yaWdpblN0cmluZzsKLSAgICAgICAgICAgIGlm
IChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdpblN0cmluZykpCisgICAg
ICAgICAgICBhdXRvIG9yaWdpblN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm9yaWdp
biJfcyk7CisgICAgICAgICAgICBpZiAoISFvcmlnaW5TdHJpbmcpCiAgICAgICAgICAgICAgICAg
c291cmNlU3RhdGUub3JpZ2luID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpNb3VzZU1vdmVPcmlnaW4+KG9yaWdpblN0cmluZyk7CiAKICAgICAgICAgICAgIGlmIChz
b3VyY2VTdGF0ZS5vcmlnaW4gJiYgc291cmNlU3RhdGUub3JpZ2luLnZhbHVlKCkgPT0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VNb3ZlT3JpZ2luOjpFbGVtZW50KSB7Ci0g
ICAgICAgICAgICAgICAgU3RyaW5nIG5vZGVIYW5kbGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAg
aWYgKCFzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBub2RlSGFuZGxlU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICBhdXRvIG5vZGVIYW5kbGVTdHJpbmcgPSBzdGF0ZU9iamVj
dC0+Z2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGVI
YW5kbGVTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJOb2RlIGhhbmRsZSBub3Qg
cHJvdmlkZWQgZm9yICdFbGVtZW50JyBvcmlnaW4iKTsKICAgICAgICAgICAgICAgICBzb3VyY2VT
dGF0ZS5ub2RlSGFuZGxlID0gbm9kZUhhbmRsZVN0cmluZzsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRpb25PYmplY3Q7Ci0gICAgICAgICAg
ICBpZiAoc3RhdGVPYmplY3QtPmdldE9iamVjdCgibG9jYXRpb24iX3MsIGxvY2F0aW9uT2JqZWN0
KSkgewotICAgICAgICAgICAgICAgIGludCB4ID0gMCwgeSA9IDA7Ci0gICAgICAgICAgICAgICAg
aWYgKGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBsb2NhdGlvbk9iamVj
dC0+Z2V0SW50ZWdlcigieSJfcywgeSkpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRl
LmxvY2F0aW9uID0gV2ViQ29yZTo6SW50UG9pbnQoeCwgeSk7CisgICAgICAgICAgICBpZiAoYXV0
byBsb2NhdGlvbk9iamVjdCA9IHN0YXRlT2JqZWN0LT5nZXRPYmplY3QoImxvY2F0aW9uIl9zKSkg
eworICAgICAgICAgICAgICAgIGF1dG8geCA9IGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ4
Il9zKTsKKyAgICAgICAgICAgICAgICBhdXRvIHkgPSBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdl
cigieSJfcyk7CisgICAgICAgICAgICAgICAgaWYgKHggJiYgeSkKKyAgICAgICAgICAgICAgICAg
ICAgc291cmNlU3RhdGUubG9jYXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludCgqeCwgKnkpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgcGFyc2VkRHVyYXRpb247Ci0gICAgICAgICAg
ICBpZiAoc3RhdGVPYmplY3QtPmdldEludGVnZXIoImR1cmF0aW9uIl9zLCBwYXJzZWREdXJhdGlv
bikpCi0gICAgICAgICAgICAgICAgc291cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9t
TWlsbGlzZWNvbmRzKHBhcnNlZER1cmF0aW9uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGR1cmF0
aW9uID0gc3RhdGVPYmplY3QtPmdldEludGVnZXIoImR1cmF0aW9uIl9zKSkKKyAgICAgICAgICAg
ICAgICBzb3VyY2VTdGF0ZS5kdXJhdGlvbiA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKmR1
cmF0aW9uKTsKIAogICAgICAgICAgICAgZW50cmllcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWly
PFNpbXVsYXRlZElucHV0U291cmNlJiwgU2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZT4geyBpbnB1
dFNvdXJjZSwgc291cmNlU3RhdGUgfSk7CiAgICAgICAgIH0KQEAgLTE5ODQsNyArMTk4MSw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJ
T05TX0FQSSkKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rp
b25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5j
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJh
bWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktp
dCBzdXBwb3J0IGZvciDCpzE3LjYgUmVsZWFzZSBBY3Rpb25zLgogCkBAIC0xOTk2LDcgKzE5OTMs
NyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNl
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQg
PSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFs
RnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1l
Tm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVI
YW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMjAx
MywxOSArMjAxMCwxOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFj
dGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdAogI2VuZGlmIC8vIEVOQUJM
RShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnRha2VTY3JlZW5zaG90KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBjb25zdCBi
b29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2xpcFRvVmlld3BvcnQsIFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNrPiYmIGNhbGxiYWNrKQor
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYg
bm9kZUhhbmRsZSwgT3B0aW9uYWw8Ym9vbD4mJiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVk
ZWQsIE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3Jl
ZW5zaG90Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBi
b29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlE
Rm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVt
cHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1l
SURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5v
dEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5v
dEZvdW5kKTsKIAogICAgIGJvb2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9IG9wdGlvbmFsU2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCA/ICpvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQgOiBm
YWxzZTsKLSAgICBTdHJpbmcgbm9kZUhhbmRsZSA9IG9wdGlvbmFsTm9kZUhhbmRsZSA/ICpvcHRp
b25hbE5vZGVIYW5kbGUgOiBlbXB0eVN0cmluZygpOwogICAgIGJvb2wgY2xpcFRvVmlld3BvcnQg
PSBvcHRpb25hbENsaXBUb1ZpZXdwb3J0ID8gKm9wdGlvbmFsQ2xpcFRvVmlld3BvcnQgOiBmYWxz
ZTsKIAogI2lmIFBMQVRGT1JNKEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAppbmRleCAzNjI3NjYwMzk1
Y2I1ZjQ0ZTc3YTlmODYxZDQyZTk3MWRiYTFiYmZjLi44ZDkwODkyYTRiMTM0MjY0YTRlODViZTRm
NjVkZmEyMGZjMDEzYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCkBAIC0xMzUsMTAgKzEzNSwxMCBA
QCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAvLyBJbnNwZWN0
b3I6OlJlbW90ZUF1dG9tYXRpb25UYXJnZXQgQVBJCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3Nlc3Npb25JZGVudGlmaWVyOyB9Ci0gICAgdm9pZCBkaXNwYXRj
aE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRp
Y0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIG92
ZXJyaWRlOworICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSWRlbnRp
ZmllcjsgfQorICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOworICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYs
IGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVz
ZSA9IGZhbHNlKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmKTsKICNlbmRpZgogICAgIHZvaWQgdGVybWluYXRlKCk7CiAKQEAgLTE0NiwxNSArMTQ2LDE1
IEBAIHB1YmxpYzoKIAogICAgIC8vIFNpbXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQ
SQogI2lmIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQotICAgIHZvaWQgc2lt
dWxhdGVNb3VzZUludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1v
dXNlQnV0dG9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9t
YXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlTW91c2VJ
bnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBNb3VzZUludGVyYWN0aW9uLCBNb3VzZUJ1dHRvbiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBBdXRvbWF0aW9uQ29tcGxl
dGlvbkhhbmRsZXImJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVS
QUNUSU9OUykKLSAgICB2b2lkIHNpbXVsYXRlVG91Y2hJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkm
LCBUb3VjaEludGVyYWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZp
ZXcsIE9wdGlvbmFsPFNlY29uZHM+IGR1cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRs
ZXImJikgZmluYWw7CisgICAgdm9pZCBzaW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVBy
b3h5JiwgVG91Y2hJbnRlcmFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9u
SW5WaWV3LCBPcHRpb25hbDxTZWNvbmRzPiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25I
YW5kbGVyJiYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFD
VElPTlMpCi0gICAgdm9pZCBzaW11bGF0ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5
JiwgS2V5Ym9hcmRJbnRlcmFjdGlvbiwgV1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+
JiYsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVs
YXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0aW9u
LCBXVEY6OlZhcmlhbnQ8VmlydHVhbEtleSwgQ2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBsZXRp
b25IYW5kbGVyJiYpOwogI2VuZGlmCi0gICAgdm9pZCB2aWV3cG9ydEluVmlld0NlbnRlclBvaW50
T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
cj4sIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8V2Vi
Q29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYpIGZp
bmFsOworICAgIHZvaWQgdmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdl
UHJveHkmLCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgRnVuY3Rpb248dm9pZChPcHRp
b25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+
KT4mJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCkBAIC0x
NjMsNDUgKzE2Myw0NSBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIHRoZSAtLXBsYXRmb3JtIGFyZ3Vt
ZW50IHBhc3NlZCB0byB0aGUgcHJvdG9jb2wgYmluZGluZ3MgZ2VuZXJhdG9yLgogCiAgICAgLy8g
UGxhdGZvcm06IEdlbmVyaWMKLSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJy
b3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBnZXRCcm93c2luZ0Nv
bnRleHQoY29uc3QgU3RyaW5nJiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBm
aW5hbDsKLSAgICB2b2lkIGNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlv
bmFsUHJlc2VudGF0aW9uSGludCwgUmVmPENyZWF0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
KSBmaW5hbDsKLSAgICB2b2lkIGNsb3NlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdD
b250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBmaW5hbDsKLSAgICB2b2lkIHNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3JpZ2luLCBjb25zdCBKU09O
OjpPYmplY3QqIHNpemUsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYpIGZpbmFsOwotICAgIHZvaWQgbWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPE1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQ
YWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1l
b3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25h
bFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZ29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0
IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9h
ZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JO
YXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
UGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCwgUmVmPFdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgZG91
YmxlKiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFj
az4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbiwgY29u
c3QgU3RyaW5nJiBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uLCBj
b25zdCBKU09OOjpBcnJheSYga2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rp
b25DYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlv
bnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBpbnRlcmFjdGlvbnMs
IFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgc291
cmNlcywgY29uc3QgSlNPTjo6QXJyYXkmIHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0aW9uU2Vx
dWVuY2VDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW5jZWxJbnRlcmFjdGlvblNl
cXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVI
YW5kbGUsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgdGFrZVNjcmVlbnNob3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5k
bGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9v
bCogb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgY29uc3QgaW50KiBvcHRpb25hbE9yZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1l
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1l
SGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzb2x2ZVBhcmVudEZyYW1l
SGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcm
IGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgbm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVk
LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRp
b25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9y
OjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFN0cmlu
ZyogdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNj
cmlwdFByb21wdChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxl
bmFtZXMsIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEZpbGVDb250ZW50cykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dz
aW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5n
JiBub2RlSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNG
b3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxD
b29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29v
a2llc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZVNpbmdsZUNvb2tpZShj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb29raWVO
YW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgYWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBj
b25zdCBKU09OOjpPYmplY3QmIGNvb2tpZSwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoSW5zcGVjdG9yOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGdldFNlc3Npb25QZXJtaXNzaW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lv
blBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRTZXNzaW9uUGVybWlzc2lvbnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IEpTT046
OkFycmF5JiBpbl9wZXJtaXNzaW9ucykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCcm93c2luZ0Nv
bnRleHRzKFJlZjxHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0
QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7
CisgICAgdm9pZCBjcmVhdGVCcm93c2luZ0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uPiYmLCBSZWY8Q3Jl
YXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gY2xvc2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgdm9p
ZCBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmKTsKKyAgICB2b2lkIHNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcmlnaW4sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
c2l6ZSwgUmVmPFNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7Cisg
ICAgdm9pZCBtYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxNYXhpbWl6
ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgaGlkZVdpbmRv
d09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJik7CisgICAgdm9pZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25z
dCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwg
UmVmPE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29CYWNr
SW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYm
IHBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
OworICAgIHZvaWQgZ29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4m
JiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJv
d3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQs
IFJlZjxSZWxvYWRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCB3YWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRU
aW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYpOworICAg
IHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9u
LCBSZWY8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJ
bXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIE9wdGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVv
dXQsIFJlZjxFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IHBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVxdWVz
dGVkUG9zaXRpb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9u
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uLCBSZWY8
SlNPTjo6QXJyYXk+JiYga2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25D
YWxsYmFjaz4mJik7CisgICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwg
UmVmPEpTT046OkFycmF5PiYmIGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVy
YWN0aW9uc0NhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNl
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxl
JiwgUmVmPEpTT046OkFycmF5PiYmIHNvdXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywg
UmVmPFBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY2Fu
Y2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2Fs
bGJhY2s+JiYpOworICAgIHZvaWQgdGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJ
bnRvVmlld0lmTmVlZGVkLCBPcHRpb25hbDxib29sPiYmIGNsaXBUb1ZpZXdwb3J0LCBSZWY8VGFr
ZVNjcmVlbnNob3RDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRs
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRs
ZSYsIE9wdGlvbmFsPGludD4mJiBvcmRpbmFsLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBSZWY8UmVzb2x2ZUNo
aWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVI
YW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVI
YW5kbGUmLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpOworICAgIHZv
aWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpOb2RlSGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVl
ZGVkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtLCBS
ZWY8Q29tcHV0ZUVsZW1lbnRMYXlvdXRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBzZWxlY3RPcHRp
b25FbGVtZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZy
YW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhh
bmRsZSYsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8Ym9vbD4gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxv
Zyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRp
c21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBtZXNz
YWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0
UHJvbXB0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
LCBSZWY8SlNPTjo6QXJyYXk+JiYgZmlsZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgZmls
ZUNvbnRlbnRzKTsKKyAgICB2b2lkIHNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxKU09OOjpB
cnJheT4mJiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIGdldEFsbENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEdldEFsbENvb2tpZXNDYWxs
YmFjaz4mJik7CisgICAgdm9pZCBkZWxldGVTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpOworICAgIHZv
aWQgYWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llLCBSZWY8
QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gZGVsZXRlQWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+PiBnZXRTZXNzaW9uUGVy
bWlzc2lvbnMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IHNldFNlc3Npb25QZXJtaXNzaW9ucyhSZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBj
b25zdCBib29sKiBvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5n
Q29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRIYW5kbGUmLCBPcHRpb25hbDxib29sPiYmIGVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJ
bnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOwogI2VuZGlmCiAKICAgICAvLyBFdmVu
dCBTaW11bGF0aW9uIFN1cHBvcnQuCkBAIC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGhpZGVXaW5kb3dGb3JQYWdlKFdlYlBhZ2VQcm94eSYsIFdURjo6Q29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyIChJbXBsZW1lbnRl
ZCBieSBnZW5lcmF0ZWQgY29kZSBpbiBXZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3NhZ2VSZWNlaXZl
ci5jcHApLgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIAogICAgIC8vIENhbGxlZCBieSBXZWJBdXRvbWF0
aW9uU2Vzc2lvbiBtZXNzYWdlcy4KICAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0
aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJp
bmcmIGVycm9yVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgKaW5kZXggOTNhZjVh
YmM3MDhiZDU5OGYwZjQwYmNjMjk0ODUyYTM3MDUyOTdhZS4uNGQzNmQ2NGZkNDBmNDNmM2U3ODFk
NWU1OTVhM2JlODRjY2VlZDY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaApAQCAt
NDQsMTQgKzQ0LDEyIEBACiAvLyBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIGZpbGxpbmcgaW4gdGhl
IGVycm9yIHN0cmluZyBvZiBzeW5jaHJvbm91cyBjb21tYW5kcyBpbiBiYWlsb3V0IGJyYW5jaGVz
LgogI2RlZmluZSBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKGVycm9yTmFtZSkgXAog
ZG8geyBcCi0gICAgZXJyb3JTdHJpbmcgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFN
RShlcnJvck5hbWUpOyBcCi0gICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKGVycm9yTmFtZSkpOyBcCiB9IHdoaWxl
IChmYWxzZSkKIAogI2RlZmluZSBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKGVycm9yTmFtZSwgZGV0YWlsc1N0cmluZykgXAogZG8geyBcCi0gICAgZXJyb3JTdHJp
bmcgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhlcnJvck5h
bWUsIGRldGFpbHNTdHJpbmcpOyBcCi0gICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKGVycm9y
TmFtZSwgZGV0YWlsc1N0cmluZykpOyBcCiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihlcnJvck5hbWUpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9u
TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21h
dGlvblNlc3Npb25NYWMubW0KaW5kZXggM2NhZWNjMzM3ZDA5OTc5NTM0ZTdmY2JmNWUxZTEwYmQ4
MzVmNzZjZC4uOWRiZjJlMDc4N2FhOTk3MDZjNmYyOTA3NTRhOTEzOTBhYmYxZjcwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlv
blNlc3Npb25NYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9t
YWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKICNwcmFnbWEgbWFyayBDb21tYW5kcyBmb3IgJ1BMQVRGT1JNKE1B
QyknCiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1
cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3Zv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5k
bGUsIE9wdGlvbmFsPGJvb2w+JiYgZW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93
c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBh
Z2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC02
MCw3ICs2MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0Nv
bnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IGJvCiAgICAgICAgIHBhZ2UtPmluc3Bl
Y3RvcigpLT5zaG93KCk7CiAKICAgICAgICAgLy8gU3RhcnQgY29sbGVjdGluZyBwcm9maWxlIGlu
Zm9ybWF0aW9uIGltbWVkaWF0ZWx5IHNvIHRoZSBlbnRpcmUgc2Vzc2lvbiBpcyBjYXB0dXJlZC4K
LSAgICAgICAgaWYgKG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqb3B0aW9uYWxFbmFi
bGVBdXRvQ2FwdHVyaW5nKQorICAgICAgICBpZiAoZW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqZW5h
YmxlQXV0b0NhcHR1cmluZykKICAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT50b2dnbGVQ
YWdlUHJvZmlsaW5nKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQu
Y3BwCmluZGV4IGMxZmZhNmNmNjE0NjY2ZTRjOGI1ZWM1YjQzY2M2NGY4MDcwZTY1OTkuLmRmNGEx
MGE0MGY4YjAyZmM1ZDc1MDllOTZjNTk0ZWJiYzVhYzlmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3Rv
ckJyb3dzZXJBZ2VudC5jcHAKQEAgLTYwLDM1ICs2MCwzNCBAQCB2b2lkIEluc3BlY3RvckJyb3dz
ZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQnJvd3NlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JCcm93
c2VyQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJCcm93c2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJCcm93c2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnNw
ZWN0ZWRQYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRFbmFibGVkQnJvd3NlckFnZW50KHRo
aXMpOwogCiAgICAgYXV0byogaW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3Rvcigp
OwogICAgIEFTU0VSVChpbnNwZWN0b3IpOwogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JD
bGllbnQoKS5icm93c2VyRG9tYWluRW5hYmxlZChtX2luc3BlY3RlZFBhZ2UsICppbnNwZWN0b3Ip
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRp
c2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAg
IGlmICghZW5hYmxlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIgZG9tYWlu
IGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFl
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJvd3NlciBkb21haW4g
YWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ29u
dHJvbGxlcigpLnNldEVuYWJsZWRCcm93c2VyQWdlbnQobnVsbHB0cik7CiAKICAgICBpZiAoYXV0
byogaW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvcigpKQogICAgICAgICBtX2lu
c3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ2xpZW50KCkuYnJvd3NlckRvbWFpbkRpc2FibGVkKG1faW5z
cGVjdGVkUGFnZSwgKmluc3BlY3Rvcik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIElu
c3BlY3RvckJyb3dzZXJBZ2VudDo6ZXh0ZW5zaW9uc0VuYWJsZWQoSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mJiBleHRlbnNpb25JRFRvTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5o
CmluZGV4IGExMzk1ODNjZDhkODQyMzI5ZjRiM2YzNTIxYjM2MjQwZWFiNTM5MTEuLjMzMWJmYWJi
NTU3NDRlZTk4YTdmZjBmN2RhNzY5NTMxYWM0YzcyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93
c2VyQWdlbnQuaApAQCAtMzMsMjMgKzMzLDIyIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgV2ViUGFnZVByb3h5OwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIElu
c3BlY3RvckJyb3dzZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBJbnNwZWN0b3I6OkJyb3dzZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckJyb3dzZXJBZ2VudCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQnJvd3NlckFnZW50KFdlYlBh
Z2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQnJvd3NlckFnZW50KCkgb3ZlcnJpZGU7
CisgICAgfkluc3BlY3RvckJyb3dzZXJBZ2VudCgpOwogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0
OwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBCcm93
c2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAg
ICAgdm9pZCBleHRlbnNpb25zRW5hYmxlZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmKTsKICAg
ICB2b2lkIGV4dGVuc2lvbnNEaXNhYmxlZChIYXNoU2V0PFN0cmluZz4mJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggZmJlZTVjZGZmMzhiM2M3NzlhMjYyNzM4YzQx
OTUxNWI0NDU4YjlkZC4uNWY1MTdmMTBhNDg3NzBkOWNiODljZjg4ZjlkNjAzNzhiYmQ1MmFkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMjA2LDI1ICsyMDYsMzgg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQm
IGV2ZW50KQogICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsK
LSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBt
ZXNzYWdlVmFsdWUpKQorICAgIGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihldmVudC5tZXNzYWdlLnZhbHVlKCkpOworICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAg
ICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQorICAgIGF1dG8gbWVz
c2FnZUFycmF5ID0gbWVzc2FnZVZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFtZXNzYWdlQXJy
YXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxUYXJnZXQ+IHRhcmdldExpc3Q7CiAg
ICAgZm9yIChhdXRvJiBpdGVtVmFsdWUgOiAqbWVzc2FnZUFycmF5KSB7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGl0ZW1PYmplY3Q7Ci0gICAgICAgIGlmICghaXRlbVZhbHVlLT5hc09i
amVjdChpdGVtT2JqZWN0KSkKKyAgICAgICAgYXV0byBpdGVtT2JqZWN0ID0gaXRlbVZhbHVlLT5h
c09iamVjdCgpOworICAgICAgICBpZiAoIWl0ZW1PYmplY3QpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBUYXJnZXQgdGFyZ2V0OwotICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdl
dEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCi0gICAgICAgICAgICB8fCAhaXRlbU9i
amVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkKLSAgICAgICAgICAgIHx8ICFp
dGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVybCkKLSAgICAgICAgICAgIHx8
ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKKworICAgICAg
ICBhdXRvIHRhcmdldElEID0gaXRlbU9iamVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpOwor
ICAgICAgICBpZiAoIXRhcmdldElEKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
dGFyZ2V0LnRhcmdldElEID0gKnRhcmdldElEOworCisgICAgICAgIHRhcmdldC5uYW1lID0gaXRl
bU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQubmFtZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdldC51cmwgPSBpdGVtT2JqZWN0
LT5nZXRTdHJpbmcoInVybCJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0LnVybCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdldC50eXBlID0gaXRlbU9iamVjdC0+Z2V0U3Ry
aW5nKCJ0eXBlIl9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQudHlwZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTg4Yjk4
MWM4N2M5YmEyYTFiODg0MmQ4NjkzMmE3YjZlM2VhNTJlMi4uNmU3ODkxMzc4N2RlOTRlZmNlZDYx
NWU1MTRjNzA5ZTc1N2I0OTE2OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUg
Z2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82
ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDktMDQg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBN
b3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09OVmFsdWUuY3BwCmluZGV4IDkxZWM0MWMzYjdkNDE2
MmQyM2VjNDVlNGRiMzYzN2E5M2NkY2JiNDUuLmMzODA2Mjc2NDRkZjY5MTY2NDAxNmZkYzZjMTE0
OTA4ZmE4ZjgyMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pT
T05WYWx1ZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVl
LmNwcApAQCAtNDIsODIgKzQyLDY4IEBAIFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAgICAg
ewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSh0
cnVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2YWx1
ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAg
ICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgICAgICB2YWx1ZSA9IEpT
T046OlZhbHVlOjpjcmVhdGUoZmFsc2UpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xl
YW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFu
KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9F
USgqYm9vbGVhblZhbHVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNP
Tjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgxKTsKICAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAg
ICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVn
ZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOwor
ICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFs
dWUsIDEpOwogCi0gICAgICAgIC8vIERvdWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2VycywgYnV0
IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAg
IC8vIEludGVnZXJzIGNhbiBiZSBnZXQgYXMgZG91Ymxlcy4KKyAgICAgICAgYXV0byBkb3VibGVW
YWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1
ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEpOwogCiAgICAgICAgIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmdW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUpKTsK
LSAgICAgICAgbG9uZyBsb25nIGxvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIobG9uZ0xvbmdWYWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIHVu
c2lnbmVkTG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVu
c2lnbmVkTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25lZExv
bmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWdu
ZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAgICAgIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVn
ZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKCppbnRlZ2VyVmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwogICAg
IH0KIAogICAgIHsKICAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVl
OjpjcmVhdGUoMS41KTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAg
RVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOwogCi0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAg
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoZG91YmxlVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUp
OwogCi0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFs
dWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7Ci0KLSAgICAgICAgdW5zaWduZWQgdW5zaWduZWRW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVl
KSk7Ci0gICAgICAgIGxvbmcgbG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNJbnRlZ2VyKGxvbmdWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGxvbmcgdW5zaWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgLy8gRG91
YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVnZXJzLgorICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9
IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsK
KyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7
CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6
VmFsdWU6OmNyZWF0ZSgid2Via2l0Iik7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBl
KCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7
CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1
ZSwgIndlYmtpdCIpOwogCiAgICAgICAgIFN0cmluZyBudWxsU3RyaW5nOwogICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUobnVsbFN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdW
YWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfRkFMU0UoISFzdHJpbmdW
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKIAogICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpjcmVhdGUoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdW
YWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1Zh
bHVlKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKICAgICAg
ICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xMzEsNyAr
MTE3LDcgQEAgVEVTVChKU09OVmFsdWUsIENvbnN0cnVjdCkKICAgICB7CiAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIEVY
UEVDVF9UUlVFKG9iamVjdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwot
ICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDApOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDBVKTsKICAgICB9CiAKICAgICB7CkBAIC0xNTQsNDggKzE0MCw0OCBA
QCBURVNUKEpTT05BcnJheSwgQmFzaWMpCiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwg
MlUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICBib29sIGJvb2xlYW5W
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwot
ICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIHRydWUpOworICAgIGF1dG8gYm9vbGVhblZhbHVl
ID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7Cisg
ICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAgICAgYXJyYXktPnB1c2hJbnRl
Z2VyKDEpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1ZSA9
IGFycmF5LT5nZXQoMik7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShpbnRl
Z2VyVmFsdWUsIDEpOworICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigp
OworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2Vy
VmFsdWUsIDEpOwogCiAgICAgYXJyYXktPnB1c2hEb3VibGUoMS41KTsKICAgICBFWFBFQ1RfRVEo
YXJyYXktPmxlbmd0aCgpLCA0VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0g
ICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShk
b3VibGVWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBhdXRv
IGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91Ymxl
VmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJheS0+
cHVzaFN0cmluZygid2Via2l0Iik7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUp
OwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdWYWx1
ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICBh
dXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoISFz
dHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAg
ICBhcnJheS0+cHVzaE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1Rf
RVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUpOwogICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDApOworICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3QoKTsK
KyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDBVKTsKIAogICAgIGFycmF5LT5wdXNoQXJyYXkoSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA3VSk7CiAgICAgdmFsdWUgPSBh
cnJheS0+Z2V0KDYpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6OkFycmF5KTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0g
ICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8gYXJy
YXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7
CiAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRvIGl0
ID0gYXJyYXktPmJlZ2luKCk7CkBAIC0yNTEsNDAgKzIzNyw0MCBAQCBURVNUKEpTT05BcnJheU9m
LCBCYXNpYykKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAgdmFsdWUg
PSBhcnJheS0+Z2V0KDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6OkludGVnZXIpOwotICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCAxKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIo
KTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50ZWdl
clZhbHVlLCAxKTsKIAogICAgIGFycmF5LT5hZGRJdGVtKDEuNSk7CiAgICAgRVhQRUNUX0VRKGFy
cmF5LT5sZW5ndGgoKSwgM1UpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAg
IGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91
YmxlVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0byBk
b3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXktPmFk
ZEl0ZW0oIndlYmtpdCIpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsKICAg
ICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0g
ICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0byBz
dHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5n
VmFsdWUpOwogICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgYXJy
YXktPmFkZEl0ZW0oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VRKGFycmF5
LT5sZW5ndGgoKSwgNVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5h
c09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgp
LCAwKTsKKyAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgRVhQ
RUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgp
LCAwVSk7CiAKICAgICBhcnJheS0+YWRkSXRlbShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwogICAg
IEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQo
NSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
QXJyYXkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAgYXV0byBhcnJheVZhbHVlID0g
dmFsdWUtPmFzQXJyYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICBFWFBF
Q1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAogICAgIGF1dG8gaXQgPSBhcnJheS0+
YmVnaW4oKTsKQEAgLTMyNCw0NSArMzEwLDQ1IEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMpCiAg
ICAgUmVmPEpTT046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKIAog
ICAgIG9iamVjdC0+c2V0VmFsdWUoIm51bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKLSAgICBF
WFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IG9iamVj
dC0+Z2V0VmFsdWUoIm51bGwiKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKIAogICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9vbGVh
biIsIHRydWUpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMik7Ci0gICAgYm9vbCBi
b29sZWFuVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29sZWFu
IiwgYm9vbGVhblZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyVSk7CisgICAgYXV0byBib29sZWFuVmFsdWUg
PSBvYmplY3QtPmdldEJvb2xlYW4oImJvb2xlYW4iKTsKKyAgICBFWFBFQ1RfVFJVRShib29sZWFu
VmFsdWUpOworICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIG9iamVj
dC0+c2V0SW50ZWdlcigiaW50ZWdlciIsIDEpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgMyk7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdl
dEludGVnZXIoImludGVnZXIiLCBpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdl
clZhbHVlLCAxKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDNVKTsKKyAgICBhdXRv
IGludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0SW50ZWdlcigiaW50ZWdlciIpOworICAgIEVYUEVD
VF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwog
CiAgICAgb2JqZWN0LT5zZXREb3VibGUoImRvdWJsZSIsIDEuNSk7Ci0gICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCA0KTsKLSAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RS
VUUob2JqZWN0LT5nZXREb3VibGUoImRvdWJsZSIsIGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQRUNU
X0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUp
OworICAgIGF1dG8gZG91YmxlVmFsdWUgPSBvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIik7Cisg
ICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUs
IDEuNSk7CiAKICAgICBvYmplY3QtPnNldFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOwotICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNSk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwot
ICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1ZSkp
OworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNVUpOworICAgIGF1dG8gc3RyaW5nVmFs
dWUgPSBvYmplY3QtPmdldFN0cmluZygic3RyaW5nIik7CisgICAgRVhQRUNUX1RSVUUoISFzdHJp
bmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBv
YmplY3QtPnNldE9iamVjdCgib2JqZWN0IiwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAg
RVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBv
YmplY3RWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0Iiwg
b2JqZWN0VmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2VSk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9
IG9iamVjdC0+Z2V0T2JqZWN0KCJvYmplY3QiKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1
ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIG9iamVj
dC0+c2V0QXJyYXkoImFycmF5IiwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKLSAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDcpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1
ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFsdWUp
KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDdVKTsKKyAgICBhdXRvIGFycmF5VmFs
dWUgPSBvYmplY3QtPmdldEFycmF5KCJhcnJheSIpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFs
dWUpOwogICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgVmVj
dG9yPGNvbnN0IGNoYXIqPiBrZXlzID0geyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIiLCAi
ZG91YmxlIiwgInN0cmluZyIsICJvYmplY3QiLCAiYXJyYXkiIH07CkBAIC0zNzYsMzEgKzM2Miwz
MSBAQCBURVNUKEpTT05PYmplY3QsIEJhc2ljKQogICAgIEVYUEVDVF9UUlVFKGtleXMuaXNFbXB0
eSgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJudWxsIik7Ci0gICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCA2KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKICAgICBF
WFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoIm51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAg
IG9iamVjdC0+cmVtb3ZlKCJib29sZWFuIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgp
LCA1KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDVVKTsKICAgICBFWFBFQ1RfVFJV
RShvYmplY3QtPmZpbmQoImJvb2xlYW4iKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVj
dC0+cmVtb3ZlKCJpbnRlZ2VyIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsK
KyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDRVKTsKICAgICBFWFBFQ1RfVFJVRShvYmpl
Y3QtPmZpbmQoImludGVnZXIiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVt
b3ZlKCJkb3VibGUiKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgM1UpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Zmlu
ZCgiZG91YmxlIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgic3Ry
aW5nIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDJVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0cmlu
ZyIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIpOwot
ICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+
c2l6ZSgpLCAxVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9PSBv
YmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJhcnJheSIpOwotICAgIEVYUEVD
VF9FUShvYmplY3QtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAw
VSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJhcnJheSIpID09IG9iamVjdC0+ZW5k
KCkpOwogfQogCkBAIC00NzksMjAxICs0NjUsMjA0IEBAIFRFU1QoSlNPTlZhbHVlLCBUb0pTT05T
dHJpbmcpCiBURVNUKEpTT05WYWx1ZSwgUGFyc2VKU09OKQogewogICAgIHsKLSAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigibnVsbCIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJudWxsIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oInRydWUiLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigidHJ1ZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkJvb2xlYW4pOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VR
KGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUt
PmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAg
ICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04oImZhbHNlIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9v
bGVhblZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsKKyAg
ICAgICAgYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1Rf
VFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFs
c2UpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVlKSk7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIik7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgLy8gTnVtYmVycyBhcmUgYWx3YXlzIHBh
cnNlZCBhcyBkb3VibGUuCiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS4wKTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9
IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuMCk7CiAKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUg
PSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLjUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpEb3VibGUpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91Ymxl
VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgICAgICBk
b3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3Vi
bGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAgICAgfQog
CiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcInN0cmluZ1wiIiwgdmFsdWUpKTsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIiKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1
ZSkpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3RyaW5n
VmFsdWUsICJzdHJpbmciKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltdIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIltdIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUt
PmFzQXJyYXkoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAgIEVY
UEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9
LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9
LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpBcnJheSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFs
dWUpKTsKKyAgICAgICAgYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVu
Z3RoKCksIDVVKTsKICAgICAgICAgYXV0byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBF
WFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6TnVsbCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6
Ok51bGwpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlW
YWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJs
ZSk7Ci0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1W
YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdl
clZhbHVlLCAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSAoKml0KS0+
YXNJbnRlZ2VyKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgICAg
IEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQ
RUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUg
PSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpT
T046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAyLjUpOworICAgICAgICBFWFBFQ1RfVFJVRSgo
Kml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBhdXRv
IGRvdWJsZVZhbHVlID0gKCppdCktPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRv
dWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMi41KTsKICAgICAg
ICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsK
IAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0
ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gc3ViQXJyYXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRl
bVZhbHVlLT5hc0FycmF5KHN1YkFycmF5VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCpp
dCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBhdXRvIHN1
YkFycmF5VmFsdWUgPSAoKml0KS0+YXNBcnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShzdWJB
cnJheVZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgpLCAy
VSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZh
bHVlLT5nZXQoMCk7CisgICAgICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5n
ZXQoMCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVj
dDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwot
ICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iLCBz
dHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIG9iamVjdCA9IG9iamVjdFZhbHVlLT5hc09iamVj
dCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0
U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAg
ICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogICAgICAgICBvYmplY3RWYWx1ZSA9
IHN1YkFycmF5VmFsdWUtPmdldCgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUt
PnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNUX1RS
VUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDEpOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJiYXoiLCBib29sZWFuVmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBvYmplY3QgPW9iamVj
dFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFs
dWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShib29s
ZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAg
ICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkp
OwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
aXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsK
KyAgICAgICAgc3RyaW5nVmFsdWUgPSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndl
YmtpdCIpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBhcnJheVZh
bHVlLT5lbmQoKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIs
IHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7
fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5z
aXplKCksIDApOworICAgICAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9i
amVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjogXCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251bGws
ZmFsc2VdfX0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIntcImZvb1wiOiBcImJhclwiLCBcImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19fSIp
OworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEob2Jq
ZWN0VmFsdWUtPnNpemUoKSwgMik7CisgICAgICAgIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2Jq
ZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDJVKTsKIAotICAgICAgICBTdHJpbmcgc3RyaW5nVmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5nZXRTdHJpbmcoImZvbyIsIHN0
cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3RWYWx1ZS0+Z2V0
U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAg
ICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogCi0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdldE9i
amVjdCgiYmF6Iiwgb2JqZWN0KSk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
MSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKG9iamVjdC0+Z2V0QXJyYXkoInN1YiIsIGFycmF5KSk7CisgICAgICAgIGF1dG8gb2JqZWN0
ID0gb2JqZWN0VmFsdWUtPmdldE9iamVjdCgiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKG9i
amVjdCk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBh
dXRvIGFycmF5ID0gb2JqZWN0LT5nZXRBcnJheSgic3ViIik7CisgICAgICAgIEVYUEVDVF9UUlVF
KGFycmF5KTsKICAgICAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIH0K
IAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiwiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJmb28iLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIsIHZh
bHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxz
ZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxLmQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiWzEsXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCIxLDJdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiWzEgMl0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl1dIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdLCIsIHZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9Iiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntc
ImZvb1wiOmJhcn0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb29cIjpcImJhclwifSIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6XCJi
YXJcIn19IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9LCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFs
c2V9LF0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiW3tcImZvb1wiOntcImJhelwiOmZhbHNlfV0iLCB2YWx1ZSkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiZm9vIikpOworICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJUclVlIikpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiRmFsc2UiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJbMSxdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiMSwyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJbMSAyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlsxLDJdXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlsxLDJdLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIntmb286XCJiYXJcIn0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjpiYXJ9IikpOworICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IikpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IikpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wiOlwi
YmFyXCJ9fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IntcImZvb1wiOlwiYmFyXCJ9LCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlt7XCJmb29cIjpcImJhclwifSx7XCJiYXpcIjpmYWxzZX0sXSIpKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjp7XCJi
YXpcIjpmYWxzZX1dIikpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
IFwiZm9vXCIgXG4iLCB2YWx1ZSkpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBh
dXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUodmFsdWUpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAg
ICBFWFBFQ1RfRVEoImZvbyIsIHN0cmluZ1ZhbHVlKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIiAxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXHQxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiXG4xIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJV
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXHQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgMSAiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIge30gIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIsIHZh
bHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1
MTIzNFwiIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiIDEiKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
Ilx0MSIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4x
IikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IikpOworICAg
ICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxICIpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIHt9ICIpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGRlwiIikpOworICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMzRcIiIpKTsKIAotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAxIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt9IHt9IiwgdmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIiwgdmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFwi
LCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHhGIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIlwiXFx4RlwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlwiXFx4RiBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxICAgXCIiLCB2
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHUxMiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEyXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiXCJcXHUxMiAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIsIHZhbHVlKSk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyBc
IiIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxIDEiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7
fSB7fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltd
IFtdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4
RiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4
RlwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHhGIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJcIlxcdTEgICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIlwiXFx1MTIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxcdTEyXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJcIlxcdTEyICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIFwiIikpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408313</attachid>
            <date>2020-09-08 23:36:16 -0700</date>
            <delta_ts>2020-09-08 23:51:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908233615.patch</filename>
            <type>text/plain</type>
            <size>1525075</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjM1Y2IwMThmMTA5ZDk4MTRiODk3MmE2MDcwM2M4ZTliYTY3YmU4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQw
YjUxZWRiODA2MDg2MGI3YmIxM2MwNjJhNTAzMTFmYTQyNGYxZGEuLjIwMzZiZDMyOWQzMTAxMzk3
Yjg5YmFkNjQyYjhiOTYwNTkwNDZlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuaDoKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6Ok9iamVjdEJhc2U6OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OnNldE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hPYmplY3QpOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoQXJyYXkpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6QXJyYXlPZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjYXN0ZWRBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6
OkFycmF5T2Y6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuY3Bw
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZh
bHVlOjphc0FycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjpwYXJzZUpTT04p
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQm9vbGVhbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzSW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpWYWx1ZTo6YXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Omdl
dERvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFN0
cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRPYmpl
Y3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0QXJyYXkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6T2JqZWN0QmFzZSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6QXJyYXlCYXNlOjp3cml0ZUpTT04gY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlCYXNlOjpBcnJheUJhc2UpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
QXJyYXlCYXNlOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNl
OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6
Om9wZW5BY2Nlc3NvcnMpOiBEZWxldGVkLgorICAgICAgICBVc2UgYFJlZiYmYCB3aGVyZXZlciBw
b3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIgZm9yIGBn
ZXQqYC9gYXMqYAorICAgICAgICBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFu
aXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBhc3N1bWVkIHRvIGV4aXN0LgorICAgICAg
ICBSZW1vdmUgdW51c2VkIG92ZXJsb2FkcyBhbmQgYWxsb3cgc3ViY2xhc3NlcyB0byBjYWxsIGBh
cypgIGluc3RlYWQgb2YgYG9wZW5BY2Nlc3NvcnNgIGFzCisgICAgICAgIHRoZXkncmUgZWZmZWN0
aXZlbHkgdGhlIHNhbWUgdGhpbmcuCisKIDIwMjAtMDktMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIENURm9udElzU3lzdGVtVUlG
b250KCkgaXMgZmFzdGVyIHRoYW4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KCkvQ1RG
b250Q29weUZvbnREZXNjcmlwdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwN2E1MzVkNGQ4NGMzZTlhYmY4
YjI1ZjBlYWE2ZDI4YmVlMzIzYjlkLi40NGUwOWNiMmU5Y2MxMjE0NGEzZWEyYzdjNzFjYzU1NTBh
YTc0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA4ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rl
cm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Qu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGlj
RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6CisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VN
YW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RL
ZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUg
Y29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0YzdmOGNiMGY3
ODQ4OTlmNTc4ODk0Li5mMWM5ZjBlNjI0MzYzMWExOTNmMWUyN2MyZmY5OGU1ZTBiNzg1Y2EyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJp
dmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6Q29tbWFuZFJlc3Vs
dDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJE
cml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRV
bmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRDdXJyZW50VVJMKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZv
cndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dI
YW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9GcmFtZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6
ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3cp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudFNl
bGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdl
dEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVt
ZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NT
VmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBs
b2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGljayk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQ
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVz
dWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9uQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldE5hbWVkQ29va2ll
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBl
cmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlv
bnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpkaXNtaXNzQWxlcnQpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVydCk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNl
bmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmg6
CisgICAgICAgICogV2ViRHJpdmVyU2VydmljZS5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjp2
YWx1ZUFzTnVtYmVySW5SYW5nZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmRlc2VyaWFsaXplVGlt
ZW91dHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpkZXNlcmlhbGl6ZVByb3h5KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGFyc2VDYXBhYmlsaXRpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxl
dGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjp2YWxp
ZGF0ZWRDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRy
aXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVTZXNzaW9uKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z28pOgorICAgICAgICAoV2ViRHJpdmVyOjpX
ZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZl
clNlcnZpY2U6Om5ld1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZp
Y2U6OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kRWxlbWVudE9yQ29t
cGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kU3RyYXRlZ3lBbmRTZWxl
Y3Rvck9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJp
dmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudENTU1ZhbHVlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZSk6CisgICAgICAgIChXZWJE
cml2ZXI6OmRlc2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVy
U2VydmljZTo6YWRkQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1BhdXNlQWN0aW9u
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc051bGxBY3Rpb24pOgorICAgICAgICAoV2Vi
RHJpdmVyOjpwcm9jZXNzS2V5QWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1Bv
aW50ZXJBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUG9pbnRlclBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6c2VuZEFsZXJ0VGV4dCk6CisgICAg
ICAgICogV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcDoKKyAgICAgICAgKFdl
YkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtUGFy
c2VDYXBhYmlsaXRpZXMpOgorICAgICAgICAqIFdlYkRyaXZlci93aW4vV2ViRHJpdmVyU2Vydmlj
ZVdpbi5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
TWF0Y2hDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBXZWJEcml2
ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGll
cyk6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwog
MjAyMC0wNy0xNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbQ01ha2VdW1dlYkRyaXZlcl0gR2VuZXJhdGluZyBXZWJEcml2ZXJBdG9tcy5jcHAg
aXMgcmFyZWx5IGZhaWxpbmcgYXMgIkltcG9ydEVycm9yOiBObyBtb2R1bGUgbmFtZWQganNtaW4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA5OWNjMWM3MDFiMTNlYjhlYmZmNGI4MjQ2OTll
NTQ4MDgwZTA5NmNkLi40Y2U4OTQ5Mjg1ODZjMzE4MjhlYzJhNjUwMTUyMTlmYTdlZWJjZjA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanM6Cisg
ICAgICAgIChXSS5DU1NNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZm9yY2VkQXBwZWFyYW5jZSk6Cisg
ICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0
byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycywgdGhlCisgICAgICAgIGBhcHBlYXJhbmNlYCBw
YXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJrZWQgYG9w
dGlvbmFsYCBhcworICAgICAgICB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0IGFuIGVt
cHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW4gZW51bS4KKyAgICAgICAg
QXMgc3VjaCwgcmV3b3JrIHRoZSBmcm9udGVuZCBsb2dpYyBmb3IgaW52b2tpbmcgYFBhZ2Uuc2V0
Rm9yY2VkQXBwZWFyYW5jZWAgdG8gaW5zdGVhZAorICAgICAgICBub3QgcHJvdmlkZSBhbiBgYXBw
ZWFyYW5jZWAgcGFyYW1ldGVyIGF0IGFsbCB3aGVuIHdhbnRpbmcgdG8gInVuc2V0IiBpdC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qczoK
KyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVDb25z
b2xlU2V0dGluZ3NWaWV3KToKKyAgICAgICAgTm93IHRoYXQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMg
bWF0Y2hpbmcgYSBgQ29uc29sZS5DaGFubmVsU291cmNlYCBhcmUgcmV0dXJuZWQgaW5zdGVhZCBv
ZgorICAgICAgICBqdXN0IHRoZSBoYXJkY29kZWQgbGlzdCwgY2hlY2sgZm9yIGEgbWF0Y2hpbmcg
YFdJLlVJU3RyaW5nYCBiZWZvcmUgc2hvd2luZyBhIGA8c2VsZWN0PmAuCisKIDIwMjAtMDktMDUg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFj
ODc4MDc4MzQzYTMyMzdjZGM3YjgxNDJkOTRjMjU5NzJkYjlkNzcuLjJkMzk1ZTlkOWRiMmQ0OTNk
NzgyOTEzZjM1MTc4ODYyODEzODA4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAt
MDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wg
d2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEgc29tZXdoYXQgY29uZnVzaW5nIHdheToKKyAgICAg
ICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAt
IHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBgVGAgb3IgYGNvbnN0IFQmYAorICAgICAgICAgLSBv
cHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNvbnN0IFQqYAorICAgICAgICAgLSBlbnVtIHBhcmFt
ZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0eXBlIHJlcXVpcmluZyB0aGUgYmFja2VuZCBkaXNw
YXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAgICAgcHJvY2VzcyBpdCBpbnN0ZWFkIG9mIGl0IGJl
aW5nIHByZXByb2Nlc3NlZAorICAgICAgICAgLSByZXF1aXJlZCByZXR1cm5zIHdlcmUgYFQmYAor
ICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5zIHdlcmUgYFQqYAorICAgICAgICBUaGlzIGRvZXNu
J3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2aW91cyByZWFkaW5nIG9mIGNvZGUgc2luY2UgdGhl
IG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICBub3Qgd2VpcmQgKGUuZy4gZXJyb3Igc3Ry
aW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUgYXJlIHJlZmVyZW5jZXMvcG9pbnRlcnMgdG8gcHJp
bWl0aXZlCisgICAgICAgIHR5cGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRo
ZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3RvY29sIGNvZGUgdG8gYmU6CisgICAgICAgICAtIHJl
cXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBvciBgUmVmPFQ+JiZgCisgICAgICAgICAtIG9wdGlv
bmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25hbDxUPiYmYCBvciBgUmVmUHRyPFQ+JiZgCisgICAg
ICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUgcHJlcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhl
IGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGlmIHZhbGlkCisgICAgICAgICAtIHN5bmNocm9u
b3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0ZWQ8WCwgRXJyb3JTdHJpbmc+YCB1c2luZyB0aGUg
c2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAgICAgICAgICB3aGVyZSBgWGAgaXMgZWl0aGVyIGEg
c2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1cGxlYCBvZiBtdWx0aXBsZSByZXR1cm5zCisKKyAg
ICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIGlzIGBTdHJpbmdgLCB3aGljaCBp
cyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBudWxsU3RyaW5nKClgLAorICAgICAgICBgZW1wdHlT
dHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGBP
cHRpb25hbDxTdHJpbmc+YC4KKworICAgICAgICBBbHNvIHVzZSBgUHJvdG9jb2xgIG9iamVjdHMv
YHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJsZSB0byBmdXJ0aGVyIHJlbGF0ZSB0aGUgcHJvdG9j
b2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFjdHVhbCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxl
ciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9t
YXRpb24uanNvbjoKKyAgICAgICAgYENvb3JkaW5hdGVTeXN0ZW1gIGhhcyBgUGFnZWAgYW5kIGBW
aWV3cG9ydGAgZW51bSB2YWx1ZXMsIGJ1dCBgV2ViQXV0b21hdGlvblNlc3Npb25gIGNoZWNrcwor
ICAgICAgICBmb3IgYCJQYWdlImAgYW5kIGAiTGF5b3V0Vmlld3BvcnQiYC4gQWRkIGEgYExheW91
dFZpZXdwb3J0YCBlbnVtIHZhbHVlIG5vdyB0aGF0IGVudW1zIGFyZQorICAgICAgICBwcm9jZXNz
ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycyB0byBw
cmVzZXJ2ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAg
ICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJv
dmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dFRhcmdldExpc3QpOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hl
cmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVy
CisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFz
aWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8g
ZXhpc3QuCisKIDIwMjAtMDktMDUgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJJRExdIFJlYWxpZ24gb3VyIElETCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMg
d2l0aCB0aG9zZSBzcGVjaWZpZWQgaW4gV2ViSURMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA2Yjg1M2M5MzFmMWRjZTkyNTNiYmFjMDZh
OTVlNmFhYzUyN2NmMjVhLi43OTY4YjkwYTczYjI4MmRmNTk4MjI1NmE2ZWRjYjJkNmU1NzQzOTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAK
QEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4ganNUb0luc3BlY3Rv
clZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgICAgICAg
ICBhdXRvIGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QsIGFy
cmF5LmdldEluZGV4KGdsb2JhbE9iamVjdCwgaSksIG1heERlcHRoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJyYXktPnB1c2hWYWx1ZShXVEZNb3ZlKGVsZW1l
bnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoZWxl
bWVudFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGluc3BlY3RvckFycmF5OwogICAgICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRp
YyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNU
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIG5h
bWUpLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5z
ZXRWYWx1ZShuYW1lLnN0cmluZygpLCBXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAg
ICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5nKCksIGluc3BlY3RvclZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpbnNwZWN0
b3JPYmplY3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Bc3luY1N0YWNrVHJhY2UuY3BwCmluZGV4IDU0NTBlMmYzYzAwOWM2MDE4Y2Y5YzUzMGEwMzZj
M2RiN2E2MzQ1MGUuLmE1OTYzOTVjYmVhNzkxZTcwYmUzZTIzNjJmZTU3ZjQzODM0YTU5NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFj
ZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBBc3luY1N0YWNrVHJhY2U6OmRpZENhbmNlbEFz
eW5jQ2FsbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxlZDsKIH0KIAotUmVmUHRyPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0KCkgY29uc3QKK1JlZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5
bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiB0b3BTdGFja1RyYWNlOwogICAgIFJlZlB0
cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gcHJldmlvdXNTdGFja1RyYWNlOwpAQCAt
MTIwLDEzICsxMjAsMTMgQEAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBB
c3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY28KICAgICAgICAgICAgIHRv
cFN0YWNrVHJhY2UgPSBwcm90b2NvbE9iamVjdC5wdHIoKTsKIAogICAgICAgICBpZiAocHJldmlv
dXNTdGFja1RyYWNlKQotICAgICAgICAgICAgcHJldmlvdXNTdGFja1RyYWNlLT5zZXRQYXJlbnRT
dGFja1RyYWNlKHByb3RvY29sT2JqZWN0LnB0cigpKTsKKyAgICAgICAgICAgIHByZXZpb3VzU3Rh
Y2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5jb3B5UmVmKCkpOwog
CiAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZSA9IFdURk1vdmUocHJvdG9jb2xPYmplY3QpOwog
ICAgICAgICBzdGFja1RyYWNlID0gc3RhY2tUcmFjZS0+bV9wYXJlbnQuZ2V0KCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRvcFN0YWNrVHJhY2U7CisgICAgcmV0dXJuIHRvcFN0YWNrVHJhY2UucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAogdm9pZCBBc3luY1N0YWNrVHJhY2U6OnRydW5jYXRlKHNpemVf
dCBtYXhEZXB0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
QXN5bmNTdGFja1RyYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5j
U3RhY2tUcmFjZS5oCmluZGV4IDZlZGU2YzQyNWFiY2FhMmQ2MWU1YmI3YjFiYTE5ZTMyZTU3MjNi
NmMuLjQ5OWExZTA1ZmQ1OTQzZjlmYWVkYzMwZTBiZDNkMjBlMGM1ZGRiZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaApAQCAtNTEs
NyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREaXNwYXRjaEFzeW5jQ2FsbCgpOwogICAg
IHZvaWQgZGlkQ2FuY2VsQXN5bmNDYWxsKCk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNv
bGU6OlN0YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisgICAgUmVmPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0
OwogCiAgICAgfkFzeW5jU3RhY2tUcmFjZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDU0MmM3YzdiMzdlZmIyZTRh
NzZhMzJhMDA4ZDA2M2RiYzgwNWNkZDAuLjkwYTFkZDk2MDQ3MGE1NGVkM2IxNDY2Y2VjZmRlZmE4
MzQ5NDU4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCkBAIC0yNjEsOSArMjYxLDExIEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6
OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5k
RGlzCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JW
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hcmd1bWVudHMtPmFyZ3VtZW50Q291
bnQoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0
ZW0oaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5zLCAiY29uc29sZSJfcywgdHJ1ZSkp
OworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9y
VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5z
LCAiY29uc29sZSJfcywgdHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3Rvck9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy0+YXJndW1lbnRD
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFs
dWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1bWVudEF0KGkp
LCAiY29uc29sZSJfcywgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTI3MSw3ICsyNzMsNyBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVuZERpc3BhdGNoZXIm
IGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yODQsNyArMjg2LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9G
cm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+
YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggY2M4NDlmMDUxZmE0
MDUxOGE5ZDFhMDM0MjliYzJiNGRiY2ZiMzEwMi4uNjkwOWEzMzllYTJlM2RlNjAwZjU1ZmQ2ZmU0
NjgzNjQ2MTcxZTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSW5qZWN0ZWRTY3JpcHQ6On5J
bmplY3RlZFNjcmlwdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVj
dXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBz
YXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBF
eGVjdXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXhlY3V0ZSJfcywgaW5zcGVjdG9y
RW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChmdW5jdGlvblN0cmluZyk7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uU3RyCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVz
dWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2Ny
aXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2
ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUs
IGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVh
dGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXhwcmVzc2lvbik7CkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VP
YmplY3RJZCwgYm9vbCByZXR1cm5CeVZhCiAgICAgbWFrZUFzeW5jQ2FsbChmdW5jdGlvbiwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25P
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJu
QnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQordm9pZCBJ
bmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJjYWxsRnVuY3Rp
b25PbiJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamUKICAgICBBU1NFUlQoIXNhdmVkUmVzdWx0SW5kZXgp
OwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYg
Y2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpl
dmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpT
Qzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZl
ZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVhdGVPbkNhbGxGcmFtZSJfcywgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTExOSw1MiArMTE5LDU1IEBAIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBKU0M6OkpTVmFsdWUKICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9u
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPiYgcmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRh
aWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmpl
Y3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0RnVuY3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZp
cm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KGZ1bmN0aW9uSWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1
ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZh
bHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5n
ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAg
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7
CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpm
dW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJmdW5jdGlvbkRldGFpbHMiX3MsIGluc3BlY3RvckVu
dmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQodmFsdWUpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZSA9
IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVl
LT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5nID0g
cmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAgICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7Cisg
ICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KQog
ewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNj
cmlwdE9iamVjdCgpLCAiZ2V0UHJldmlldyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVu
Y3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJ
ZCk7CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVu
Y3Rpb24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBK
U09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFz
U3RyaW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9y
U3RyaW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmll
dz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1
bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50
IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lk
IEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50
IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBw
cm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChm
ZXRjaENvdW50ID49IDApOwpAQCAtMTgyLDEwICsxODUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5n
VHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9w
ZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwog
fQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZl
dGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRj
aENvdW50ID49IDApOwpAQCAtMjAyLDEwICsyMDUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6
Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5nVHJh
aXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90b2Nv
bDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQog
Ci12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVy
dHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzIl9zLCBpbnNwZWN0
b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTIxNywxMSArMjIwLDEyIEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFycmF5ID0g
QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwotICAgIHBy
b3BlcnRpZXMgPSBhcnJheS0+bGVuZ3RoKCkgPiAwID8gYXJyYXkgOiBudWxscHRyOworICAgIGF1
dG8gYXJyYXkgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1
bHQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKGFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAg
cHJvcGVydGllcyA9IFdURk1vdmUoYXJyYXkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVj
dGlvbkVudHJpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQs
IGludCBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpCiB7CiAgICAgQVNTRVJUKGZldGNoU3RhcnQgPj0g
MCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBAIC0yMzgsMTAgKzI0MiwxMCBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW50
cmllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29s
bGVjdGlvbkVudHJ5Pj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7CisgICAgZW50cmll
cyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50
SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInNh
dmVSZXN1bHQiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIo
KSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEFyZ3VtZW50SlNPTik7CkBAIC0y
NTIsOSArMjU2LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGludCByZXN1bHRJbmRleCA9IDA7Ci0gICAgaWYgKHJlc3VsdC0+YXNJbnRl
Z2VyKHJlc3VsdEluZGV4KSAmJiByZXN1bHRJbmRleCA+IDApCi0gICAgICAgIHNhdmVkUmVzdWx0
SW5kZXggPSByZXN1bHRJbmRleDsKKyAgICBzYXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0LT5hc0lu
dGVnZXIoKTsKIH0KIAogUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlIGNhbGxG
cmFtZXMpIGNvbnN0CkBAIC0yNjksOCArMjcxLDggQEAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMK
ICAgICAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0ID0gdG9JbnNw
ZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKLSAgICBpZiAo
cmVzdWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KQotICAgICAgICByZXR1
cm4gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZy
YW1lPj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSkucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJh
eSkKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVh
c2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAgLTI4OCwxMSArMjkwLDE1IEBAIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdChKU0M6OkpTVmFsdWUKICAgICBpZiAoIWNhbGxSZXN1bHQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxS
ZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAg
ICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51
bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmpl
Y3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBqc29uLCBjb25zdCBTdHJp
bmcmIGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpIGNvbnN0CkBAIC0zMTAsMTEgKzMx
NiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBKU09OU3RyaW5nKGNvbnN0IFN0cgogICAgIGlmIChjYWxsUmVzdWx0LnZhbHVl
KCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVj
dG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJl
c3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1
bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKEpTQzo6
SlNWYWx1ZSB0YWJsZSwgSlNDOjpKU1ZhbHVlIGNvbHVtbnMpIGNvbnN0CkBAIC0zMzIsMTEgKzM0
MiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdAogICAgIGlmICghY2FsbFJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRP
YmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxP
YmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3Qg
PSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmpl
Y3RQcmV2aWV3PiBJbmplY3RlZFNjcmlwdDo6cHJldmlld1ZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgY29uc3QKQEAgLTM0OSwxMSArMzYzLDE1IEBAIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZShKU0M6OkpTVmFsCiAg
ICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09i
amVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OnNldEV2ZW50VmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IGNk
ZWU0NWYyZDZiMzM3N2YxZTA1MjNjZmU0MDFhZTI4YmNmMmRmNmYuLmQ2M2FlZjAyNTk5NjQ4ODQ2
YzY4MzYxNWNiNTZjNjQzYzM4OWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTU5LDIwICs1OSwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgc2F2ZVJlc3VsdCB7IGZhbHNlIH07CiAgICAgICAgIFZlY3RvcjxKU0M6OkpT
VmFsdWU+IGFyZ3M7CiAgICAgfTsKLSAgICB2b2lkIGV4ZWN1dGUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBleGVjdXRl
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4
ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKIAotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBi
b29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYg
cHJvbWlzZU9iamVjdElkLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIEFzeW5jQ2FsbENhbGxiYWNrJiYpOwotICAgIHZvaWQgZXZhbHVh
dGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25z
dCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVy
bkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKLSAgICB2b2lkIGNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pOwotICAgIHZv
aWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OwotICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBS
ZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOwotICAg
IHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCk7Ci0gICAgdm9p
ZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9v
bCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQg
ZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxl
Y3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBi
b29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25PbihQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bik7CisgICAgdm9pZCBnZXRGdW5j
dGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OworICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIEpTQzo6
SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldFByZXZpZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hT
dGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7
CisgICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50
LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1
bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lk
IGdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKKyAgICB2b2lkIHNhdmVSZXN1bHQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlKSBjb25z
dDsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9iamVj
dChKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJl
dmlldyA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCA3NTY5ZjViNWQ5NzU4MDg4MjRm
NjRlYjJlZjBhNDA2YjY0YTRkOTM5Li4wOTAxNjZhOTFmYzY2YWQxY2RlNzE4MTk1M2NmNDc3M2Zm
NjZmMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUmVmPEpTT046OlZhbHVl
PiBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnUKICAgICByZXR1cm4gcmVzdWx0SlNPTlZhbHVlLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9w
dGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1
bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxs
JiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRf
cmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50
PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgY2hlY2tDYWxsUmVzdWx0KGVycm9yU3Ry
aW5nLCBtYWtlQ2FsbChmdW5jdGlvbiksIG91dF9yZXN1bHRPYmplY3QsIG91dF93YXNUaHJvd24s
IG91dF9zYXZlZFJlc3VsdEluZGV4KTsKIH0KQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUFzeW5jQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmIGZ1bmN0aW9uLAogICAgIH0KIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNr
Q2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1
bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBv
dXRfc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxS
ZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0
X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGlu
dD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgdmFsdWUgaXMgZW1wdHkiX3M7
CkBAIC0xNTEsNDkgKzE1MSw0MiBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxs
UmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OgogICAgIH0KIAog
ICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKSB7Ci0g
ICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwotICAgICAgICBBU1NFUlQoZXJy
b3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdC0+YXNTdHJp
bmcoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdFR1cGxlOwotICAgIGlmICghcmVzdWx0LT5hc09iamVjdChyZXN1bHRUdXBsZSkpIHsK
KyAgICBhdXRvIHJlc3VsdFR1cGxlID0gcmVzdWx0LT5hc09iamVjdCgpOworICAgIGlmICghcmVz
dWx0VHVwbGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3Vs
dCBpcyBub3QgYW4gT2JqZWN0Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcmVzdWx0VHVwbGUtPmdl
dE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmplY3QpKSB7CisgICAgYXV0byByZXN1bHRPYmpl
Y3QgPSByZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpOworICAgIGlmICghcmVzdWx0
T2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQg
aXMgbm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciX3M7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBib29sIHdhc1Rocm93biA9IGZhbHNlOwotICAgIGlmICghcmVz
dWx0VHVwbGUtPmdldEJvb2xlYW4oIndhc1Rocm93biJfcywgd2FzVGhyb3duKSkgeworICAgIG91
dF93YXNUaHJvd24gPSByZXN1bHRUdXBsZS0+Z2V0Qm9vbGVhbigid2FzVGhyb3duIl9zKTsKKyAg
ICBpZiAoIW91dF93YXNUaHJvd24pIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwg
ZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJvd24gZmxhZyJf
czsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG91dF9yZXN1bHRPYmplY3QgPSBCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChy
ZXN1bHRPYmplY3QpOwotCi0gICAgaWYgKHdhc1Rocm93bikKLSAgICAgICAgb3V0X3dhc1Rocm93
biA9IHdhc1Rocm93bjsKLQotICAgIGludCBzYXZlZFJlc3VsdEluZGV4OwotICAgIGlmIChyZXN1
bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcywgc2F2ZWRSZXN1bHRJbmRl
eCkpCi0gICAgICAgIG91dF9zYXZlZFJlc3VsdEluZGV4ID0gc2F2ZWRSZXN1bHRJbmRleDsKKyAg
ICBvdXRfcmVzdWx0T2JqZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdFR1cGxlLT5nZXRJbnRl
Z2VyKCJzYXZlZFJlc3VsdEluZGV4Il9zKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6
OmNoZWNrQXN5bmNDYWxsUmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBB
c3luY0NhbGxDYWxsYmFjayYgY2FsbGJhY2spCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHRPYmplY3Q7CiAgICAgT3B0aW9u
YWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsK
IAogICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmluZywgcmVzdWx0LCByZXN1bHRPYmplY3Qs
IHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAKLSAgICBjYWxsYmFjayhlcnJvclN0cmlu
ZywgV1RGTW92ZShyZXN1bHRPYmplY3QpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwor
ICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIFdURk1vdmUo
d2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggODEyM2YxZDY2ZTliMTNhZDRhZDBlY2IxYTNjYWQz
M2Y1OTc2ZDVkNy4uZjRlNmEwZmVlYTQxMWNkMDU4NTk4NGJkNzRhY2M0YjI0YWE4ZWQwZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
QmFzZS5oCkBAIC00Nyw4ICs0Nyw3IEBAIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbDsKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotdHlwZWRl
ZiBXVEY6OkZ1bmN0aW9uPHZvaWQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0aW9uYWw8Ym9vbD4mLCBPcHRpb25hbDxpbnQ+Jik+IEFz
eW5jQ2FsbENhbGxiYWNrOwordXNpbmcgQXN5bmNDYWxsQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFsPGJvb2w+JiYsIE9wdGlvbmFsPGludD4mJik+OwogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbmplY3RlZFNjcmlwdEJhc2UgewogcHVibGljOgpAQCAt
NjksMTEgKzY4LDExIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRP
YmplY3QmIGluamVjdGVkU2NyaXB0T2JqZWN0KCkgY29uc3Q7CiAgICAgRXhwZWN0ZWQ8SlNDOjpK
U1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4+IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5h
YmxlZChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmKSBjb25zdDsKICAgICBSZWY8SlNP
Tjo6VmFsdWU+IG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYpOwotICAg
IHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHRP
YmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgbWFrZUV2YWxDYWxsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIG1ha2VBc3luY0Nh
bGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgQXN5bmNDYWxsQ2FsbGJhY2smJik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2hlY2tDYWxsUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9p
ZCBjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29uc3Qg
QXN5bmNDYWxsQ2FsbGJhY2smKTsKIAogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKaW5kZXggOTBhZjdhOGYzYTMzMDU2MTZiNDk1ZTViM2NhZGYwNTMzMTFlMjM1MC4uZmNjYzhl
ZjE5ODZkODg2ZDc1NjAwZjczNjEwMGE3ZWIzOTZiNTAwNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApA
QCAtMTAyLDE5ICsxMDIsMTkgQEAgaW50IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRJZEZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiBJbmplY3RlZFNjcmlw
dCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcnNlZE9iamVj
dElkOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCwgcGFyc2VkT2Jq
ZWN0SWQpKQorICAgIGF1dG8gcGFyc2VkT2JqZWN0SWQgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KG9iamVjdElkKTsKKyAgICBpZiAoIXBhcnNlZE9iamVjdElkKQogICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsK
LSAgICBpZiAoIXBhcnNlZE9iamVjdElkLT5hc09iamVjdChyZXN1bHRPYmplY3QpKQorICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcGFyc2VkT2JqZWN0SWQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFy
ZXN1bHRPYmplY3QpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0gICAgbG9u
ZyBpbmplY3RlZFNjcmlwdElkID0gMDsKLSAgICBpZiAoIXJlc3VsdE9iamVjdC0+Z2V0SW50ZWdl
cigiaW5qZWN0ZWRTY3JpcHRJZCJfcywgaW5qZWN0ZWRTY3JpcHRJZCkpCisgICAgYXV0byBpbmpl
Y3RlZFNjcmlwdElkID0gcmVzdWx0T2JqZWN0LT5nZXRJbnRlZ2VyKCJpbmplY3RlZFNjcmlwdElk
Il9zKTsKKyAgICBpZiAoIWluamVjdGVkU2NyaXB0SWQpCiAgICAgICAgIHJldHVybiBJbmplY3Rl
ZFNjcmlwdCgpOwogCi0gICAgcmV0dXJuIG1faWRUb0luamVjdGVkU2NyaXB0LmdldChpbmplY3Rl
ZFNjcmlwdElkKTsKKyAgICByZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KCppbmplY3Rl
ZFNjcmlwdElkKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmNwcAppbmRleCA2OTNlOGIyNWM3Mzc3ODM0MGU4Mzk0MDQ2Nzg2ZDkzMThhOGEwOTI0Li5kYmEx
N2Q0YTY1YTcwZDM1ODUxYzhjNTE5YWQxZWNiZDU3MTc1MmRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcnJvcikKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogfQogCi12b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFydGlhbE1lc3NhZ2UpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCiB7CiAgICAg
aWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2
b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAK
ICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIAotICAgIGxvbmcgcmVxdWVz
dElkID0gMDsKKyAgICBpbnQgcmVxdWVzdElkID0gMDsKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtZXNzYWdlT2JqZWN0OwogCiAgICAgewpAQCAtMTE1LDQ2ICsxMTUsNTAgQEAgdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICAv
LyB0aGUgb3V0ZXIgcmVxdWVzdCdzIGlkIGp1c3QgYmVjYXVzZSB0aGUgaW5uZXIgcmVxdWVzdCBp
cyBib2d1cy4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVl
c3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIFdURjo6bnVsbG9wdCk7CiAKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXJzZWRNZXNzYWdlOwotICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSwgcGFyc2VkTWVzc2FnZSkpIHsKKyAgICAgICAgYXV0byBwYXJzZWRN
ZXNzYWdlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRNZXNzYWdlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKFBhcnNlRXJy
b3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiX3MpOwogICAgICAgICAgICAgc2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkpIHsKKyAgICAg
ICAgbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgICAgIGlm
ICghbWVzc2FnZU9iamVjdCkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmplY3QiX3MpOwogICAg
ICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVxdWVzdElkVmFsdWU7Ci0gICAg
ICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoImlkIl9zLCByZXF1ZXN0SWRWYWx1ZSkp
IHsKKyAgICAgICAgYXV0byByZXF1ZXN0SWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVl
KCJpZCJfcyk7CisgICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUpIHsKICAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3Qg
Zm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUtPmFzSW50
ZWdlcihyZXF1ZXN0SWQpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkSW50ID0gcmVxdWVzdElk
VmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIXJlcXVlc3RJZEludCkgewogICAgICAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdp
ZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICByZXF1
ZXN0SWQgPSAqcmVxdWVzdElkSW50OwogICAgIH0KIAogICAgIHsKICAgICAgICAgLy8gV2UgY291
bGQgYmUgY2FsbGVkIHJlLWVudHJhbnRseSBmcm9tIGEgbmVzdGVkIHJ1biBsb29wLCBzbyByZXN0
b3JlIHRoZSBwcmV2aW91cyBpZC4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+
IHNjb3BlZFJlcXVlc3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIHJlcXVlc3RJZCk7CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXRob2RWYWx1ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdl
T2JqZWN0LT5nZXRWYWx1ZSgibWV0aG9kIl9zLCBtZXRob2RWYWx1ZSkpIHsKKyAgICAgICAgYXV0
byBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJtZXRob2QiX3MpOworICAg
ICAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIl9zKTsKICAg
ICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBTdHJpbmcgbWV0aG9kU3RyaW5nOwotICAgICAgICBpZiAoIW1ldGhv
ZFZhbHVlLT5hc1N0cmluZyhtZXRob2RTdHJpbmcpKSB7CisgICAgICAgIGF1dG8gbWV0aG9kU3Ry
aW5nID0gbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghbWV0aG9kU3RyaW5n
KSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciX3MpOwogICAgICAgICAg
ICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NCwxMiAr
MTg4LDEyIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIH0KIAogLy8gRklYTUU6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbGVnYWN5
IEluc3BlY3Rvck9iamVjdCBzeW1ib2xzIGFyZSBubyBsb25nZXIgbmVlZGVkIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3OTg0Nz4uCi12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2Uo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHJlc3VsdCkKIHsKICAgICBzZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCkKK3Zv
aWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpT
T046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCiB7CiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJy
b3JzLnNpemUoKSk7CiAKQEAgLTI3MCw3NCArMjc0LDY0IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoT3B0aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwg
Q29tCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQ
cm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woSlNPTjo6VmFsdWUmLCBUJik+IGFzTWV0aG9kLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkK
K1QgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpT
T046OlZhbHVlJik+IGNvbnZlcnRlciwgY29uc3QgY2hhciogdHlwZU5hbWUpCiB7Ci0gICAgVCBy
ZXN1bHQoZGVmYXVsdFZhbHVlKTsKLSAgICAvLyBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25h
bHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9wdGlvbmFsIHByb3BlcnR5IHdhcyBmb3VuZC4K
LSAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID09IG51bGxwdHIsIHRoZW4gdGhpcyBp
cyBhIHJlcXVpcmVkIHByb3BlcnR5LgotICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQot
ICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFQgcmVzdWx0Owog
CiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
KQorICAgICAgICBpZiAocmVxdWlyZWQpCiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCIncGFyYW1zJyBv
YmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0
eXBlICciLCB0eXBlTmFtZSwgIicuIikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIGF1dG8gZmluZFJlc3VsdCA9IG9iamVjdC0+ZmluZChuYW1lKTsKICAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAgICAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFy
YW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVOYW1lLCAiJyB3YXMgbm90IGZv
dW5kLiIpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoIWFzTWV0
aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0KSkgewotICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCJQYXJh
bWV0ZXIgJyIsIG5hbWUsICInIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICciLCB0eXBlTmFt
ZSwgIicuIikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICByZXN1bHQgPSBj
b252ZXJ0ZXIoZmluZFJlc3VsdC0+dmFsdWUpOwogCi0gICAgaWYgKG91dF9vcHRpb25hbFZhbHVl
Rm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSlNPTjo6VmFsdWUmIHZhbHVl
LCBpbnQmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKHJlc3VsdCk7IH0KLXN0YXRp
YyBib29sIGNhc3RUb051bWJlcihKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgcmVzdWx0KSB7
IHJldHVybiB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9Ci0KLWludCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8Ym9vbD4gQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4oSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQ+KG9iamVjdCwgbmFtZSwg
dmFsdWVGb3VuZCwgMCwgJmNhc3RUb0ludGVnZXIsICJJbnRlZ2VyIik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8Ym9vbD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZK
U09OOjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwogfQogCi1kb3VibGUgQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8aW50PiBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRvdWJsZT4ob2JqZWN0
LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2FzdFRvTnVtYmVyLCAiTnVtYmVyIik7CisgICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8aW50Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJl
ZCwgJkpTT046OlZhbHVlOjphc0ludGVnZXIsICJJbnRlZ2VyIik7CiB9CiAKLVN0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitPcHRpb25hbDxkb3VibGU+IEJhY2tlbmREaXNw
YXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgIiIsICZKU09OOjpWYWx1ZTo6YXNTdHJpbmcsICJT
dHJpbmciKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxPcHRpb25hbDxkb3VibGU+Pihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzRG91YmxlLCAiTnVtYmVyIik7
CiB9CiAKLWJvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1N0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
Ym9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBmYWxzZSwgJkpTT046OlZhbHVlOjphc0Jv
b2xlYW4sICJCb29sZWFuIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7
CiB9CiAKLVJlZlB0cjxKU09OOjpPYmplY3Q+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3Qo
SlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCkKK1JlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0g
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046Ok9iamVjdD4+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc09iamVjdCwgIk9iamVj
dCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9i
amVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CiB9
CiAKLVJlZlB0cjxKU09OOjpBcnJheT4gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OkFycmF5Pj4ob2JqZWN0LCBuYW1l
LCB2YWx1ZUZvdW5kLCBudWxscHRyLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwor
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpPYmplY3Q+PihvYmplY3Qs
IG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CiB9CiAK
LVJlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitSZWZQ
dHI8SlNPTjo6QXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShKU09OOjpPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc1ZhbHVlLCAiVmFsdWUiKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6QXJyYXk+PihvYmplY3QsIG5hbWUs
IHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAppbmRleCA5NWQ5ZDgxMTg4
ZTczNWU4ZjFiNzBjYzBkZWVlMjY4MmNiNjcxNGYwLi4wMmM5NmQ3MjYzOGMyMjJmMDMwZDE0OTFj
YzliOTI2MmIwOGJlY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0yOSw4ICsyOSwx
MCBAQAogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTksNyArNjEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAgICAgdm9pZCBk
aXNhYmxlKCkgeyBtX2FscmVhZHlTZW50ID0gdHJ1ZTsgfQogCi0gICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3Mo
UmVmPEpTT046Ok9iamVjdD4mJik7CiAgICAgICAgIHZvaWQgc2VuZEZhaWx1cmUoY29uc3QgRXJy
b3JTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6CkBAIC04NywyOCArODksMjcgQEAgcHVibGljOgog
ICAgIC8vIE5vdGUgdGhhdCAndW51c2VkJyBpcyBhIHdvcmthcm91bmQgc28gdGhlIGNvbXBpbGVy
IGNhbiBwaWNrIHRoZSByaWdodCBzZW5kUmVzcG9uc2UgYmFzZWQgb24gYXJpdHkuCiAgICAgLy8g
V2hlbiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+IGlzIGZpeGVkIG9yIHRoaXMgY2xhc3Mg
aXMgcmVuYW1lZCBmb3IgdGhlIEpTT046Ok9iamVjdCBjYXNlLAogICAgIC8vIHRoZW4gdGhpcyBh
bHRlcm5hdGUgbWV0aG9kIHdpdGggYSBkdW1teSBwYXJhbWV0ZXIgY2FuIGJlIHJlbW92ZWQgaW4g
ZmF2b3Igb2YgdGhlIG9uZSB3aXRob3V0IGl0LgotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1bnVzZWQpOwot
ICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHJlc3VsdCk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7CisgICAgdm9pZCBzZW5kUmVzcG9u
c2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KTsKICAgICB2b2lk
IHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoQ29t
bW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCByZXBv
cnRQcm90b2NvbEVycm9yKE9wdGlvbmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbW1vbkVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBXVEZfSU5URVJOQUwKLSAgICBUIGdldFByb3BlcnR5VmFsdWUoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
LCBUIGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5jdGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiwg
Y29uc3QgY2hhciogdHlwZU5hbWUpOwotCi0gICAgaW50IGdldEludGVnZXIoSlNPTjo6T2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBkb3VibGUgZ2V0
RG91YmxlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgU3RyaW5nIGdldFN0cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbihKU09OOjpPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRPYmplY3QoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIE9wdGlv
bmFsPGludD4gZ2V0SW50ZWdlcihKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgcmVxdWlyZWQpOworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgU3RyaW5nIGdldFN0
cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwor
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRP
YmplY3QoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CiAKIHByaXZhdGU6CiAgICAgQmFja2VuZERpc3Bh
dGNoZXIoUmVmPEZyb250ZW5kUm91dGVyPiYmKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpTT046OlZhbHVlJik+IGNvbnZlcnRl
ciwgY29uc3QgY2hhciogdHlwZU5hbWUpOworCiAgICAgUmVmPEZyb250ZW5kUm91dGVyPiBtX2Zy
b250ZW5kUm91dGVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcio+IG1fZGlzcGF0Y2hlcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggZDcwMTBhNWM2
MmU4NjMzYTRkZDAxYjJjMDA2MDViYWFjYzljOGM3OS4uNTg3N2UwZDc0MTA4MmY3MTFhNWZmZWQ0
MzVjZWZjMGYyMTMxMzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKQEAgLTI3LDEyICsyNywxOSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2Ug
UHJvdG9jb2wgewogCit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+
OworCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEJpbmRpbmdUcmFpdHM7CiAKIHRlbXBsYXRl
PEpTT046OlZhbHVlOjpUeXBlIHR5cGU+IHN0cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsK
QEAgLTQ0LDI5ICs1MSwyMyBAQCB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1
Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0
cjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFs
dWUpCisgICAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICAgICAgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFycmF5ID0gdmFsdWUtPmFz
QXJyYXkoKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOwogICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoSlNPTjo6QXJyYXlPZjxUPikgPT0gc2l6ZW9mKEpTT046OkFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPTjo6QXJyYXlPZjxU
Pio+KHN0YXRpY19jYXN0PEpTT046OkFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6QXJyYXlPZjxUPj4oc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEpTT046OkFycmF5QmFzZT4oYXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVl
KTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICAgICAgYXV0byBhcnJheSA9IHZhbHVl
LT5hc0FycmF5KCk7CisgICAgICAgIEFTU0VSVChhcnJheSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkuZ2V0KCkp
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoYXJyYXktPmdldChpKS5wdHIoKSk7CisjZW5kaWYKICAgICB9CiB9OwogCkBAIC04
NSw2ICs4Niw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8aW50PiA6IFByaW1p
dGl2ZUJpbmRpbmdUcmFpdHM8SlNPTjo6VmFsdWU6OlR5cGU6CiAKIH0KIAotdXNpbmcgUHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM7Ci0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVj
dENvbnNvbGVDbGllbnQuY3BwCmluZGV4IDQ2ZDBiNjk0MzI4ZWUwNDE3NjY1MDNmZTU2ZjlkNmMy
Mjk5NzU3YzYuLmJjNjM2OWEwYzM5ZDliYjY0MDk1ZjVkODcwNDRkNjA3NTNjZDQ4N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTEzNiwyOCArMTM2LDIyIEBAIHZvaWQgSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmCiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpzdGFy
dENvbnNvbGVQcm9maWxlKCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotCiAgICAgaWYg
KG1fZGVidWdnZXJBZ2VudCkgewogICAgICAgICBtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFj
dGl2ZVZhbHVlID0gbV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpOwotICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZhbHNlKTsK
KyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAg
ICAgfQogCi0gICAgaWYgKG1fc2NyaXB0UHJvZmlsZXJBZ2VudCkgewotICAgICAgICBjb25zdCBi
b29sIGluY2x1ZGVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50
LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0gICAgfQorICAgIGlm
IChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCisgICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+
c3RhcnRUcmFja2luZyh0cnVlKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OnN0b3BDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLQog
ICAgIGlmIChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCi0gICAgICAgIG1fc2NyaXB0UHJvZmlsZXJB
Z2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdl
bnQtPnN0b3BUcmFja2luZygpOwogCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBtX3Byb2ZpbGVS
ZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVl
KTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNo
b3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZDRkYjU2M2ViZDc2NTMyNjYwNGY1
MTJjMzFlOWRiMjg2ZDEwODNmNC4uYTYwZjI1ZDQzN2ZiZTlmZGZjZTZiYTU4ZDNlODJjMjZkZDU2
ZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjMx
LDkgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9u
dGVuZEluaXRpYWxpemVkKCkKICAgICBpZiAobV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24pIHsK
ICAgICAgICAgbV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKIAotICAgICAgICBF
cnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkuZW5hYmxl
KGlnbm9yZWQpOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkucGF1c2UoaWdub3JlZCk7
CisgICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5lbmFibGUoKTsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJBZ2VudCgpLnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggNWI5YTcxNTQwODUwODY0MWNhMDYxYWVjZjhm
MDExODQ2ZjcxMDQ0OC4uODY4NmQ2OTQxYjc4NDc5OTViMmRmZmRkNjc4YjY2ZDNiNDgxZGRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFnZW50LmNwcApAQCAtNTQsNDQgKzU0LDQ5IEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAg
ICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKIAotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2VuYWJs
ZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0KQotICAgICAg
ICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LmNvcHlSZWYoKSwgbV9wZW5kaW5n
SW5zcGVjdERhdGEuc2Vjb25kLmNvcHlSZWYoKSk7CisgICAgICAgIGluc3BlY3QobV9wZW5kaW5n
SW5zcGVjdERhdGEuZmlyc3QucmVsZWFzZU5vbk51bGwoKSwgbV9wZW5kaW5nSW5zcGVjdERhdGEu
c2Vjb25kLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgZm9yIChhdXRvJiB0ZXN0Q29tbWFuZCA6
IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCh0ZXN0Q29tbWFuZCk7CiAKICAgICBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9l
bmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFn
ZW50Ojppbml0aWFsaXplZChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoKQogewogICAgIG1fZW52aXJvbm1lbnQu
ZnJvbnRlbmRJbml0aWFsaXplZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6aW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMpCit2b2lk
IEluc3BlY3RvckFnZW50OjppbnNwZWN0KFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIG9iamVjdCwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cykKIHsKICAgICBpZiAobV9l
bmFibGVkKSB7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KG9iamVjdFRv
SW5zcGVjdCwgaGludHMpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5zcGVjdChX
VEZNb3ZlKG9iamVjdCksIFdURk1vdmUoaGludHMpKTsKICAgICAgICAgbV9wZW5kaW5nSW5zcGVj
dERhdGEuZmlyc3QgPSBudWxscHRyOwogICAgICAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNv
bmQgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW5z
cGVjdERhdGEuZmlyc3QgPSBvYmplY3RUb0luc3BlY3Q7Ci0gICAgbV9wZW5kaW5nSW5zcGVjdERh
dGEuc2Vjb25kID0gaGludHM7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuZmlyc3QgPSBXVEZN
b3ZlKG9iamVjdCk7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25kID0gV1RGTW92ZSho
aW50cyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAppbmRleCA4NThjNjlhYzJlYjg2
ZGMxODI4YTJmM2UxMjY3MTU4MDllODlmMzVhLi41OTRjZWU3MTc0MDYwNTk5Yzg5OTM2ZDBjMjcz
NmExNTNhYTI3M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKQEAgLTQwLDI2ICs0MCwyNCBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIGNsYXNzIEJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9y
RW52aXJvbm1lbnQ7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBZ2VudChBZ2VudENvbnRleHQmKTsKLSAg
ICB+SW5zcGVjdG9yQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwor
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFj
a2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGluaXRpYWxpemVkKEVycm9yU3Ry
aW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGluaXRpYWxpemVkKCk7CiAKICAgICAvLyBDb21tYW5k
TGluZUFQSQotICAgIHZvaWQgaW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMp
OworICAgIHZvaWQgaW5zcGVjdChSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
JiwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cyk7CiAKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdl
bnQuY3BwCmluZGV4IDAwYjFlY2MxYWY0ODA3MGVmZWRjNzY2YTNiYTZmZjViNmY0YmE3MDAuLjJm
OWY4ZjA1OWNiMTM5MTNhZmEzMGY2NDk3N2UwMzNiNTM0Yzk0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1
ZGl0QWdlbnQuY3BwCkBAIC01Nyw0MSArNTcsNDEgQEAgdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewogfQog
Ci12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnNldHVwKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1cChPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBp
ZiAoaGFzQWN0aXZlQXVkaXQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwg
dGVhcmRvd24gYmVmb3JlIGNhbGxpbmcgc2V0dXAgYWdhaW4iX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JT
dHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBj
YWxsaW5nIHNldHVwIGFnYWluIl9zKTsKKworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluamVjdGVkU2NyaXB0
Lmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gZXhlY3V0aW9uQ29udGV4dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9u
Q29udGV4dElkIl9zKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsKIAogICAgIG1faW5qZWN0ZWRX
ZWJJbnNwZWN0b3JBdWRpdFZhbHVlLnNldCh2bSwgY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KSk7Ci0gICAgaWYgKCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYklu
c3BlY3RvckF1ZGl0IG9iamVjdC4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYkluc3BlY3RvckF1ZGl0
IG9iamVjdC4iX3MpOwogCiAgICAgcG9wdWxhdGVBdWRpdE9iamVjdChnbG9iYWxPYmplY3QsIG1f
aW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+
JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovPj4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKGNvbnN0IFN0cmluZyYgdGVzdCwgT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNj
cmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1vdmUoZXhl
Y3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgU3RyaW5nQnVpbGRlciBmdW5jdGlvblN0cmluZzsKICAgICBmdW5jdGlvblN0
cmluZy5hcHBlbmRMaXRlcmFsKCIoZnVuY3Rpb24oV2ViSW5zcGVjdG9yQXVkaXQpIHsgXCJ1c2Ug
c3RyaWN0XCI7IHJldHVybiBldmFsKGAoIik7CkBAIC0xMDMsNiArMTAzLDggQEAgdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRlc3QsIGNvbnMKICAgICBpZiAobV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUp
CiAgICAgICAgIG9wdGlvbnMuYXJncyA9IHsgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFs
dWUuZ2V0KCkgfTsKIAorICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGlu
dD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwpAQCAtMTEzLDE2ICsxMTUsMjEgQEAgdm9pZCBJbnNwZWN0b3JB
dWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRl
c3QsIGNvbnMKICAgICBpbmplY3RlZFNjcmlwdC5leGVjdXRlKGVycm9yU3RyaW5nLCBmdW5jdGlv
blN0cmluZy50b1N0cmluZygpLCBXVEZNb3ZlKG9wdGlvbnMpLCByZXN1bHQsIHdhc1Rocm93biwg
c2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSB9
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6dGVhcmRvd24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVk
aXRBZ2VudDo6dGVhcmRvd24oKQogewotICAgIGlmICghaGFzQWN0aXZlQXVkaXQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwgc2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRv
d24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFoYXNBY3RpdmVBdWRpdCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgY2FsbCBzZXR1cCBiZWZvcmUg
Y2FsbGluZyB0ZWFyZG93biJfcyk7CiAKICAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRW
YWx1ZS5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JBdWRp
dEFnZW50OjpoYXNBY3RpdmVBdWRpdCgpIGNvbnN0CkBAIC0xMzksNyArMTQ2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIGF1ZGl0T2JqZWN0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlND
OjpKU1ZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CisgICAgYXVk
aXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
VmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoUHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oCmluZGV4IDVi
NmQ4YWFiNzIyNjNmMThhYTY0MTA3ODVjMDFjOWJhOGM0ZDMwZjguLmJmNTA2YzM2ZDJkZmYzZjZm
Y2E1OTlmNjdlNTg1NGEyNjhhN2IxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKQEAgLTQw
LDcgKzQwLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0
OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckF1ZGl0QWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQXVkaXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckF1ZGl0QWdlbnQpOwpAQCAt
NTMsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIEF1ZGl0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXR1cChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkKSBmaW5hbDsKLSAgICB2b2lkIHJ1bihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGVzdCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duKSBmaW5hbDsKLSAgICB2b2lkIHRlYXJkb3duKEVycm9yU3RyaW5nJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IHJ1bihjb25zdCBTdHJpbmcmIHRl
c3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHRlYXJkb3duKCkgZmluYWw7
CiAKICAgICBib29sIGhhc0FjdGl2ZUF1ZGl0KCkgY29uc3Q7CiAKQEAgLTY0LDcgKzYzLDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0gICAgdmlydHVh
bCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAppbmRleCAxMDVmZTZmYzZjMjIwOGVmNzYzNzFlYWVkZGJmYTQ3MzFmYmZi
NjU0Li4xM2I2MjM0ZDFmNTMyODUwZTMwMDUyNzk3M2MyMTViNzJlMzZhZTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTUzLDggKzUzLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlbmQKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgU3RyaW5nIGVycm9yU3RyaW5n
OwotICAgIGRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2NhcmRWYWx1ZXMoKQpAQCAtNjMsMTAgKzYyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJkVmFsdWVzKCkKICAgICBtX2V4cGly
ZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtODAsMTcgKzc5LDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFi
bGUoRXJyb3JTdHJpbmcmKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlcy5z
aXplKCk7ICsraSkKICAgICAgICAgbWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQoKm1fZnJvbnRl
bmREaXNwYXRjaGVyLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgZmFsc2UpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpkaXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKQogewogICAgIG1fY29uc29sZU1lc3NhZ2VzLmNsZWFy
KCk7CiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CkBAIC05OSw2ICsxMDIs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpCiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
bWVzc2FnZXNDbGVhcmVkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0CkBAIC0xMDgsOCAr
MTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJhc0VuYWJs
ZWQoKSBjb25zdAogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQogewotICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgY2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsKKyAgICBj
bGVhck1lc3NhZ2VzKCk7CiAKICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgbV9jb3VudHMuY2xl
YXIoKTsKQEAgLTExNywxMCArMTIxLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJl
c2V0KCkKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
c3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBtZXNzYWdlKQogewotICAgIGlmIChtZXNz
YWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKSB7Ci0gICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgICAgIGNsZWFyTWVzc2FnZXMoaWdub3JlZCk7Ci0gICAgfQorICAgIGlm
IChtZXNzYWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKQorICAgICAgICBjbGVhck1l
c3NhZ2VzKCk7CiAKICAgICBhZGRDb25zb2xlTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKIH0K
QEAgLTE5MSwxMiArMTkzLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp0YWtlSGVh
cFNuYXBzaG90KGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgaWYgKCFtX2hlYXBBZ2VudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkb3VibGUgdGlt
ZXN0YW1wOwotICAgIFN0cmluZyBzbmFwc2hvdERhdGE7Ci0gICAgbV9oZWFwQWdlbnQtPnNuYXBz
aG90KGlnbm9yZWQsICZ0aW1lc3RhbXAsICZzbmFwc2hvdERhdGEpOworICAgIGF1dG8gcmVzdWx0
ID0gbV9oZWFwQWdlbnQtPnNuYXBzaG90KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1w
LCBzbmFwc2hvdERhdGEsIHRpdGxlLmlzRW1wdHkoKSA/IG51bGxwdHIgOiAmdGl0bGUpOworICAg
IGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkp
OworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1wLCBzbmFw
c2hvdERhdGEsIHRpdGxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBsYWJlbCkK
QEAgLTI1NiwxNSArMjU4LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25z
b2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IGNvCiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYg
Y2hhbm5lbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+PiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmdldExvZ2dp
bmdDaGFubmVscygpCiB7CiAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gbG9n
Z2luZyBjaGFubmVscy4KLSAgICBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
TGV2ZWwpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKaW5kZXggNzhjYWYxYWQwOGFl
NTdiMWUwNzg1YzlhZGQ1MTY3NTM2YWZiZjI5Ni4uZWQ4ZTFmNjk5YTVkMGM5MWNkMDU2NjkxYTdk
YjIxOTgwZjIzNWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9ySGVhcEFn
ZW50OwogY2xhc3MgU2NyaXB0QXJndW1lbnRzOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBDb25z
b2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JDb25zb2xlQWdlbnQpOwpAQCAtNjEsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpc2NhcmRWYWx1ZXMoKSBmaW5hbDsKIAogICAgIC8vIENvbnNvbGVCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+
PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwgY29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVzc2FnZXMoKSBvdmVycmlkZTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbD4+PiBnZXRMb2dnaW5nQ2hhbm5lbHMoKSBvdmVycmlkZTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgc2V0SGVhcEFnZW50KEluc3BlY3RvckhlYXBBZ2VudCogYWdl
bnQpIHsgbV9oZWFwQWdlbnQgPSBhZ2VudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDEzZmMyYzUzYjVhYzQ2NWU2ZTNkNjZhYmUwNTVjMGVlNmQ0ZGMwNzAuLjQx
ZjRiYTQyN2VhNGY3OWRjMTQ0N2ZlYTU5NjRhZDgwNjNjYmRmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02NCwyNSArNjQsMjUgQEAgc3RhdGljIGJvb2wgaXNXZWJL
aXRJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKICAgICByZXR1cm4gc291
cmNlVVJMLnN0YXJ0c1dpdGgoIl9fSW5qZWN0ZWRTY3JpcHRfIikgJiYgc291cmNlVVJMLmVuZHNX
aXRoKCIuanMiKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9u
OjpUeXBlPiBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxKU0M6OkJy
ZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5n
KQogewotICAgIGF1dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZT4odHlwZVN0cmluZyk7CisgICAgYXV0byB0eXBlID0g
UHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5cGVTdHJpbmcpOwogICAgIGlmICghdHlw
ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2lu
dCBhY3Rpb24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAKICAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6TG9nOgorICAgIGNh
c2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpMb2c6CiAgICAg
ICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6TG9nOwogCi0gICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6
RXZhbHVhdGU6CisgICAgY2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6U291bmQ6CisgICAgY2FzZSBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNvdW5kOgogICAgICAgICByZXR1cm4gSlND
OjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlNvdW5kOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6UHJvYmU6CisgICAg
Y2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlByb2JlOgog
ICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlByb2JlOwogICAg
IH0KIApAQCAtOTEsMzAgKzkxLDI5IEBAIHN0YXRpYyBPcHRpb25hbDxKU0M6OkJyZWFrcG9pbnQ6
OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoRXJyCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQs
IEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQorc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0
aW9ucyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMsIEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50
OjpBY3Rpb25zVmVjdG9yJiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQogewogICAgIFN0cmlu
ZyBjb25kaXRpb247CiAgICAgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yIGFjdGlvbnM7
CiAgICAgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZTsKICAgICBzaXplX3QgaWdub3JlQ291bnQg
PSAwOwogCi0gICAgaWYgKG9wdGlvbnNQYXlsb2FkKSB7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2Fk
LT5nZXRTdHJpbmcoImNvbmRpdGlvbiJfcywgY29uZGl0aW9uKTsKKyAgICBpZiAob3B0aW9ucykg
eworICAgICAgICBjb25kaXRpb24gPSBvcHRpb25zLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50T3B0aW9uczo6Y29uZGl0aW9uS2V5KTsKIAotICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFjdGlvbnNQYXlsb2FkOwotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0
QXJyYXkoImFjdGlvbnMiX3MsIGFjdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgYXV0byBhY3Rpb25z
UGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBjb3VudCA9IGFjdGlvbnNQ
YXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewogICAgICAgICAgICAgYWN0
aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGFjdGlvbk9iamVjdDsKLSAgICAgICAgICAgICAgICBpZiAoIWFjdGlvbnNQYXlsb2Fk
LT5nZXQoaSktPmFzT2JqZWN0KGFjdGlvbk9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24tb2JqZWN0IGl0ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJf
czsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBTdHJpbmcgYWN0aW9uVHlwZVN0cmluZzsKLSAgICAgICAgICAgICAg
ICBpZiAoIWFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBhY3Rpb25UeXBlU3RyaW5n
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gYWN0aW9uVHlwZVN0cmluZyA9IGFjdGlvbk9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6dHlwZUtl
eSk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25UeXBlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdHlwZSBmb3IgaXRlbSBpbiBnaXZlbiBh
Y3Rpb25zIl9zOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAg
ICAgIH0KQEAgLTEyNSwzMyArMTI0LDMzIEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlv
bnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wCiAKICAg
ICAgICAgICAgICAgICBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbiBhY3Rpb24oKmFjdGlvblR5cGUp
OwogCi0gICAgICAgICAgICAgICAgYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImRhdGEiX3MsIGFj
dGlvbi5kYXRhKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uZGF0YSA9IGFjdGlvbk9iamVjdC0+
Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6ZGF0YUtleSk7
CiAKICAgICAgICAgICAgICAgICAvLyBTcGVjaWZ5aW5nIGFuIGlkZW50aWZpZXIgaXMgb3B0aW9u
YWwuIFRoZXkgYXJlIHVzZWQgdG8gY29ycmVsYXRlIHByb2JlIHNhbXBsZXMKICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgZnJvbnRlbmQgYWNyb3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0
aW9ucyBhbmQgc2VncmVnYXRlIG9iamVjdCBncm91cHMuCi0gICAgICAgICAgICAgICAgYWN0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywgYWN0aW9uLmlkKTsKKyAgICAgICAgICAgICAgICBh
Y3Rpb24uaWQgPSBhY3Rpb25PYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50QWN0aW9uOjppZEtleSkudmFsdWVPcihKU0M6Om5vQnJlYWtwb2ludEFjdGlvbklE
KTsKIAogICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1vdmUoYWN0aW9uKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0Qm9v
bGVhbigiYXV0b0NvbnRpbnVlIl9zLCBhdXRvQ29udGludWUpOwotICAgICAgICBvcHRpb25zUGF5
bG9hZC0+Z2V0SW50ZWdlcigiaWdub3JlQ291bnQiX3MsIGlnbm9yZUNvdW50KTsKKyAgICAgICAg
YXV0b0NvbnRpbnVlID0gb3B0aW9ucy0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRPcHRpb25zOjphdXRvQ29udGludWVLZXkpLnZhbHVlT3IoZmFsc2UpOworICAgICAg
ICBpZ25vcmVDb3VudCA9IG9wdGlvbnMtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50T3B0aW9uczo6aWdub3JlQ291bnRLZXkpLnZhbHVlT3IoMCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGNhbGxiYWNrKGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRp
bnVlLCBpZ25vcmVDb3VudCk7CiB9CiAKLU9wdGlvbmFsPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6U291cmNl
SUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK09wdGlvbmFsPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
UHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsK
LSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQsIFsmXSAoY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wg
YXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJl
YWtwb2ludD4geworICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFBy
b3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbJl0gKGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBh
Y3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25h
bDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKICAgICAgICAgcmV0dXJuIFByb3RvY29sQnJlYWtwb2lu
dChzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIFdURk1vdmUo
YWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogICAgIH0pOwogfQogCi1PcHRp
b25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9uc1BheWxvYWQpCitPcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2Nv
bEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6
ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJu
IHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJy
b3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBK
U0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51
ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsK
KyAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSwgWyZdIChjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9v
bCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50PiB7CiAgICAgICAgIHJldHVybiBQcm90b2NvbEJyZWFrcG9pbnQodXJsLCBpc1Jl
Z2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25z
KSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CkBAIC0yMDcsOSArMjA2
LDkgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6Om1h
dGNoZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBtX3VybCA9PSBzY3JpcHRV
Ukw7CiB9CiAKLVJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1JlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8
SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbXSAoY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlv
bnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKKyAgICByZXR1cm4g
cGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJp
bmcsIFdURk1vdmUob3B0aW9ucyksIFtdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpC
cmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNp
emVfdCBpZ25vcmVDb3VudCkgewogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpjcmVh
dGUoSlNDOjpub0JyZWFrcG9pbnRJRCwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRv
Q29udGludWUsIGlnbm9yZUNvdW50KTsKICAgICB9KTsKIH0KQEAgLTIzNCwxMCArMjMzLDEwIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kUm91dGVyKiwgQmFja2VuCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewog
ICAgIGlmIChlbmFibGVkKCkpCi0gICAgICAgIGRpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RS
ZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisgICAgICAgIGludGVybmFsRGlzYWJs
ZShyZWFzb24gPT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShi
b29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgZm9yIChhdXRvKiBsaXN0
ZW5lciA6IGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycykpCiAgICAgICAgIGxpc3RlbmVyLT5kZWJ1
Z2dlcldhc0Rpc2FibGVkKCk7CkBAIC0yNzcsMTkgKzI3NiwyMSBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogewotICAgIGlmIChlbmFibGVkKCkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiRGVidWdnZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIkRlYnVnZ2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
Ci0gICAgZW5hYmxlKCk7CisgICAgaW50ZXJuYWxFbmFibGUoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aXNhYmxlKCkKIHsKLSAgICBkaXNhYmxlKGZhbHNlKTsKKyAgICBpbnRlcm5hbERpc2FibGUoZmFs
c2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50c0FjdGl2ZSgpIGNvbnN0CkBAIC0yOTcsMjggKzI5OCwzMCBAQCBib29sIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRzQWN0aXZlKCkgY29uc3QKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5icmVha3BvaW50c0FjdGl2ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tUcmFjZURlcHRoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGRlcHRoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoaW50IGRlcHRoKQogewogICAg
IGlmIChtX2FzeW5jU3RhY2tUcmFjZURlcHRoID09IGRlcHRoKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZGVwdGggPCAwKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlVuZXhwZWN0ZWQgbmVnYXRpdmUgZGVwdGgiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGRlcHRoIDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJVbmV4cGVjdGVkIG5lZ2F0aXZlIGRlcHRoIl9zKTsKIAogICAgIG1fYXN5bmNTdGFja1RyYWNl
RGVwdGggPSBkZXB0aDsKIAogICAgIGlmICghbV9hc3luY1N0YWNrVHJhY2VEZXB0aCkKICAgICAg
ICAgY2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3Ry
aW5nJiwgYm9vbCBhY3RpdmUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAg
ICBpZiAoYWN0aXZlKQogICAgICAgICBtX2RlYnVnZ2VyLmFjdGl2YXRlQnJlYWtwb2ludHMoKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fZGVidWdnZXIuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1
c2VkKCkgY29uc3QKQEAgLTM0MiwyMCArMzQ1LDIwIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6dXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
CiAgICAgbV9wYXVzZURhdGEgPSBXVEZNb3ZlKGRhdGEpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpT
T046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6
OkFzc2VydFBhdXNlUmVhc29uOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAgICAgaWYgKCFtZXNzYWdl
LmlzTnVsbCgpKQogICAgICAgICByZWFzb24tPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgcmV0
dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVj
dCgpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25Q
YXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCitzdGF0aWMgUmVmPEpTT046
Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25QYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZVRleHQpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkNTUFZp
b2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQogICAgICAgICAuc2V0RGlyZWN0aXZlKGRpcmVj
dGl2ZVRleHQpCiAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlYXNvbi0+b3BlbkFj
Y2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVjdCgpOwogfQogCiBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpidWlsZEJyZWFrcG9pbnRQYXVz
ZVJlYXNvbihKU0M6OkJyZWFrcG9pbnRJRCBkZWJ1Z2dlckJyZWFrcG9pbnRJRCkKQEAgLTM2OCw3
ICszNzEsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
dWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihKU0M6OkJyZQogICAgICAgICAgICAgICAgIGF1dG8g
cmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50UGF1c2VSZWFzb246OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRCcmVha3BvaW50SWQocHJvdG9jb2xCcmVha3Bv
aW50SUQpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZWFzb24tPmFzT2JqZWN0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
ODYsNyArMzg5LDExIEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmJ1aWxkRXhjZXB0aW9uUGF1c2VSZWFzb24oSlNDOjpKU1ZhCiAgICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKS0+b3BlbkFjY2Vzc29ycygpOworICAgIGF1dG8g
ZXhjZXB0aW9uVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgIGlmICghZXhj
ZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGV4Y2Vw
dGlvblZhbHVlLT5hc09iamVjdCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNDkyLDcgKzQ5
OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkRGlzcGF0Y2hBc3luY0NhbGwo
KQogICAgICAgICBtX3BlbmRpbmdBc3luY0NhbGxzLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAot
c3RhdGljIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2Vy
TG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCitzdGF0
aWMgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlv
bihjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKIHsKICAgICBBU1NF
UlQoZGVidWdnZXJCcmVha3BvaW50LmlzUmVzb2x2ZWQoKSk7CiAKQEAgLTUwMSw1MCArNTA4LDQ5
IEBAIHN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1
Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlCiAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGRlYnVn
Z2VyQnJlYWtwb2ludC5saW5lTnVtYmVyKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbG9j
YXRpb24tPnNldENvbHVtbk51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKCkp
OwotCiAgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwg
SlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYg
Y29sdW1uTnVtYmVyKQorc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNv
dXJjZUlEJiBzb3VyY2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5O
dW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi5nZXRJbnRlZ2VyKCJsaW5lTnVtYmVyIl9zLCBs
aW5lTnVtYmVyKSkgeworICAgIGF1dG8gbGluZU51bWJlclZhbHVlID0gbG9jYXRpb24uZ2V0SW50
ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpsaW5lTnVtYmVyS2V5KTsKKyAgICBp
ZiAoIWxpbmVOdW1iZXJWYWx1ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGxpbmVOdW1iZXIgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7CiAgICAgICAgIHNv
dXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgU3RyaW5nIHNjcmlwdElEU3RyOwotICAgIGlmICghbG9jYXRpb24uZ2V0U3RyaW5nKCJz
Y3JpcHRJZCJfcywgc2NyaXB0SURTdHIpKSB7CisgICAgbGluZU51bWJlciA9ICpsaW5lTnVtYmVy
VmFsdWU7CisKKyAgICBhdXRvIHNjcmlwdElEU3RyID0gbG9jYXRpb24uZ2V0U3RyaW5nKFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OnNjcmlwdElkS2V5KTsKKyAgICBpZiAoIXNjcmlwdElE
U3RyKSB7CiAgICAgICAgIHNvdXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmV4ZXBjdGVkIG5vbi1zdHJpbmcgc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRp
b24iX3M7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzb3VyY2VJRCA9IHNj
cmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gMDsKLSAgICBsb2NhdGlv
bi5nZXRJbnRlZ2VyKCJjb2x1bW5OdW1iZXIiX3MsIGNvbHVtbk51bWJlcik7CisgICAgY29sdW1u
TnVtYmVyID0gbG9jYXRpb24uZ2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
Ojpjb2x1bW5OdW1iZXJLZXkpLnZhbHVlT3IoMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkws
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVt
bk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBvdXRMb2NhdGlvbnMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dElkLCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+
JiYgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKCFvcHRpb25hbFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3BlY2lmaWVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdXJsID09ICF1cmxSZWdleCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3Bl
Y2lmaWVkIl9zKTsKIAotICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uYWxVUkwgPyAqb3B0aW9uYWxV
UkwgOiAqb3B0aW9uYWxVUkxSZWdleCwgISFvcHRpb25hbFVSTFJlZ2V4LCBsaW5lTnVtYmVyLCBv
cHRpb25hbENvbHVtbk51bWJlciA/ICpvcHRpb25hbENvbHVtbk51bWJlciA6IDAsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBh
dXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsICEhdXJsID8gdXJsIDogdXJsUmVnZXgsICEhdXJsUmVnZXgsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlci52YWx1ZU9yKDApLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAo
IXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9jb2xCcmVha3BvaW50LT5pZCgp
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlv
biBhbHJlYWR5IGV4aXN0cy4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1f
cHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9j
b2xCcmVha3BvaW50LT5pZCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cy4iX3MpOwogCiAgICAgbV9w
cm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5zZXQocHJvdG9jb2xCcmVh
a3BvaW50LT5pZCgpLCAqcHJvdG9jb2xCcmVha3BvaW50KTsKIAotICAgIG91dExvY2F0aW9ucyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gbG9jYXRpb25zID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1dG8mIFtzb3VyY2VJRCwgc2NyaXB0XSA6
IG1fc2NyaXB0cykgewogICAgICAgICBTdHJpbmcgc2NyaXB0VVJMRm9yQnJlYWtwb2ludHMgPSAh
c2NyaXB0LnNvdXJjZVVSTC5pc0VtcHR5KCkgPyBzY3JpcHQuc291cmNlVVJMIDogc2NyaXB0LnVy
bDsKQEAgLTU2MSwyOSArNTY3LDI5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpCiAKICAgICAg
ICAgZGlkU2V0QnJlYWtwb2ludCgqcHJvdG9jb2xCcmVha3BvaW50LCBkZWJ1Z2dlckJyZWFrcG9p
bnQpOwogCi0gICAgICAgIG91dExvY2F0aW9ucy0+YWRkSXRlbShidWlsZERlYnVnZ2VyTG9jYXRp
b24oZGVidWdnZXJCcmVha3BvaW50KSk7CisgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShidWls
ZERlYnVnZ2VyTG9jYXRpb24oZGVidWdnZXJCcmVha3BvaW50KSk7CiAgICAgfQogCi0gICAgKm91
dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7
IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgV1RGTW92ZShsb2NhdGlvbnMpIH0gfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91
dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRB
Y3R1YWxMb2NhdGlvbikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0
aW9uPj4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoUmVmPEpTT046Ok9i
amVjdD4mJiBsb2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEpTQzo6U291cmNlSUQg
c291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5O
dW1iZXI7CiAgICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291
cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0
SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKHNjcmlwdEl0ZXJh
dG9yID09IG1fc2NyaXB0cy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQg
aW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogCi0gICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQ
cm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBzb3VyY2VJRCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBwcm90b2Nv
bEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5n
LCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICBpZiAoIXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgLy8gRG9uJ3Qgc2F2ZSBg
cHJvdG9jb2xCcmVha3BvaW50YCBpbiBgbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJy
ZWFrcG9pbnRJRGAgYmVjYXVzZSBpdAogICAgIC8vIHdhcyBzZXQgc3BlY2lmaWNhbGx5IGZvciB0
aGUgZ2l2ZW4gYHNvdXJjZUlEYCwgd2hpY2ggaXMgdW5pcXVlLCBtZWFuaW5nIHRoYXQgaXQgd2ls
bCBuZXZlcgpAQCAtNTkxLDIwICs1OTcsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjoKIAog
ICAgIGF1dG8gZGVidWdnZXJCcmVha3BvaW50ID0gcHJvdG9jb2xCcmVha3BvaW50LT5jcmVhdGVE
ZWJ1Z2dlckJyZWFrcG9pbnQobV9uZXh0RGVidWdnZXJCcmVha3BvaW50SUQrKywgc291cmNlSUQp
OwogCi0gICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRl
YnVnZ2VyQnJlYWtwb2ludCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJl
c29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJl
c29sdmVCcmVha3BvaW50KHNjcmlwdEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcmVzb2x2ZSBicmVh
a3BvaW50Il9zKTsKIAotICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9u
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghc2V0
QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzIl9zKTsK
IAogICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29sQnJlYWtwb2ludCwgZGVidWdnZXJCcmVh
a3BvaW50KTsKIAotICAgIG91dEFjdHVhbExvY2F0aW9uID0gYnVpbGREZWJ1Z2dlckxvY2F0aW9u
KGRlYnVnZ2VyQnJlYWtwb2ludCk7Ci0gICAgKm91dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJl
YWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwg
YnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkgfSB9OwogfQogCiB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xCcmVha3Bv
aW50JiBwcm90b2NvbEJyZWFrcG9pbnQsIEpTQzo6QnJlYWtwb2ludCYgZGVidWdnZXJCcmVha3Bv
aW50KQpAQCAtNjMwLDcgKzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3Rv
Y29sQnJlYWtwb2ludElEKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCYgcHJvdG9jb2xCcmVha3BvaW50SUQpCiB7CiAgICAgbV9wcm90b2NvbEJy
ZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5yZW1vdmUocHJvdG9jb2xCcmVha3BvaW50
SUQpOwogCkBAIC02NDEsMjQgKzY0MiwzNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlBybwogICAg
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIobV9kZWJ1Z2dlci52bSgpKTsKICAgICAgICAg
bV9kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVVudGlsTmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVVbnRp
bE5leHRSdW5Mb29wKCkKIHsKLSAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0g
ICAgICAgIHJldHVybjsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAK
LSAgICByZXN1bWUoZXJyb3JTdHJpbmcpOworICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3Ry
aW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IGF1dG8gcmVzdW1lUmVzdWx0ID0gcmVzdW1lKCk7CisgICAgaWYgKCFyZXN1bWVSZXN1bHQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bWVSZXN1bHQuZXJyb3IoKSk7CiAKICAg
ICBtX2VuYWJsZVBhdXNlV2hlbklkbGUgPSB0cnVlOwogCiAgICAgcmVnaXN0ZXJJZGxlSGFuZGxl
cigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QmIGxvY2F0aW9uKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKFJlZjxKU09OOjpPYmplY3Q+JiYg
bG9jYXRpb24pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAobV9jb250
aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5y
ZW1vdmVCcmVha3BvaW50KCptX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCk7
CkBAIC02NjksMTkgKzY4MCwxOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRp
bnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgdW5zaWdu
ZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXI7CiAgICAgaWYgKCFwYXJz
ZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMu
ZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQo
KSkgewogICAgICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNz
aW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Ig
c2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogICAgIH0KIAogICAgIGF1dG8gcHJvdG9j
b2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmlu
Zywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgaWYgKCFwcm90b2Nv
bEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2lu
dGAgaW4gYG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1
c2UgaXQKICAgICAvLyBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50IHRoYXQgd2lsbCBiZSByZW1v
dmVkIGFzIHNvb24gYXMgYGxvY2F0aW9uYCBpcyByZWFjaGVkLgpAQCAtNjkxLDggKzcwMSw3IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBpZiAoIXJlc29sdmVCcmVha3BvaW50KHNjcmlw
dEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50KSkgewogICAgICAgICBtX2RlYnVn
Z2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVz
dW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3Bv
aW50Il9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAgICAgfQogCiAgICAgaWYgKCFzZXRC
cmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKQEAgLTcwMSw3ICs3MTAsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIC8vIGhpdCB0aGlzIG5ldyBicmVha3BvaW50IG9y
IG5vdC4KICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVh
a3BvaW50ID0gV1RGTW92ZShkZWJ1Z2dlckJyZWFrcG9pbnQpOwpAQCAtNzEwLDQxICs3MTksNDIg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIC8vIFNvIGRvbid0IGlzc3VlIGEgcmVzdW1l
ZCBldmVudCB1bmxlc3Mgd2UgZXhpdCB0aGUgVk0gd2l0aG91dCBwYXVzaW5nLgogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBl
czo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHNjcmlwdElkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+
JiYgaXNSZWdleCkKIHsKLSAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEID0gc2NyaXB0SURTdHIu
dG9JbnRQdHIoKTsKLSAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwotICAg
IGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQudG9JbnRQdHIoKSk7CisgICAg
aWYgKGl0ID09IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiX3MpOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CisgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaElu
VGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUudmFsdWVP
cihmYWxzZSksIGlzUmVnZXgudmFsdWVPcihmYWxzZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIFN0cmluZyogc2NyaXB0U291cmNlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRT
b3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpTY3JpcHRJZCYgc2NyaXB0SWQpCiB7Ci0g
ICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAg
YXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKLSAg
ICBlbHNlCi0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBz
Y3JpcHRJZCI7CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkLnRvSW50UHRy
KCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIik7CisKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLnNvdXJjZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4mIGRldGFpbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlv
bkRldGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChmdW5j
dGlvbklkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlv
bklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmpl
Y3RlZCBzY3JpcHQgZm9yIGdpdmVuIGZ1bmN0aW9uSWQiX3MpOwogCisgICAgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBkZXRhaWxzOwogICAgIGluamVjdGVkU2Ny
aXB0LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgZGV0YWlscyk7
CisgICAgaWYgKCFkZXRhaWxzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOworCisgICAgcmV0dXJuIGRldGFpbHMucmVsZWFzZU5vbk51bGwoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlQXROZXh0T3Bwb3J0dW5pdHko
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiByZWFzb24sIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZGF0YSkKQEAgLTc5Miw1NyArODAyLDc1IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQm
IGJyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cGF1c2UoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cGF1c2UoKQogewogICAgIHNjaGVkdWxlUGF1c2VBdE5leHRPcHBv
cnR1bml0eShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpQYXVzZU9uTmV4dFN0
YXRlbWVudCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQogewotICAgIGlm
ICghbV9wYXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIG9yIHdhaXRpbmcgdG8gcGF1
c2UiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9i
amVjdCAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTXVzdCBiZSBwYXVzZWQgb3Igd2FpdGluZyB0byBwYXVzZSJfcyk7CiAKICAg
ICBjYW5jZWxQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KCk7CiAgICAgbV9kZWJ1Z2dlci5jb250aW51
ZVByb2dyYW0oKTsKICAgICBtX2NvbmRpdGlvblRvRGlzcGF0Y2hSZXN1bWVkID0gU2hvdWxkRGlz
cGF0Y2hSZXN1bWVkOjpXaGVuQ29udGludWVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwTmV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzdGVwTmV4dCgpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3Rl
cEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBOZXh0RXhwcmVzc2lvbigp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
dGVwT3ZlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcigpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLnN0ZXBPdmVyU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBJbnRvKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBJbnRvKCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuc3RlcEludG9TdGF0ZW1lbnQo
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c3RlcE91dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJv
clN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1f
ZGVidWdnZXIuc3RlcE91dE9mRnVuY3Rpb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVnaXN0ZXJJZGxlSGFuZGxlcigpCkBAIC04Nzcs
ODYgKzkwNSw5OCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZEJlY29tZUlkbGUo
KQogCiAgICAgbV9jb25kaXRpb25Ub0Rpc3BhdGNoUmVzdW1lZCA9IFNob3VsZERpc3BhdGNoUmVz
dW1lZDo6Tm87CiAKLSAgICBpZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKSB7Ci0gICAgICAgIEVy
cm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHBhdXNlKGlnbm9yZWQpOwotICAgIH0KKyAgICBp
ZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKQorICAgICAgICBwYXVzZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKGJvb2wgZW5hYmxlZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghZW5hYmxlZCkgewogICAgICAgICBtX2RlYnVnZ2Vy
LnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVha3BvaW50KG51bGxwdHIpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3Bv
aW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5
bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKICAgICBtX2RlYnVnZ2VyLnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVh
a3BvaW50KFdURk1vdmUoYnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3RhdGVTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhjb25zdCBTdHJpbmcmIHN0
YXRlU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4gYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQ7CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludDsKIAogICAgIGlmIChzdGF0ZVN0cmluZyA9PSAi
YWxsIikgewotICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtw
b2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgICAgIGFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJy
b3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgICAgICBpZiAoIWFsbEV4Y2VwdGlvbnNC
cmVha3BvaW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nID09ICJ1
bmNhdWdodCIpIHsKLSAgICAgICAgdW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7Cisg
ICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgICAgIGlmICgh
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVTdHJpbmcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKKyAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVT
dHJpbmcpKTsKIAogICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPbkFsbEV4Y2VwdGlvbnNCcmVha3Bv
aW50KFdURk1vdmUoYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKICAgICBtX2RlYnVnZ2VyLnNl
dFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KFdURk1vdmUodW5jYXVnaHRFeGNl
cHRpb25zQnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFBhdXNlT25Bc3NlcnRpb25zKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGlmICghZW5hYmxlZCkgewogICAgICAgICBtX3BhdXNlT25Bc3NlcnRpb25zQnJlYWtwb2ludCA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAg
ICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIG1fcGF1c2VPbkFzc2VydGlvbnNCcmVha3Bv
aW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uTWljcm90YXNrcyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9wYXVzZU9uTWljcm90YXNrc0JyZWFr
cG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25z
KSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX3BhdXNlT25NaWNyb3Rhc2tz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIC8qIGVtdWxh
dGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lSWQmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYm
ICAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQpOwotICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGNhbGxGcmFtZUlkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIGNhbGxGcmFtZUlkIl9zKTsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwogCkBAIC05NjYsMjggKzEwMDYsMzEgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3Rl
ZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3Rh
Y2suZ2V0KCksIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLAotICAgICAgICBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCksIGluY2x1ZGVDb21tYW5kTGluZUFQSSAmJiAq
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlICYmICpyZXR1cm5CeVZhbHVlLCBn
ZW5lcmF0ZVByZXZpZXcgJiYgKmdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCAmJiAqc2F2ZVJl
c3VsdCwKLSAgICAgICAgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAg
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8Ym9vbD4gd2FzVGhyb3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRl
eDsKKworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcs
IG1fY3VycmVudENhbGxTdGFjay5nZXQoKSwgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVj
dEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxzZSksIHJldHVybkJ5VmFs
dWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgc2F2ZVJl
c3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRlQ29uc29sZSgpOworCisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdh
c1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gs
IE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYm
IG9wdGlvbmFsSXNSZWdleCkKIHsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVUkwgbXVzdCBub3QgYmUgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVVJMIG11c3Qgbm90IGJlIGVtcHR5Il9zKTsKIAotICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSAmJiAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAg
IGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4OworICAg
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZS52YWx1ZU9yKGZhbHNl
KTsKKyAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXgudmFsdWVPcihmYWxzZSk7CiAK
LSAgICBpZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJbmplY3RlZFNj
cmlwdCh1cmwpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJsYWNrYm94aW5nIG9mIGludGVy
bmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5h
bFNjcmlwdHMnIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghY2FzZVNlbnNp
dGl2ZSAmJiAhaXNSZWdleCAmJiBpc1dlYktpdEluamVjdGVkU2NyaXB0KHVybCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQmxhY2tib3hpbmcgb2YgaW50ZXJuYWwgc2NyaXB0cyBp
cyBjb250cm9sbGVkIGJ5ICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyciX3Mp
OwogCiAgICAgQmxhY2tib3hDb25maWcgY29uZmlnIHsgdXJsLCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4IH07CiAgICAgaWYgKHNob3VsZEJsYWNrYm94KQpAQCAtMTAwNCw2ICsxMDQ3LDggQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICAgICAgICAgIGJsYWNrYm94VHlwZSA9IEpTQzo6RGVi
dWdnZXI6OkJsYWNrYm94VHlwZTo6RGVmZXJyZWQ7CiAgICAgICAgIG1fZGVidWdnZXIuc2V0Qmxh
Y2tib3hUeXBlKHNvdXJjZUlELCBibGFja2JveFR5cGUpOwogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2hvdWxkQmxhY2tib3hVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkBAIC0xMDM5LDEwICsxMDg0LDEwIEBAIFN0cmluZyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpE
ZWJ1Z2dlcjo6U2NyaXB0CiAgICAgcmV0dXJuIHNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KGJvb2wgc2hvdWxkUGF1c2UpCiB7CiAgICAgaWYgKHNob3VsZFBhdXNlID09IG1fcGF1c2VGb3JJ
bnRlcm5hbFNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIG1fcGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMgPSBzaG91bGRQYXVzZTsKIApAQCAtMTA1Miw2
ICsxMDk3LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvckludGVy
bmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWwKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBtX2RlYnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hU
eXBlKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpT
Qzo6RGVidWdnZXI6OlNjcmlwdCYgc2NyaXB0KQpAQCAtMTA2MSwxMiArMTEwOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3Vy
Y2VJRCwgY29uc3QgSlNDOjpECiAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNjcmlwdC5zb3VyY2VV
Ukw7CiAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBzb3VyY2VNYXBVUkxGb3JTY3JpcHQo
c2NyaXB0KTsKIAotICAgIGNvbnN0IGJvb2wgaXNNb2R1bGUgPSBzY3JpcHQuc291cmNlUHJvdmlk
ZXItPnNvdXJjZVR5cGUoKSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxl
OwotICAgIGNvbnN0IGJvb2wqIGlzQ29udGVudFNjcmlwdCA9IHNjcmlwdC5pc0NvbnRlbnRTY3Jp
cHQgPyAmc2NyaXB0LmlzQ29udGVudFNjcmlwdCA6IG51bGxwdHI7Ci0gICAgU3RyaW5nKiBzb3Vy
Y2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZzb3VyY2VVUkwgOiBudWxscHRyOwotICAgIFN0
cmluZyogc291cmNlTWFwVVJMUGFyYW0gPSBzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/IG51
bGxwdHIgOiAmc291cmNlTWFwcGluZ1VSTDsKLQotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5z
Y3JpcHRQYXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNj
cmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29u
dGVudFNjcmlwdCwgc291cmNlVVJMUGFyYW0sIHNvdXJjZU1hcFVSTFBhcmFtLCBpc01vZHVsZSA/
ICZpc01vZHVsZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zY3JpcHRQ
YXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5z
dGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIHNjcmlwdC5pc0Nv
bnRlbnRTY3JpcHQsIHNvdXJjZVVSTCwgc291cmNlTWFwcGluZ1VSTCwgc2NyaXB0LnNvdXJjZVBy
b3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1v
ZHVsZSk7CiAKICAgICBtX3NjcmlwdHMuc2V0KHNvdXJjZUlELCBzY3JpcHQpOwogCkBAIC0xMTgw
LDEyICsxMjIyLDEzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAgICAgIGlmIChhdXRv
IGRlYnVnZ2VyQnJlYWtwb2ludElkID0gbV9kZWJ1Z2dlci5wYXVzaW5nQnJlYWtwb2ludElEKCkp
IHsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFr
cG9pbnQgfHwgZGVidWdnZXJCcmVha3BvaW50SWQgIT0gbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1
Z2dlckJyZWFrcG9pbnQtPmlkKCkpOwogICAgICAgICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9z
LCBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QnJlYWtwb2ludCkpOwotICAgICAgICAgICAg
ZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgYnVpbGRCcmVha3BvaW50UGF1c2VSZWFz
b24oZGVidWdnZXJCcmVha3BvaW50SWQpKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygi
b3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpCcmVha3BvaW50KSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBwYXVzZVJlYXNvbiA9IGJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29u
KGRlYnVnZ2VyQnJlYWtwb2ludElkKSkKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgi
b3JpZ2luYWxEYXRhIl9zLCBwYXVzZVJlYXNvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
fSBlbHNlIGlmIChtX3ByZUJsYWNrYm94UGF1c2VEYXRhKSB7CiAgICAgICAgICAgICBkYXRhID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3Jp
Z2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShtX3ByZUJsYWNrYm94UGF1c2VSZWFzb24pKTsKLSAgICAgICAgICAgIGRhdGEtPnNl
dFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIG1fcHJlQmxhY2tib3hQYXVzZURhdGEpOworICAgICAg
ICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG1fcHJlQmxhY2tib3hQYXVzZVJlYXNvbikpOworICAg
ICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgbV9wcmVCbGFja2JveFBh
dXNlRGF0YS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICB1cGRhdGVQYXVz
ZVJlYXNvbkFuZERhdGEoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QmxhY2ti
b3hlZFNjcmlwdCwgV1RGTW92ZShkYXRhKSk7CiAgICAgfQpAQCAtMTIwNiw3ICsxMjQ5LDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6RGUKICAgICAgICAgICAgIGFzeW5jU3RhY2tUcmFjZSA9IGl0
LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3QoKTsKICAgICB9CiAKLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKGluamVjdGVkU2NyaXB0KSwgbV9w
YXVzZVJlYXNvbiwgbV9wYXVzZURhdGEsIGFzeW5jU3RhY2tUcmFjZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcyhpbmplY3RlZFNjcmlwdCksIFBy
b3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3BhdXNlUmVhc29uKSwgbV9w
YXVzZURhdGEuY29weVJlZigpLCBXVEZNb3ZlKGFzeW5jU3RhY2tUcmFjZSkpOwogCiAgICAgbV9q
YXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtMTIzMSwxMiArMTI3NCwxNSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHBheWxvYWQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHNh
bXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlvbklEKSwgdHJ1ZSk7Cisg
ICAgaWYgKCFwYXlsb2FkKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIHJlc3VsdCA9IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRQcm9i
ZUlkKGFjdGlvbklEKQogICAgICAgICAuc2V0QmF0Y2hJZChiYXRjaElkKQogICAgICAgICAuc2V0
U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAobV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFw
c2VkVGltZSgpLnNlY29uZHMoKSkKLSAgICAgICAgLnNldFBheWxvYWQoV1RGTW92ZShwYXlsb2Fk
KSkKKyAgICAgICAgLnNldFBheWxvYWQocGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAg
ICAucmVsZWFzZSgpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRTYW1wbGVQcm9iZShX
VEZNb3ZlKHJlc3VsdCkpOwogfQpAQCAtMTI2Nyw5ICsxMzEzLDggQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbiByZWEKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJy
ZWFrcG9pbnRTdGF0ZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBmb3IgKGF1
dG8mIHByb3RvY29sQnJlYWtwb2ludElEIDogY29weVRvVmVjdG9yKG1fZGVidWdnZXJCcmVha3Bv
aW50c0ZvclByb3RvY29sQnJlYWtwb2ludElELmtleXMoKSkpCi0gICAgICAgIHJlbW92ZUJyZWFr
cG9pbnQoaWdub3JlZCwgcHJvdG9jb2xCcmVha3BvaW50SUQpOworICAgICAgICByZW1vdmVCcmVh
a3BvaW50KHByb3RvY29sQnJlYWtwb2ludElEKTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY2xlYXIoKTsKIApAQCAtMTMxNyw3ICsxMzYyLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDbGVhckdsb2JhbE9iamVjdCgpCiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmdsb2JhbE9iamVjdENsZWFyZWQoKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2Jq
ZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIl9zOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDMwZmY5ZjNjMjZkMWFlMDQ2NmE3MWE1YmY2MzY2
MTgyOTU0ZmEyZDguLjRmYzNmODRhNmUyMTJiODg1YjZhMmYzMjhmODFlZGY3NWY5MGE0NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiBjbGFzcyBBc3luY1N0YWNrVHJhY2U7CiBjbGFzcyBJbmplY3RlZFNjcmlw
dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIERlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOwpAQCAtNTYsNyArNTUsNyBAQCBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibAogcHVibGljOgogICAgIH5JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KCkgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gZGVi
dWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBiYWNrdHJhY2VPYmplY3RHcm91cDsKIApAQCAtNjYsMzEgKzY1LDMxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQog
CiAgICAgLy8gRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoRXJyb3JTdHJpbmcmLCBpbnQg
ZGVwdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcm
LCBib29sIGFjdGl2ZSkgZmluYWw7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JT
dHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVy
LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4+JiBsb2NhdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9ucywgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRBY3R1YWxMb2NhdGlvbikg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZVVudGls
TmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24pIGZpbmFsOwot
ICAgIHZvaWQgc3RlcE5leHQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdmVy
KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVwSW50byhFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc3RlcE91dChFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgcGF1
c2UoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBmaW5hbDsKLSAgICB2
b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQs
IFN0cmluZyogc2NyaXB0U291cmNlKSBmaW5hbDsKLSAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VP
bkRlYnVnZ2VyU3RhdGVtZW50cyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25z
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXVzZVN0YXRlLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbkFzc2VydGlvbnMoRXJyb3JT
dHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uTWljcm90YXNrcyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNl
Rm9ySW50ZXJuYWxTY3JpcHRzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkgZmluYWw7
Ci0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVz
dWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBP
cHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
b3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hv
dWxkQmxhY2tib3gsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVn
ZXgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBc3luY1N0YWNrVHJhY2VEZXB0
aChpbnQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEJyZWFr
cG9pbnRzQWN0aXZlKGJvb2wpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4+IHNldEJyZWFrcG9pbnRCeVVybChp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdXJsUmVnZXgs
IE9wdGlvbmFsPGludD4mJiBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+Pj4gc2V0QnJlYWtwb2ludChSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBj
b250aW51ZVVudGlsTmV4dFJ1bkxvb3AoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBjb250aW51ZVRvTG9jYXRpb24oUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlv
bikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE5leHQoKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwT3ZlcigpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBJbnRvKCkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE91dCgpIGZpbmFsOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHBhdXNlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVzdW1lKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+Pj4gc2VhcmNoSW5Db250ZW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0
SWQmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUs
IE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRTY3JpcHRTb3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpT
Y3JpcHRJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4+IGdldEZ1bmN0aW9uRGV0YWlscyhjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uSWQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldFBhdXNlT25FeGNlcHRpb25zKGNvbnN0IFN0cmluZyYgc3RhdGUsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0UGF1c2VPbkFzc2VydGlvbnMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25NaWNyb3Rhc2tzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxp
bnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgc2hvdWxkQmxhY2tib3gsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9u
YWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2Vy
dmVyCiAgICAgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKSBmaW5hbDsKQEAgLTE0MiwxMSArMTQxLDExIEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuYWJsZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKGJvb2wg
aXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOwog
CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSBjb25z
dCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQotICAgIHZpcnR1YWwgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAgICBKU0M6OkRlYnVn
Z2VyJiBkZWJ1Z2dlcigpIHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KIApAQCAtMTY2LDggKzE2NSw4
IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUHJvdG9jb2xCcmVha3BvaW50IHsKICAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgT3B0aW9u
YWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIEpTQzo6U291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51bGxwdHIpOwotICAgICAgICBzdGF0aWMg
T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51
bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9t
UGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyA9IG51bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVh
a3BvaW50PiBmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyA9IG51bGxwdHIpOwogCiAgICAg
ICAgIFByb3RvY29sQnJlYWtwb2ludCgpOwogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoSlND
OjpTb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcmIGNvbmRpdGlvbiA9IG51bGxTdHJpbmcoKSwgSlNDOjpCcmVha3BvaW50OjpB
Y3Rpb25zVmVjdG9yJiYgYWN0aW9ucyA9IHsgfSwgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZSwg
c2l6ZV90IGlnbm9yZUNvdW50ID0gMCk7CkBAIC0xNzUsMTIgKzE3NCwxMiBAQCBwcml2YXRlOgog
CiAgICAgICAgIFJlZjxKU0M6OkJyZWFrcG9pbnQ+IGNyZWF0ZURlYnVnZ2VyQnJlYWtwb2ludChK
U0M6OkJyZWFrcG9pbnRJRCwgSlNDOjpTb3VyY2VJRCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CisgICAgICAgIGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogICAgICAgICBib29sIG1hdGNo
ZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CisgICAg
ICAgIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICAgICBKU0M6OlNvdXJjZUlEIG1fc291cmNlSUQgeyBKU0M6Om5vU291cmNl
SUQgfTsKQEAgLTIwMiw3ICsyMDEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0QnJlYWtwb2lu
dChKU0M6OkJyZWFrcG9pbnQmKTsKICAgICB2b2lkIGRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xC
cmVha3BvaW50JiwgSlNDOjpCcmVha3BvaW50Jik7CiAKLSAgICBib29sIGFzc2VydFBhdXNlZChF
cnJvclN0cmluZyYpOworICAgIGJvb2wgYXNzZXJ0UGF1c2VkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYpOwogICAgIHZvaWQgY2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAgIHZvaWQg
Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKTsKICAgICB2b2lkIGNsZWFyUGF1c2VEZXRh
aWxzKCk7CkBAIC0yNDgsOCArMjQ3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBtX3BhdXNlZEdsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+IG1fY3VycmVudENhbGxTdGFjazsKIAotICAgIEhhc2hNYXA8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xCcmVha3BvaW50PiBt
X3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwotICAgIEhhc2hNYXA8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgSlNDOjpCcmVha3Bv
aW50c1ZlY3Rvcj4gbV9kZWJ1Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7
CisgICAgSGFzaE1hcDxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xC
cmVha3BvaW50PiBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwor
ICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIEpTQzo6QnJlYWtw
b2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3BvaW50c0ZvclByb3RvY29sQnJlYWtwb2ludElE
OwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fbmV4dERlYnVnZ2VyQnJlYWtwb2ludElEIHsgSlND
Ojpub0JyZWFrcG9pbnRJRCArIDEgfTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IG1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2Vu
dC5jcHAKaW5kZXggOGM2MjFhZDQxYzRkYTUwMDQzZDMwMjIwMGE0NmZhZTllZmM5NzE4Yy4uODVj
ZWQ5ZjNkZjYyMjMwMWI5NWUzM2U0OTM1Y2JiZjE2MmI3ZTMzMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFw
QWdlbnQuY3BwCkBAIC01NiwyOCArNTYsMjUgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXMKIAog
dm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERp
c2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxl
KGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6
OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1fZW5hYmxl
ZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIG1fZW52aXJvbm1lbnQudm0oKS5oZWFwLmFk
ZE9ic2VydmVyKHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBp
ZiAoIW1fZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJl
YWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9lbmFi
bGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkhlYXAgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3MpOwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV90cmFja2luZyA9
IGZhbHNlOwpAQCAtODUsMTcgKzgyLDIxIEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cC5yZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIGNsZWFySGVhcFNuYXBzaG90cygpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6
Z2MoKQogewogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2bS5oZWFwLmNv
bGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJvclN0cmluZyYsIGRv
dWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHN0ZDo6dHVwbGU8ZG91YmxlLCBQcm90b2NvbDo6SGVhcDo6SGVhcFNuYXBzaG90RGF0
YT4+IEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoKQogewogICAgIFZNJiB2bSA9IG1fZW52
aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xMDMsOCArMTA0
LDggQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91
YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICBIZWFwU25hcHNob3RCdWlsZGVyIHNu
YXBzaG90QnVpbGRlcih2bS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7CiAgICAgc25hcHNob3RCdWls
ZGVyLmJ1aWxkU25hcHNob3QoKTsKIAotICAgICp0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4
ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwotICAgICpzbmFwc2hv
dERhdGEgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUm
IG5vZGUpIHsKKyAgICBhdXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3Rv
cHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7CisgICAgYXV0byBzbmFwc2hvdERhdGEg
PSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIG5vZGUp
IHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS5jZWxsLT5zdHJ1Y3R1
cmUodm0pKSB7CiAgICAgICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZW52
aXJvbm1lbnQuY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoZ2xvYmFsT2JqZWN0KSkKQEAg
LTExMywzNyArMTE0LDQ1IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJv
clN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CisKKyAgICByZXR1cm4geyB7IHRpbWVzdGFtcCwg
c25hcHNob3REYXRhIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IHRydWU7CiAKLSAgICBkb3VibGUgdGltZXN0YW1wOwotICAgIFN0cmluZyBzbmFw
c2hvdERhdGE7Ci0gICAgc25hcHNob3QoZXJyb3JTdHJpbmcsICZ0aW1lc3RhbXAsICZzbmFwc2hv
dERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gc25hcHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsK
IAorICAgIGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KHRpbWVzdGFt
cCwgc25hcHNob3REYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SGVhcEFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCi0gICAgZG91YmxlIHRpbWVzdGFt
cDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9yU3RyaW5nLCAm
dGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNuYXBzaG90KCk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3Zl
KHJlc3VsdC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0g
PSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJh
Y2tpbmdDb21wbGV0ZSh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi1PcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5v
ZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2ln
bmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKQorT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5z
cGVjdG9ySGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpCiB7
CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cFByb2ZpbGVyKCk7CiAgICAgaWYgKCFoZWFwUHJvZmlsZXIpIHsKQEAgLTE2Niw4ICsxNzUsMTAg
QEAgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50Ojpub2RlRm9y
SGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3IKICAgICByZXR1cm4gb3B0aW9uYWxOb2RlOwogfQog
Ci12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIE9wdGlvbmFsPFN0cmluZz4mIHJlc3VsdFN0cmluZywg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZnVuY3Rpb25EZXRh
aWxzLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBvYmplY3RQcmV2
aWV3KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoaW50
IGhlYXBPYmplY3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICAvLyBQcmV2ZW50IHRoZSBjZWxsIGZyb20gZ2V0dGluZyBjb2xsZWN0ZWQgYXMgd2Ug
bG9vayBpdCB1cC4KICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMTc2LDUzICsxODcsNDggQEAgdm9pZCBJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVj
dElkLAogICAgIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGhlYXBPYmplY3RJZCk7CiAgICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9k
ZT4gb3B0aW9uYWxOb2RlID0gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5n
LCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIC8vIFN0cmluZyBwcmV2aWV3LgogICAgIEpTQ2VsbCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+
Y2VsbDsKLSAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHRTdHJpbmcg
PSBhc1N0cmluZyhjZWxsKS0+dHJ5R2V0VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBhc1N0cmluZyhj
ZWxsKS0+dHJ5R2V0VmFsdWUoKSwgbnVsbHB0ciwgbnVsbHB0ciB9IH07CiAKICAgICAvLyBCaWdJ
bnQgcHJldmlldy4KLSAgICBpZiAoY2VsbC0+aXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgcmVz
dWx0U3RyaW5nID0gSlNCaWdJbnQ6OnRyeUdldFN0cmluZyh2bSwgYXNIZWFwQmlnSW50KGNlbGwp
LCAxMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzSGVhcEJpZ0lu
dCgpKQorICAgICAgICByZXR1cm4geyB7IEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcodm0sIGFzSGVh
cEJpZ0ludChjZWxsKSwgMTApLCBudWxscHRyLCBudWxscHRyIH0gfTsKIAogICAgIC8vIEZJWE1F
OiBQcm92aWRlIHByZXZpZXcgaW5mb3JtYXRpb24gZm9yIEludGVybmFsIE9iamVjdHM/IENvZGVC
bG9jaywgRXhlY3V0YWJsZSwgZXRjLgogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmICghc3RydWN0dXJlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJf
cyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9i
YWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxP
YmplY3QiX3MpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwotICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWls
cyAtIEluamVjdGVkU2NyaXB0Il9zKTsKIAogICAgIC8vIEZ1bmN0aW9uIHByZXZpZXcuCiAgICAg
aWYgKGNlbGwtPmluaGVyaXRzPEpTRnVuY3Rpb24+KHZtKSkgeworICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+IGZ1bmN0aW9uRGV0YWlsczsKICAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBjZWxsLCBmdW5j
dGlvbkRldGFpbHMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZnVuY3Rpb25EZXRh
aWxzKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIHsgeyBudWxsU3RyaW5nKCksIGZ1bmN0aW9uRGV0YWlscywgbnVsbHB0ciB9
IH07CiAgICAgfQogCiAgICAgLy8gT2JqZWN0IHByZXZpZXcuCi0gICAgb2JqZWN0UHJldmlldyA9
IGluamVjdGVkU2NyaXB0LnByZXZpZXdWYWx1ZShjZWxsKTsKKyAgICByZXR1cm4geyB7IG51bGxT
dHJpbmcoKSwgbnVsbHB0ciwgaW5qZWN0ZWRTY3JpcHQucHJldmlld1ZhbHVlKGNlbGwpIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVjdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxP
YmplY3RHcm91cCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4+IEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KGludCBoZWFwT2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBmcm9tIGdldHRp
bmcgY29sbGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVu
dC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTIzMSwyOSArMjM3LDI2IEBA
IHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjCiAgICAgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhcE9iamVjdElkKTsKICAgICBjb25zdCBPcHRp
b25hbDxIZWFwU25hcHNob3ROb2RlPiBvcHRpb25hbE5vZGUgPSBub2RlRm9ySGVhcE9iamVjdElk
ZW50aWZpZXIoZXJyb3JTdHJpbmcsIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKICAgICBpZiAoIW9w
dGlvbmFsTm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSlNDZWxsKiBjZWxsID0gb3B0aW9uYWxOb2RlLT5jZWxs
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBp
ZiAoIXN0cnVjdHVyZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9i
amVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghc3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFn
bG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmpl
Y3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0
ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXAgPSBvcHRpb25hbE9iamVjdEdyb3VwID8gKm9wdGlv
bmFsT2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGNlbGwsIG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICBhdXRvIG9iamVjdCA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoY2VsbCwgb2JqZWN0R3JvdXAsIHRydWUpOworICAgIGlm
ICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9y
OiB1bmFibGUgdG8gY2FzdCBPYmplY3QiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAogc3RhdGljIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6
VHlwZSBwcm90b2NvbFR5cGVGb3JIZWFwT3BlcmF0aW9uKENvbGxlY3Rpb25TY29wZSBzY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckhlYXBBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKaW5kZXggZGVmNmFjZGU5NDYwZTcxMjgwMDQxZGFhNjVmY2Nk
Njg1ZTBmN2MwZi4uY2FhNTEyZDBhYjJlMTBhODhlMGVlNjBjMmUzMmQ3NDM5NDIyMjdhZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKQEAgLTQwLDcgKzQwLDYgQEAgc3RydWN0IEhlYXBTbmFwc2hv
dE5vZGU7CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluc3BlY3RvckhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1Ymxp
YyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpIZWFwT2JzZXJ2ZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckhlYXBBZ2VudCk7CkBAIC01NCwx
NCArNTMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdjKEVycm9yU3Ry
aW5nJikgZmluYWw7Ci0gICAgdm9pZCBzbmFwc2hvdChFcnJvclN0cmluZyYsIGRvdWJsZSogdGlt
ZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkgZmluYWw7Ci0gICAgdm9pZCBzdGFydFRyYWNr
aW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBmaW5hbDsKLSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBpbnQgaGVhcE9i
amVjdElkLCBPcHRpb25hbDxTdHJpbmc+JiByZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6
RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9i
amVjdFByZXZpZXc+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJp
bmcmLCBpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZ2MoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJvdG9jb2w6OkhlYXA6OkhlYXBTbmFw
c2hvdERhdGE+PiBzbmFwc2hvdCgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdG9wVHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxzdGQ6OnR1cGxlPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25E
ZXRhaWxzPiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4+IGdldFBy
ZXZpZXcoaW50IGhlYXBPYmplY3RJZCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBnZXRSZW1vdGVPYmplY3Qo
aW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgZmluYWw7CiAKICAg
ICAvLyBKU0M6OkhlYXBPYnNlcnZlcgogICAgIHZvaWQgd2lsbEdhcmJhZ2VDb2xsZWN0KCkgZmlu
YWw7CkBAIC03Myw3ICs3Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9u
OjpUeXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKTsKIAogcHJpdmF0ZToK
LSAgICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRl
bnRpZmllcihFcnJvclN0cmluZyYsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKKyAg
ICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRp
ZmllcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmll
cik7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IDlhYjFhZjc0
ZDQzMzYzNzFmNjQ5MjliZjYwNjVhNDJjZTFiOTlmODQuLjA1MWM5ZjMzNjgyOGJkZTI5OTQwMmQz
Y2E2OTIxZTZlOTIyOTM4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAt
NDksMTggKzQ5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBi
ICYmICpiOwotfQotCi1zdGF0aWMgaW50IGFzSW50KGNvbnN0IGludCogaSkKLXsKLSAgICBpZiAo
aSkKLSAgICAgICAgcmV0dXJuICppOwotICAgIHJldHVybiAwOwotfQotCiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6Okluc3BlY3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmIGNvbnRleHQpCiAg
ICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoIlJ1bnRpbWUiX3MpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdlcikKQEAgLTgxLDI1ICs2OSw0
NiBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9y
UmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3Vs
dCwgT3B0aW9uYWw8U3RyaW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlPiYgcmFuZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmVuYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gdHJ1ZTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZGlzYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAg
ICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUsIFN0cmluZyAvKiBtZXNzYWdlICovLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Pj4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV92bSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBjaGVja1N5bnRheCht
X3ZtLCBKU0M6Om1ha2VTb3VyY2UoZXhwcmVzc2lvbiwgeyB9KSwgZXJyb3IpOwogCisgICAgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZT4gcmVzdWx0OworICAgIFN0
cmluZyBtZXNzYWdlOworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4g
cmFuZ2U7CisKICAgICBzd2l0Y2ggKGVycm9yLnN5bnRheEVycm9yVHlwZSgpKSB7CiAgICAgY2Fz
ZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JOb25lOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKICAgICAgICAgYnJlYWs7CisK
ICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvcklycmVjb3ZlcmFibGU6Ci0gICAgICAg
ICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpJcnJlY292ZXJh
YmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
OjpJcnJlY292ZXJhYmxlOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJyb3I6
OlN5bnRheEVycm9yVW50ZXJtaW5hdGVkTGl0ZXJhbDoKLSAgICAgICAgKnJlc3VsdCA9IFByb3Rv
Y29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWluYXRlZExpdGVyYWw7CisgICAg
ICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWlu
YXRlZExpdGVyYWw7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3lu
dGF4RXJyb3JSZWNvdmVyYWJsZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1l
OjpTeW50YXhFcnJvclR5cGU6OlJlY292ZXJhYmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2Nv
bDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJsZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xMDcsMjkgKzExNiw0MiBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFByb3RvYwog
ICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZSgpOwogICAgICAgICByYW5nZSA9IGJ1aWxk
RXJyb3JSYW5nZU9iamVjdChlcnJvci50b2tlbigpLm1fbG9jYXRpb24pOwogICAgIH0KKworICAg
IHJldHVybiB7IHsgKnJlc3VsdCwgbWVzc2FnZSwgV1RGTW92ZShyYW5nZSkgfSB9OwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3
LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1
cmUgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29s
PiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiAvKiBl
bXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJ
ZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJp
bmcsIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247CisgICAgT3B0
aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9y
YXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0
aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAKLSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFz
Qm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1
c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3Io
ZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUpIHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNh
YmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgp
OwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBhc0Jvb2woaW5j
bHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJh
dGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRS
ZXN1bHRJbmRleCk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxz
ZSksIHJldHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9y
KGZhbHNlKSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRl
Q29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7cmVzdWx0LnJlbGVhc2VOb25OdWxs
KCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSB9IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgU3RyaW5n
JiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlz
ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmF3YWl0
UHJvbWlzZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIHByb21pc2VP
YmplY3RJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQ
cm9taXNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKHByb21pc2VPYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewpAQCAtMTM3LDIxOSArMTU5LDI0NCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBibwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuYXdhaXRQcm9taXNlKHBy
b21pc2VPYmplY3RJZCwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQcmV2
aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSB7Ci0gICAgICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0
eSgpKQorICAgIGluamVjdGVkU2NyaXB0LmF3YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIHJl
dHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNl
KSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldIChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiYgc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvclN0cmluZyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdCksIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MocmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3du
KSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3Qg
SlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJl
ICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAv
KiB3YXNUaHJvd24gKi8+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0
ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewot
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGlu
amVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgU3RyaW5n
IGFyZ3VtZW50czsKLSAgICBpZiAob3B0aW9uYWxBcmd1bWVudHMpCi0gICAgICAgIGFyZ3VtZW50
cyA9IG9wdGlvbmFsQXJndW1lbnRzLT50b0pTT05TdHJpbmcoKTsKKyAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0
Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3Jp
cHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKKworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwog
CiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2lu
dHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAK
LSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFzQm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3IoZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUp
IHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFj
ZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0
LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1l
bnRzLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCByZXN1
bHQsIHdhc1Rocm93bik7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJyb3JT
dHJpbmcsIG9iamVjdElkLCBmdW5jdGlvbkRlY2xhcmF0aW9uLCBhcmd1bWVudHMgPyBhcmd1bWVu
dHMtPnRvSlNPTlN0cmluZygpIDogbnVsbFN0cmluZygpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3Io
ZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3du
KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3
YXNUaHJvd24pIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByZXZp
ZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBwcmV2aWV3KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cy5yZXBsYWNlKCk7CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+IHByZXZpZXc7CisKICAgICBtdXRlQ29uc29sZSgpOwogCiAgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0UHJldmlldyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHByZXZpZXcpOwogCiAgICAg
dW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFwcmV2aWV3KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHByZXZpZXcucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBi
b29sKiBvd25Qcm9wZXJ0aWVzLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3Bl
cnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBvd25Qcm9wZXJ0aWVzLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFy
dCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQ
cmV2aWV3KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQi
X3MpOwogCi0gICAgaW50IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0
IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdh
dGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0
YXJ0LnZhbHVlT3IoMCk7CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQg
Y291bnQgPSBhc0ludChmZXRjaENvdW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsK
KyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5
RGVzY3JpcHRvcj4+IGludGVybmFsUHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRl
bXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAg
ICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNC
b29sKG93blByb3BlcnRpZXMpLCBzdGFydCwgY291bnQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcp
LCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgb3duUHJvcGVydGllcy52YWx1ZU9yKGZhbHNlKSwgc3RhcnQsIGNvdW50
LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHByb3BlcnRpZXMpOwogCiAgICAgLy8g
T25seSBpbmNsdWRlIGludGVybmFsIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBmZXRjaC4KICAg
ICBpZiAoIXN0YXJ0KQotICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgaW50ZXJu
YWxQcm9wZXJ0aWVzKTsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0
aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2Up
LCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYg
KCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgeyBwcm9wZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
aW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldERpc3Bs
YXlhYmxlUHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQm
IG9iamVjdElkLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmpl
Y3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4g
b2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50IHN0YXJ0
ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7CisgICAg
aWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaFN0YXJ0
IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChmZXRjaENv
dW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0
aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+IGludGVybmFs
UHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2Vw
dGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1f
ZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJl
cGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRE
aXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwgY291bnQs
IGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlw
dC5nZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwg
Y291bnQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgcHJvcGVydGllcyk7CiAKICAg
ICAvLyBPbmx5IGluY2x1ZGUgaW50ZXJuYWwgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGZldGNo
LgogICAgIGlmICghc3RhcnQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBp
bnRlcm5hbFByb3BlcnRpZXMpOworICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFBy
b3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihm
YWxzZSksIGludGVybmFsUHJvcGVydGllcyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAg
ICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4geyB7IHByb3BlcnRpZXMucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShpbnRlcm5hbFByb3BlcnRpZXMpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xs
ZWN0aW9uRW50cnk+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmll
cyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoQ291bnQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3RhcnQgPSBhc0ludChmZXRjaFN0YXJ0KTsK
LSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoU3RhcnQg
Y2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGludCBz
dGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9z
KTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNoQ291bnQpOwotICAgIGlmIChjb3VudCA8
IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRp
dmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IGNvdW50ID0gZmV0Y2hDb3Vu
dC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmpl
Y3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBzdGFydCwgY291bnQsIGVudHJpZXMp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9u
RW50cnk+PiBlbnRyaWVzOworCisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmplY3RHcm91cCwgc3RhcnQsIGNvdW50LCBlbnRy
aWVzKTsKKworICAgIGlmICghZW50cmllcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBlbnRyaWVzLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCog
ZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVzdWx0SW5kZXggKi8+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNh
bGxBcmd1bWVudCwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJ
ZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQ7CiAKLSAgICBT
dHJpbmcgb2JqZWN0SWQ7Ci0gICAgaWYgKGNhbGxBcmd1bWVudC5nZXRTdHJpbmcoIm9iamVjdElk
Il9zLCBvYmplY3RJZCkpIHsKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNv
bnRleHRJZCk7CisgICAgYXV0byBvYmplY3RJZCA9IGNhbGxBcmd1bWVudC0+Z2V0U3RyaW5nKFBy
b3RvY29sOjpSdW50aW1lOjpDYWxsQXJndW1lbnQ6Om9iamVjdElkS2V5KTsKKyAgICBpZiAoIW9i
amVjdElkKSB7CisgICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogICAgIH0KLSAgICAKLSAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQudG9K
U09OU3RyaW5nKCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgT3B0aW9uYWw8aW50PiBzYXZl
ZFJlc3VsdEluZGV4OworCisgICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChlcnJvclN0cmlu
ZywgY2FsbEFyZ3VtZW50LT50b0pTT05TdHJpbmcoKSwgc2F2ZWRSZXN1bHRJbmRleCk7CisKKyAg
ICBpZiAoIXNhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcqIGFsaWFzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRTYXZlZFJlc3VsdEFsaWFzKGNvbnN0IFN0cmlu
ZyYgc2F2ZWRSZXN1bHRBbGlhcykKIHsKLSAgICBPcHRpb25hbDxTdHJpbmc+IHNhdmVkUmVzdWx0
QWxpYXM7Ci0gICAgaWYgKGFsaWFzICYmICFhbGlhcy0+aXNFbXB0eSgpKQotICAgICAgICBzYXZl
ZFJlc3VsdEFsaWFzID0gKmFsaWFzOwogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVj
dGVkU2NyaXB0SG9zdCgpLnNldFNhdmVkUmVzdWx0QWxpYXMoc2F2ZWRSZXN1bHRBbGlhcyk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFz
ZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3Qo
Y29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0
KG9iamVjdElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
ICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3Jv
dXApOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBsb2NhdGlvbnMsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1l
VHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFycmF5PiYmIGxvY2F0aW9ucykK
IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgdHlw
ZURlc2NyaXB0aW9ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNj
cmlwdGlvbj46OmNyZWF0ZSgpOwotICAgIGlmICghbV92bS50eXBlUHJvZmlsZXIoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJWTSBoYXMgbm8gdHlwZSBpbmZvcm1hdGlvbiJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fdm0udHlwZVByb2ZpbGVyKCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVk0gaGFzIG5vIHR5cGUgaW5mb3JtYXRpb24iX3MpOwor
CisgICAgYXV0byB0eXBlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgTW9ub3RvbmljVGltZSBzdGFydCA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwogICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKG1fdm0sICJVc2VyIFF1ZXJ5Il9zKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbG9jYXRpb25zLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSA9IGxvY2F0aW9ucy5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGxvY2F0aW9uOwotICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChsb2NhdGlvbikpIHsKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxv
Y2F0aW9ucyJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbG9jYXRpb25zLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGF1dG8g
bG9jYXRpb24gPSBsb2NhdGlvbnMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFs
b2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBu
b24tb2JqZWN0IGl0ZW0gaW4gbG9jYXRpb25zIl9zKTsKIAotICAgICAgICBpbnQgZGVzY3JpcHRv
cjsKLSAgICAgICAgU3RyaW5nIHNvdXJjZUlEQXNTdHJpbmc7Ci0gICAgICAgIGludCBkaXZvdDsK
LSAgICAgICAgbG9jYXRpb24tPmdldEludGVnZXIoInR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3Ii
X3MsIGRlc2NyaXB0b3IpOwotICAgICAgICBsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzb3VyY2VJRCJf
cywgc291cmNlSURBc1N0cmluZyk7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKCJkaXZv
dCJfcywgZGl2b3QpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+Z2V0SW50
ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjp0eXBlSW5mb3JtYXRpb25EZXNj
cmlwdG9yS2V5KS52YWx1ZU9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwpOwor
ICAgICAgICBhdXRvIHNvdXJjZUlEU3RyaW5nID0gbG9jYXRpb24tPmdldFN0cmluZyhQcm90b2Nv
bDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjpzb3VyY2VJREtleSk7CisgICAgICAgIGF1dG8gZGl2
b3QgPSBsb2NhdGlvbi0+Z2V0SW50ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9u
OjpkaXZvdEtleSkudmFsdWVPcigwKTsKIAogICAgICAgICBib29sIG9rYXk7Ci0gICAgICAgIFR5
cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uID0gbV92bS50eXBlUHJvZmlsZXIoKS0+ZmluZExvY2F0
aW9uKGRpdm90LCBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgc3RhdGlj
X2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIG1fdm0pOwor
ICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1fdm0udHlwZVByb2ZpbGVyKCkt
PmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkp
LCBzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwg
bV92bSk7CiAgICAgICAgIEFTU0VSVChva2F5KTsKIAogICAgICAgICBSZWZQdHI8VHlwZVNldD4g
dHlwZVNldDsKQEAgLTM3MiwxMiArNDE5LDE0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAg
ICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNUcnVuY2F0ZWQodHlwZVNldC0+aXNPdmVyZmxv
d24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgdHlwZXMtPmFkZEl0ZW0oV1RGTW92ZShkZXNj
cmlwdGlvbikpOwogICAgIH0KIAogICAgIE1vbm90b25pY1RpbWUgZW5kID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJJbnNwZWN0b3I6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyB0b29rICVsZm1zXG4iLCAoZW5k
IC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHR5cGVzKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlciopCkBAIC0zODksMjggKzQzOCwzNSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzbwogICAg
IGlmIChyZWFzb24gIT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVk
ICYmIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKICAgICAgICAgc2V0VHlwZVByb2ZpbGVyRW5h
YmxlZFN0YXRlKGZhbHNlKTsKIAotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVz
ZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVu
YWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAg
c2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJvZmlsZXIoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaXNhYmxlVHlwZVByb2ZpbGVyKCkKIHsKICAgICBzZXRUeXBlUHJvZmlsZXJFbmFibGVk
U3RhdGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250
cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZFN0
YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUNvbnRy
b2xGbG93UHJvZmlsZXIoKQogewogICAgIHNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3Rh
dGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzVHlwZVByb2ZpbGluZ0Vu
YWJsZWQpCkBAIC00NDIsMTkgKzQ5OCwxMyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
c2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzQ29udHJvbEZsbwogICAg
IH0pOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEQXNTdHJpbmcsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIGJhc2lj
QmxvY2tzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNp
Y0Jsb2Nrcyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewotICAgIGlmICghbV92bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5vIGNvbnRy
b2wgZmxvdyBpbmZvcm1hdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIlZNIGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3MpOwogCi0gICAgYm9vbCBv
a2F5OwotICAgIGludHB0cl90IHNvdXJjZUlEID0gc291cmNlSURBc1N0cmluZy50b0ludFB0clN0
cmljdCgmb2theSk7Ci0gICAgQVNTRVJUKG9rYXkpOwotICAgIGNvbnN0IFZlY3RvcjxCYXNpY0Js
b2NrUmFuZ2U+JiBiYXNpY0Jsb2NrUmFuZ2VzID0gbV92bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkt
PmdldEJhc2ljQmxvY2tzRm9yU291cmNlSUQoc291cmNlSUQsIG1fdm0pOwotICAgIGJhc2ljQmxv
Y2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0
ZSgpOwotICAgIGZvciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2ljQmxvY2tS
YW5nZXMpIHsKKyAgICBhdXRvIGJhc2ljQmxvY2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgYmxv
Y2sgOiBtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JTb3VyY2VJ
RChzb3VyY2VJRC50b0ludFB0cigpLCBtX3ZtKSkgewogICAgICAgICBhdXRvIGxvY2F0aW9uID0g
UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
U3RhcnRPZmZzZXQoYmxvY2subV9zdGFydE9mZnNldCkKICAgICAgICAgICAgIC5zZXRFbmRPZmZz
ZXQoYmxvY2subV9lbmRPZmZzZXQpCkBAIC00NjMsNiArNTEzLDcgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW4KICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2ljQmxvY2tzLT5h
ZGRJdGVtKFdURk1vdmUobG9jYXRpb24pKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUoYmFz
aWNCbG9ja3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgKaW5kZXggMTc1NjE1MTFhZjk3OWIzYjJiNzkxYzc0ZGQ3MjdkNGFlMzEyNGVj
ZS4uZjQwMjk0NmZmNmRhYTg4YzQ4NWQwOTdhYWM2MWMxZDllYmZjMDlhYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIElu
c3BlY3RvclJ1bnRpbWVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBS
dW50aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JSdW50aW1lQWdlbnQpOwpAQCAtNTgsMzMgKzU3LDMzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZp
bmFsOwogCiAgICAgLy8gUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9Ci0gICAg
dm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsg
fQotICAgIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgT3B0aW9uYWw8U3Ry
aW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIGZp
bmFsOwotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGF3YWl0UHJv
bWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBSZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3RyaW5nJiBvYmplY3RJZCkg
ZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFs
OwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMsIGNvbnN0IGludCogZmV0Y2hTdGFydCwg
Y29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgZmluYWw7Ci0gICAg
dm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+
JiBpbnRlcm5hbFByb3BlcnRpZXMpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+
JiBlbnRyaWVzKSBmaW5hbDsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmLCBjb25z
dCBKU09OOjpPYmplY3QmIGNhbGxBcmd1bWVudCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQsIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0
U2F2ZWRSZXN1bHRBbGlhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogYWxpYXMpIGZpbmFs
OwotICAgIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkgZmluYWw7Ci0gICAgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJs
ZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgbG9jYXRpb25zLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4m
KSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFs
OwotICAgIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZGlzYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAg
ICB2b2lkIGdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zb3Vy
Y2VJRCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+
PiYgb3V0X2Jhc2ljQmxvY2tzKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlLCBTdHJpbmcgLyogbWVzc2Fn
ZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPj4+IHBhcnNlKGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFs
PGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4
ICovPj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9u
YWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpIG92ZXJyaWRlOworICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3Vs
dCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3Qg
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bkRlY2xhcmF0aW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92ZXJyaWRlOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbGVhc2VPYmplY3QoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gZ2V0UHJldmlldyhjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBnZXRQcm9wZXJ0aWVzKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYg
b3duUHJvcGVydGllcywgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4m
JiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gZ2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3RJZCYsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hD
b3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpD
b2xsZWN0aW9uRW50cnk+Pj4gZ2V0Q29sbGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxPcHRpb25hbDxpbnQ+IC8qIHNhdmVSZXN1bHRJ
bmRleCAqLz4gc2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNhbGxBcmd1bWVudCwgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2F2ZWRSZXN1bHRBbGlhcyhjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxl
YXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlw
dGlvbj4+PiBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFy
cmF5PiYmIGxvY2F0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlVHlwZVByb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZGlzYWJsZVR5cGVQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcigp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IGdldEJhc2ljQmxvY2tzKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yUnVudGltZUFn
ZW50KEFnZW50Q29udGV4dCYpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0g
ICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
dW5tdXRlQ29uc29sZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudC5jcHAKaW5kZXggNjgxM2UwNzVhOTRiMzYzMWZiNTJlYWRkOWNlNzk5YjljN2RjZDhkZS4u
N2ViNTFhZjMwZmRhODAyY2E4MWE4YjEwZWNkN2U2ZWJlZTIyMTE3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmls
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAKQEAgLTY0LDEwICs2NCwxMCBAQCB2b2lk
IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogaW5jbHVk
ZVNhbXBsZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JTY3JpcHRQ
cm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVNhbXBs
ZXMpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCkBAIC05MSwxMiArOTEsMTQgQEAg
dm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJiwgY29uc3QgYm9vbCogaW5jbHUKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0
UHJvZmlsaW5nQ2xpZW50KHRoaXMpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNr
aW5nU3RhcnQoc3RvcHdhdGNoLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3RyYWNr
aW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNr
aW5nID0gZmFsc2U7CiAgICAgbV9hY3RpdmVFdmFsdWF0ZVNjcmlwdCA9IGZhbHNlOwpAQCAtMTA0
LDYgKzEwNiw4IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0UHJvZmls
aW5nQ2xpZW50KG51bGxwdHIpOwogCiAgICAgdHJhY2tpbmdDb21wbGV0ZSgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojppc0FscmVh
ZHlQcm9maWxpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oCmluZGV4IDdlN2NkYzlmOTc1MDY3NzY2Mjk3NDBhYWRjYjU0ZmI0ZGEwMGQwOGYuLjI4ZjU0
ODhkMGFmYzA2M2IyOWRkMGZmN2NkZDUwZTVkNTBhNjQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JTY3JpcHRQcm9maWxlckFnZW50LmgKQEAgLTM3LDI3ICszNywyNSBAQCBjbGFzcyBQcm9maWxl
OwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgU2NyaXB0UHJvZmlsZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdD
bGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclNjcmlwdFByb2ZpbGVy
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3Bl
Y3RvclNjcmlwdFByb2ZpbGVyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopIGZp
bmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRl
bmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBTY3JpcHRQcm9maWxl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0
cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1ZGVTYW1wbGVzKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BU
cmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlU2FtcGxlcyk7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdDbGllbnQKLSAgICBib29sIGlzQWxyZWFkeVByb2Zp
bGluZygpIGNvbnN0IGZpbmFsOwotICAgIFNlY29uZHMgd2lsbEV2YWx1YXRlU2NyaXB0KCkgZmlu
YWw7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChTZWNvbmRzLCBKU0M6OlByb2ZpbGluZ1Jl
YXNvbikgZmluYWw7CisgICAgYm9vbCBpc0FscmVhZHlQcm9maWxpbmcoKSBjb25zdDsKKyAgICBT
ZWNvbmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgpOworICAgIHZvaWQgZGlkRXZhbHVhdGVTY3JpcHQo
U2Vjb25kcywgSlNDOjpQcm9maWxpbmdSZWFzb24pOwogCiBwcml2YXRlOgogICAgIHZvaWQgYWRk
RXZlbnQoU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5kVGltZSwgSlNDOjpQcm9maWxpbmdS
ZWFzb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmluZGV4IDhmY2I1YTFlNTU3NTBk
MzI1YTg0ODI0ZDg2YzQ5Y2ZlNmZiMDQyNjguLjUwOGViMDJlYzk1YzUyNDA4Mzg0YTFlMmI3NzY0
OGFmZDQyNmRkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKQEAgLTU1LDM2ICs1
NSwzNiBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogICAgIG1fc2hvdWxkUGF1c2VPblN0YXJ0ID0gZmFs
c2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChFcnJv
clN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChib29sIHBhdXNlT25TdGFy
dCkKIHsKICAgICBtX3Nob3VsZFBhdXNlT25TdGFydCA9IHBhdXNlT25TdGFydDsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnJlc3VtZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6cmVzdW1lKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQpCiB7CiAgICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJ
ZCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0
YXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFy
Z2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfcyk7CiAKLSAgICBpZiAoIXRhcmdldC0+aXNQYXVzZWQo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJUYXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIGlz
IG5vdCBwYXVzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQt
PmlzUGF1c2VkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGFyZ2V0IGZvciBn
aXZlbiB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zKTsKIAogICAgIHRhcmdldC0+cmVzdW1lKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5k
TWVzc2FnZVRvVGFyZ2V0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlVG9UYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEluc3BlY3RvclRh
cmdldCogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7Ci0gICAgaWYgKCF0YXJnZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdl
dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJ
ZCJfcyk7CiAKICAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2Up
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6c2Vu
ZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAppbmRleCBiOTI5ZGRm
ZmUyOWMzZmIwODhhYjY3MTQwODdjOTkzMDJjMjc1MjE0Li5lZGNkNDg5Yjc2ZTA4MDgyN2UwNzQx
ZjE0YmFiMDlmOWVhOTMwM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKQEAgLTM1LDIz
ICszNSwyMSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5zcGVjdG9yVGFyZ2V0
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgVGFyZ2V0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXIm
LCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpIGZpbmFs
OworICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIq
LCBCYWNrZW5kRGlzcGF0Y2hlciopIGZpbmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFBh
dXNlT25TdGFydChFcnJvclN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KSBmaW5hbDsKLSAgICB2
b2lkIHJlc3VtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpIGZpbmFsOwot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPblN0YXJ0KGJvb2wpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZShjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAvLyBUYXJnZXQg
bGlmZWN5Y2xlLgogICAgIHZvaWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCmluZGV4IDRiZmE5ZjVhYTdmZGUxNTRi
NTMzYzhmMjNjZDdiYWU2Nzc1OGFiMDAuLjI5ZmNlYzk3YmI4ZTdmNDc3MmQ0ZDdjYzhmYWQ2Yzky
MzE3MWY4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcApAQCAtNDEs
NyArNDEsNyBAQCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OkpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAogSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
Ojp+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlw
dCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0
ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1
bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAg
aWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRp
b25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBv
bmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50LmgKaW5kZXggN2Q0NjcwZDA0ZGM3ZmQzMzA4M2ExNTA2MWQzNzc2NWIxYTZjM2VlNi4uNTg0
ZDA1MDI2NDU4OWI0ODA1YzYxYjRjNGRiYTM4MTk5YTZmZWRlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxP
YmplY3RBdWRpdEFnZW50LmgKQEAgLTM4LDEwICszOCwxMCBAQCBjbGFzcyBKU0dsb2JhbE9iamVj
dEF1ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgpIGZp
bmFsOworICAgIH5KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCYgbV9nbG9iYWxPYmplY3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdn
ZXJBZ2VudC5jcHAKaW5kZXggMjU1MWU3YTQyMzkzOTk1ZDZhM2VlYTljZTQ5MTc0OWEzODc4OTE4
OS4uM2I3MDI4NzhhMWNhNTE2MjQ0MDk5OWY0ZTY0YjUzZmMzNGY5NTMyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KEpTQWdl
bnRDb250ZXh0JiBjb250ZXh0CiAKIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6fkpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVk
U2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAg
IGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0
aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMg
b25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCmluZGV4IDZmNzkyNzhkNTMzMTcxZTFmZGQwYWVmZTlkZDI5YjMzYmZkMWZl
OTUuLjEwMGZiMjNlMzE1ZGYwNDdmOWY4NTZjY2M5YTVhNmY4MGU4M2Q3NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oCkBAIC0zNiwxOCArMzYsMTggQEAgY2xhc3Mg
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpT
R2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChKU0FnZW50Q29udGV4dCYsIEluc3BlY3RvckNvbnNv
bGVBZ2VudCopOwotICAgIH5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSBmaW5hbDsKKyAg
ICB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5n
JiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5P
VEU6IEphdmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25z
b2xlIGJlY2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBv
dXRzaWRlIG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBt
dXRlQ29uc29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsg
fQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7
IH0KIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQgeyBudWxscHRy
IH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCmluZGV4IGM4
NjY5ZWUwYWE1YjhjYTg0ZTVkMjk0MzdmMzQ0NDcxYzFmOWEwNjAuLmUyNTQ0ODc0OGYxNGU1MGEy
ZmM1Y2RlNzZiMDY4OTAyYjAzODNiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAKQEAgLTQzLDkgKzQzLDEyIEBAIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
OjpKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAog
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6On5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgp
ID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGV4ZWN1dGlvbkNv
bnRleHRJZCwgIWV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkgeworICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1
cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29u
dGV4dCJfczsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CisgICAgfQogCiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5p
bmplY3RlZFNjcmlwdEZvcigmbV9nbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaAppbmRl
eCA2ZjBjZTkwNTlkNzIzMzgzNzhiMWQ0N2E3MWE3MjVjMzkyY2QyNzdhLi5iZmViZGE5MmEwOGE5
MWQzOGNlMmM1MTc1Njc5NjczMWQ1OWEyYzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50LmgKQEAgLTM5LDE1ICszOSwxNSBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCkg
ZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5PVEU6IEph
dmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25zb2xlIGJl
Y2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBvdXRzaWRl
IG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBtdXRlQ29u
c29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsgfQorICAg
IHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7IH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW50aW1lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL1BhZ2UuanNvbgppbmRleCAzYjhmYTE4YmQ3ZThkOTVkN2U4Zjk1YjQ0MmFmYzYzZTU1
MGNlNjNhLi5mZGU0ZjY5NjRkNDBlOGE1NjUxMTZiZTJiYzY5MmE0NTFjMmRhMTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpA
QCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVO
QUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFSS19NT0RFX0NTUykgfHwgKGRlZmluZWQo
SEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCki
LAogICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJl
ZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3Jj
ZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcApp
bmRleCAwNjUyZTEyNzA4YmY4NjIzMGJlNDYyOWZlNjU3MjViYmJjMzViNjcwLi4xMTAwMDA0NzNk
Y2ZjYzQzNjQ3Njg0ODE3ZDk1MzhjNzE1YzcyODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCkBAIC05MiwzMiArOTIs
MjQgQEAgT3B0aW9uYWw8UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6RXZlbnQ+IFJl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQKIAogICAgIFN0cmluZyBqc29uRGF0YSA9IFN0
cmluZzo6ZnJvbVVURjgoZGF0YSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VW
YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbkRhdGEsIG1lc3NhZ2VW
YWx1ZSkpCisgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpz
b25EYXRhKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYg
KCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKQorICAgIGF1dG8gbWVzc2Fn
ZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBFdmVudCBldmVudDsKLSAg
ICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygiZXZlbnQiX3MsIGV2ZW50Lm1ldGhvZE5h
bWUpKQorCisgICAgZXZlbnQubWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygi
ZXZlbnQiX3MpOworICAgIGlmICghZXZlbnQubWV0aG9kTmFtZSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGV2ZW50LmNsaWVudElEID0gY2xpZW50SUQ7Ci0KLSAgICBDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklEOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCkpCi0gICAgICAgIGV2ZW50LmNvbm5lY3Rp
b25JRCA9IGNvbm5lY3Rpb25JRDsKLQotICAgIFRhcmdldElEIHRhcmdldElEOwotICAgIGlmICht
ZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpKQotICAgICAg
ICBldmVudC50YXJnZXRJRCA9IHRhcmdldElEOwotCi0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAg
aWYgKG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSkpCi0gICAg
ICAgIGV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOwotCisgICAgZXZlbnQuY29ubmVjdGlvbklEID0g
bWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zKTsKKyAgICBldmVudC50
YXJnZXRJRCA9IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zKTsKKyAgICBl
dmVudC5tZXNzYWdlID0gbWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKICAg
ICByZXR1cm4gZXZlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4
IGY3MzM4ZjZkZDNmMTgxZTg5NWUxOWVlYzY2Y2EyMWQ1OWNiYmRhZmEuLjQ2YjkwNjU3YzM5ZTRk
MjUwM2I3YzcxZDJjNGNkZDM3OTc4NWM3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weQpAQCAtNTUsMjc5ICs1NSwzMjkgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2NwcF9wcm90
b2NvbF9ncm91cCcsICcnKQogCiAgICAgZGVmIGhlbHBlcnNfbmFtZXNwYWNlKHNlbGYpOgotICAg
ICAgICByZXR1cm4gJyVzSGVscGVycycgJSBzZWxmLnByb3RvY29sX25hbWUoKQorICAgICAgICBu
YW1lc3BhY2UgPSAnSGVscGVycycKKyAgICAgICAgaWYgc2VsZi5wcm90b2NvbF9uYW1lKCkgIT0g
J0luc3BlY3Rvcic6CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBzZWxmLnByb3RvY29sX25hbWUo
KSArIG5hbWVzcGFjZQorICAgICAgICByZXR1cm4gbmFtZXNwYWNlCiAKICAgICAjIE1pc2NlbGxh
bmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBjcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3Qn
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ2dldEFycmF5JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVU
eXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2ludGVnZXInOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50ZWdlcicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUu
cmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJs
ZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ2dldFZhbHVlJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFs
bHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90
eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3Qn
XToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5
J106CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJsZScKKyAgICAg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdnZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVybiAnZ2V0JyArIHVjZmlyc3QoX3R5cGUu
cmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQog
CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShf
dHlwZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuICdzZXRPYmplY3QnCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFy
cmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5JwotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19u
YW1lKCkgPT0gJ2ludGVnZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicK
LSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldERvdWJsZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25h
bWUoKSA9PSAnYW55JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJwotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBl
LnJhd19uYW1lKCkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NldERvdWJsZScKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2Fu
eSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVy
biAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0
aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVt
YmVycykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnSlNPTjo6T2JqZWN0JwogICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3
X25hbWUoKSBpcyBOb25lOiAgIyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCBhbmQgdXNlIHR5cGVk
ZWYnZCBuYW1lLgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyBOb25lOgogICAg
ICAgICAgICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAg
ICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlw
ZSwgRW51bVR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKICAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVt
YmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19h
bm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJzo6Jy5qb2luKFtDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0
KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAg
ZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudChfdHlwZSwgbmFtZSk6CiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2
ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgot
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2gg
dG8gcHJpbWl0aXZlLgotCi0gICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFu
ZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3Qn
OgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSlNPTjo6T2JqZWN0JwotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMq
JyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFt
ZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0KLSAgICAgICAgcmV0dXJuICJ1
bmtub3duX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyX3R5cGUiCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXIobWVtYmVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJf
bmFtZSwgRmFsc2UpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90
eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVt
YmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICAgICAgZWxpZiBfdHlw
ZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgotICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0
cjxKU09OOjpWYWx1ZT4nCi0gICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPiYmJyAlIENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgcmV0dXJu
ICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAg
ICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUg
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKwogICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICBpZiBfdHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5
cGVfbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25h
bWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB1
Y2ZpcnN0KG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAKLSAgICAg
ICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVu
dW1fdHlwZV9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
JXMnICUgZW51bV90eXBlX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5
cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91
Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JicgJSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIg
JSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVz
KicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0g
ICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9y
bWFsIG91dCBwYXJhbWV0ZXIgdHlwZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNs
aWdodGx5IGRpZmZlcmVudCBmcm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZp
ZWQuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5j
X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIgJSBjcHBfbmFtZQotICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXIn
XToKLSAgICAgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBp
ZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgY3BwX25hbWUgPSAnJXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
LQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
IlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCisgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNl
IGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKICAgICAjICJvcGVu
IHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2Jq
ZWN0cy4KLQotICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBv
cGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlw
ZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRo
cm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJy
YXknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdSZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpB
cnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4m
JicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9w
cmltaXRpdmVfdHlwZShfdHlwZSkKIAogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwg
dGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgIHJldHVybiAiUmVmUHRyPEpTT046Ok9iamVjdD4iCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpBcnJheT4iCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbCBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmlu
ZycsICdpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9u
YWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJldHVybiBj
cHBfbmFtZQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9kZWNsYXJhdGlvbihfdHlwZSwg
aXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBm
YWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQg
X3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAg
IGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIHJl
dHVybiAnJXMnICUgYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9u
YW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZjxKU09OOjpPYmplY3Q+JworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046OkFycmF5PicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OkFycmF5PicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+Jwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAg
ICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25h
bWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAg
ICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPicgJSBj
cHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBv
YmplY3RfZGVjbGFyYXRpb24pOgorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5f
YXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUK
KyAgICAgICAgICAgICMgZmFsbHRocm91ZwogCi0gICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnBy
aW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1
cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlw
ZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICdCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAKLSAgICAgICAgcmV0dXJuIGFz
c2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgaWYgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAg
ICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAg
ICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAg
IHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
J1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAg
cmV0dXJuIGNwcF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zv
cl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlh
c2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gK
KworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5
cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAgICAgICAgIHJldHVy
biAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVm
PEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1
bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3Bw
X25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9lbnVtKGVudW1f
dHlwZSwgbmFtZSk6CisgICAgICAgIGlmIGVudW1fdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KG5hbWUpKQorICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjol
czo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUu
cmF3X25hbWUoKSkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlKToKICAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05B
TUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQogCi0gICAgIyBEZWNpZGUgd2hldGhlciBjZXJ0
YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4KICAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgot
ICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5
cGUpKQorICAgIGRlZiBzaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICByZXR1cm4gaXNfb3B0aW9uYWwgPT0gKF90eXBlLnJhd19uYW1lKCkg
aW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ10pCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAg
IHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlz
aW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWyJhbnkiLCAib2JqZWN0Il0pCisgICAgZGVmIHNob3VsZF9yZWxlYXNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29wdGlvbmFsCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAg
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBv
ciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAib2JqZWN0IikKKyAgICBkZWYgc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19vcHRpb25hbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAwODJiZTMzZjE1ZGUyNWJl
ODg5NTdjYjE0MjI5MzUyMDM2ZWUyMmNmLi43Yzg0ODU3ODZlOWNkY2YxNDJlOTM5NjJhZTJjZjRk
MTA3MWUxZDg3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weQpAQCAtOTUsNyArOTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgIiIiJHtjbGFzc0FuZEV4
cG9ydE1hY3JvfSAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2Nh
bGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRl
OgogICAgICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTExNCwzMiArMTE0
LDMwIEBAIHByaXZhdGU6CiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxs
YmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAg
IHB1YmxpYzoKICAgICAgICAgJHtjYWxsYmFja05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke3JldHVybnN9KTsKICAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisgICAgdmly
dHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7cGFyYW1ldGVyc30pID0gMDsiIiIpCiAKICAgICBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCi0gICAgIiIidm9p
ZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQorICAg
ICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zKTsKIAogJHtkaXNwYXRjaENhc2VzfQogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcjo6KikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7
CisgICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OiopKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX21lc3NhZ2UpOwogICAgIHVzaW5nIERpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPjsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKQEAgLTE1
NCwxMyArMTUyLDEzIEBAICR7ZGlzcGF0Y2hDYXNlc30KICAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9
CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7
CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChwcm90b2NvbF9t
ZXRob2QpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21h
aW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52
YWx1ZSkocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0i
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IgPSAoCkBAIC0xNzcsNyArMTc1LDcgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
Ojoke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKIH0iIiIp
CiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1
bWVudHMgPSAoCi0iIiIke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorIiIiJHtwYXJhbWV0ZXJE
ZWNsYXJhdGlvbnN9CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCBcJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX1cJyBjYW4ndCBiZSBwcm9jZXNzZWQi
X3MpOwogICAgICAgICByZXR1cm47CkBAIC0xODcsMTEgKzE4NSwxMSBAQCAke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlcgogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1h
bmQgPSAoCiAiIiIke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxi
YWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2Vu
ZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdU
Rk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zv
cm1hbFBhcmFtZXRlcnN9KQordm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Y2FsbGJhY2tQYXJhbWV0ZXJzfSkK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0ke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQotICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworJHtyZXR1cm5Bc3NpZ25tZW50c30KKyAg
ICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
KTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24gPSAoCkBAIC0yNDYsMTMgKzI0NCwxMSBAQCAke2NvbnN0cnVjdG9yRXhhbXBsZX0KICAg
ICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIiIlJlZlB0cjwk
e29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCisiIiJSZWY8JHtvYmplY3RUeXBlfT4gQmluZGlu
Z1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZh
bHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFz
T2JqZWN0KCk7CiAgICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
JHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2Fz
dDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDwke29iamVjdFR5cGV9PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6
T2JqZWN0QmFzZT4ocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KICIiIikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlMWE2NjFiYTM3OWNkZWE0
MDY0YzZmNzdjNGVmY2IxMTYyYWNlZmMwLi5iOWM2NjE3NDkyMjQ0ZDAwZTBhNzQ1ZDc5NGJhYjY3
MTAyZTc0NGM1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CkBAIC0zMyw5ICszMywxMSBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIHRyeToKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlCiBl
eGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5
cGUsIEFsaWFzZWRUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC02NSw3ICs2Nyw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVh
ZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICB0YXJnZXRfZnJhbWV3b3JrX25hbWUgPSBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAg
ICAgICAgICAgKFt0YXJnZXRfZnJhbWV3b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1l
LCAiJXNQcm90b2NvbFR5cGVzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKKyAgICAgICAg
ICAgIChbdGFyZ2V0X2ZyYW1ld29ya19uYW1lXSwgKHRhcmdldF9mcmFtZXdvcmtfbmFtZSwgIiVz
UHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmgiKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJd
LCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIikpLAogICAgICAgICBdCkBAIC05MSw5ICs5MywxOSBAQCBjbGFzcyBDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVm
IF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQp
OgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElk
J10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHBy
b3RvY29sX2NhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2
ZV90eXBlCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfY29tbWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25h
bCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMTBkOGYxNGJkNWZlYmViOGExYjA2YjAxNzY3NWExNDNhOGQ0ZjczOC4u
NmQ5ZGQyYTQ4ZGMzNDY5MjA3MWMxZGJjMWI4YjNiNGU3YzczYTkxNSAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKQEAgLTU1LDEwICs1NSw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBbZG9tYWluIGZv
ciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNl
bGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgotICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmlu
ZycpXQogICAgICAgICBoZWFkZXJfYXJncyA9IHsKICAgICAgICAgICAgICdpbmNsdWRlcyc6IHNl
bGYuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSwKLSAgICAgICAgICAgICd0
eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVk
ZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAogICAgICAgICB9
CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCkBAIC03OSw5
ICs3OCwxMSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwg
IiVzUHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIikpLAotICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmluZy5o
IikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAi
d3RmL0V4cGVjdGVkLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCisg
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJzdGQiLCAidHVwbGUi
KSksCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zKHNl
bGYsIGRvbWFpbnMpOgpAQCAtMTAxLDExICsxMDIsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCiAKLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKLQogICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29t
bWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNv
bW1hbmQpKQogCiAgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKICAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKQEAgLTExNSw2OSArMTE0
LDU2IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKIAotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCi0gICAgICAgIH0K
LQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVt
X3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAl
IChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2Vs
Zi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVz
ZWRfZW51bV9uYW1lcyk6CisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQoY29tbWFuZCkKIAogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBh
cmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5f
JyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJf
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsg
cGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXIudHlw
ZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCi0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0
ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3V0Xycg
KyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgorICAgICAgICByZXR1cm5zID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUg
PSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFt
ZXRlcl9uYW1lCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBh
cmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1l
cy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIHJldHVybnMuYXBw
ZW5kKCclcyAvKiAlcyAqLycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3Jl
dHVybl9kZWNsYXJhdGlvbihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwg
cGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzog
IiwgIi5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3JldHVybnMnOiAiLCAiLmpvaW4o
cmV0dXJucyksCiAgICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
CisgICAgICAgIGlmIGxlbihyZXR1cm5zKSA9PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjwlKHJldHVybnMpcz4gJShjb21t
YW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAg
ZWxpZiBsZW4ocmV0dXJucykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPCUocmV0dXJucylzPj4gJShj
b21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7
JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCk6CiAgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3Qo
Y29tbWFuZC5jb21tYW5kX25hbWUpCiAKLSAgICAgICAgaW5fcGFyYW1ldGVycyA9IFtdCi0gICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSAnaW5fJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAg
ICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgIHBhcmFtZXRlcnMg
PSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9w
YXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRl
cl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiIgJSBjYWxsYmFj
a05hbWUpCiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFy
YW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgi
UmVmPCVzPiYmIGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKLQotICAgICAgICBvdXRfcGFyYW1l
dGVycyA9IFtdCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm5zID0gW10KKyAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICByZXR1cm5zLmFwcGVuZCgi
JXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1l
bnQocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1l
KSkKIAogICAgICAgICBjbGFzc19jb21wb25lbnRzID0gWydjbGFzcyddCiAgICAgICAgIGV4cG9y
dF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywg
Tm9uZSkKQEAgLTE4OCw4ICsxNzQsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFj
cm8nOiAnICcuam9pbihjbGFzc19jb21wb25lbnRzKSwKICAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiBjYWxsYmFja05hbWUsCiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNv
bW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFy
YW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFy
YW1ldGVycyksCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJz
KSwKKyAgICAgICAgICAgICdyZXR1cm5zJzogIiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9h
cmdzKSkKQEAgLTIyMyw0ICsyMDksNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlv
biwgIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9p
ZCAlcyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGRhZjE5Yzk1MGZiMDdhYWEyZDhiMzFhMmY0OWM3
Y2FiNTA3MDJjNjAuLjhkZmIyOTRhYjlkMjZlNGU4NTVmNWUxMjlkYjgzMWU3ZjkwMWFiZGUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEy
IEBAIHRyeToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUK
KyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9i
amVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtODAsMTEgKzgwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1
ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2
YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmgiKSksCi0g
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pT
T05WYWx1ZXMuaCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvTmV2ZXJEZXN0cm95ZWQuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5nLmgiKSkKICAg
ICAgICAgXQotCiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50
cmllcyhoZWFkZXJfaW5jbHVkZXMpCiAKIApAQCAtMTIzLDggKzEyMCw4IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgY2FzZXMgPSBbXQogCiAgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5q
b2luKFsKLSAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAg
ICAgICcgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNv
bW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwK
ICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgJyAgICB9JywKICAg
ICAgICAgXSkKQEAgLTEzMiw4ICsxMjksOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0cmlu
ZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIp
IHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAgICAgJyAgICAgICAgJXMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUs
CisgICAgICAgICAgICAgICAgJyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICIlcyIpIHsnICUg
Y29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMocHJvdG9j
b2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21t
YW5kX25hbWUsCiAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCiAgICAgICAgICAg
ICAgICAgJyAgICB9JywKICAgICAgICAgICAgIF0pCkBAIC0xNjUsMTQ2ICsxNjIsMTM2IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hf
YXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9t
YWluKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMgPSBbXQotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIHJldHVy
bl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGNhbGxiYWNrX3BhcmFtZXRlcnMgPSBbXQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJf
dmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50
eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYg
X3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVy
X3ZhbHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBh
cmFtZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxl
YXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwo
KScKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGVsaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBw
YXJhbWV0ZXJfdmFsdWUKKwogICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9y
X3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6
IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAgICAgICAg
ICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ2hlbHBlcnNO
YW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVy
VmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZv
cm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KF90eXBl
LCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpz
b25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIColKHBh
cmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBp
ZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyTmFtZSlz
KTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51
bSgpOgotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFu
dFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAg
ICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlz
KScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFs
dWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAKICAgICAgICAgYXN5bmNfYXJncyA9IHsKICAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgJ2NhbGxi
YWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKLSAg
ICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJz
KSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgJ2NhbGxiYWNrUGFyYW1ldGVycyc6
ICIsICIuam9pbihjYWxsYmFja19wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdyZXR1cm5Bc3Np
Z25tZW50cyc6ICJcbiIuam9pbihyZXR1cm5fYXNzaWdubWVudHMpCiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25k
aXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCwgZG9tYWluKToKLSAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtd
Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzID0gWydyZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJfZGVjbGFy
YXRpb25zID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMgPSBbXQorICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncHJvdG9jb2xf
Y2FsbElkJ10KICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBpZiBub3Qg
Y29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgn
ZXJyb3InKQogCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAg
ICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJwotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0g
JyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAgICAgaW5fcGFy
YW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsnICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICB2YXJpYWJsZV9uYW1lID0gcGFyYW1l
dGVyX25hbWUKIAotICAgICAgICAgICAgIyBOb3cgYWRkIGFwcHJvcHJpYXRlIG9wZXJhdG9ycy4K
LSAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gcGFyYW1ldGVyX25hbWUKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQogCi0gICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVu
Y2VzX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9u
ID0gJyVzLmdldCgpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBoYXZlIGFscmVh
ZHkgcHJvdmVkIHRoZSBvYmplY3QgaXMgbm9uLW51bGwuCi0gICAgICAgICAgICAgICAgICAgICMg
SWYgYSByZXF1aXJlZCBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRP
YmplY3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZCBhIHByb3RvY29sIGVycm9y
LCBhbmQgdGhlIG1ldGhvZCBkaXNwYXRjaGVyIHdpbGwgcmV0dXJuIHdpdGhvdXQKLSAgICAgICAg
ICAgICAgICAgICAgIyBpbnZva2luZyB0aGUgYmFja2VuZCBtZXRob2QgKGFuZCBkZXJlZmVyZW5j
aW5nIHRoZSBvYmplY3QpLgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lv
biA9ICcqJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGVsaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0g
JyYlcycgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUgKyAn
X2pzb24nCiAKLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyRXhwcmVzc2lvbic6IHBhcmFtZXRl
cl9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6IENwcEdlbmVy
YXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCi0gICAgICAg
ICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzICUocGFyYW1ldGVyTmFt
ZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClzKHBhcmFtZXRlcnMu
Z2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHN1Y2Nlc3NPdXRQYXJhbSlzKTsnICUgcGFy
YW1fYXJncykKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1l
KXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0cicgJSBwYXJh
bV9hcmdzCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVy
X21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKLSAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4cHJlc3Npb24pCi0K
LSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
ICsgJ0NhbGxiYWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCi0gICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnY2FsbGJhY2suY29weVJlZigpJykKLQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2hlbHBl
cnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICdlbnVtVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtVmFyaWFibGVOYW1lJzogdmFy
aWFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ1ZhcmlhYmxlTmFtZSc6IHBh
cmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8l
KHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBpZiBsZW4o
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgYXV0byAlKGVudW1WYXJpYWJsZU5hbWUpcyA9
IFByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PCUoZW51bVR5cGUpcz4oJShzdHJpbmdWYXJpYWJsZU5hbWUpcyk7JyAlIGVudW1fYXJncykKICAg
ICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBh
cmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaGFzVmFs
dWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRo
b2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKm91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUo
cGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUu
aXNfZW51bSgpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScg
JSB2YXJpYWJsZV9uYW1lCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFtZXRlck5hbWUp
cyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jl
c29sdXRpb25zLmFwcGVuZCgnICAgIGlmICghJShlbnVtVmFyaWFibGVOYW1lKXMpIHsnICUgZW51
bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5h
cHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gJShwYXJh
bWV0ZXJLZXkpczogIl9zLCAlKHN0cmluZ1ZhcmlhYmxlTmFtZSlzKSk7JyAlIGVudW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcg
ICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gdmFyaWFibGVfbmFtZQorICAgICAgICAgICAg
ICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScgJSB2YXJpYWJsZV9uYW1lCisgICAgICAg
ICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywg
J251bWJlciddOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcq
JyArIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHZhcmlhYmxlX25hbWUgKyAnLnJlbGVhc2VOb25O
dWxsKCknCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAgICAgICAgICAgbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQogCi0gICAgICAgICAgICAgICAg
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKSBvciBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIENwcEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZEdldE1l
dGhvZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCisg
ICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogJ2ZhbHNlJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSAndHJ1ZScsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zLmFwcGVuZCgnICAgIGF1dG8gJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
IiUocGFyYW1ldGVyS2V5KXMiX3MsICUocmVxdWlyZWQpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnYWRvcHRSZWYoKm5ldyAlc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpJyAlIChkb21haW4u
ZG9tYWluX25hbWUsICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
KSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxs
YmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKICAgICAgICAgICAgICdjb21t
YW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVy
RGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAg
ICAgICAgICAgJ3BhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zKSwKICAgICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9p
bihtZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgICAgICAnYWx0ZXJuYXRlSW52b2NhdGlvblBh
cmFtZXRlcnMnOiAnLCAnLmpvaW4oYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRl
cnMpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBsZW4oY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Zv
aWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
cjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyknICUgY29t
bWFuZF9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogCiAgICAgICAgIGlmIGxlbihj
b21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgpAQCAtMzE5LDMxICszMDYsNzEgQEAgY2xhc3Mg
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAor
ICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorCiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tl
bmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMg
PSBbXQorICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMgPSBbXQorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX25hbWUgPSAnb3V0XycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgIGlmIGxl
bihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5leHRl
bmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBj
b21tYW5kX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBy
ZXN1bHRfZXh0cmFjdGlvbl9uYW1lcy5hcHBlbmQocGFyYW1ldGVyX25hbWUpCiAKLSAgICAgICAg
aWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAxOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQotICAgICAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0g
MToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KScpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKwor
ICAgICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgICAgIGlmIF90
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFy
YW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90
b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSAr
ICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKKyAgICAg
ICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRN
ZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAor
ICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUs
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfY29udmVyc2lvbl9saW5lcy5hcHBl
bmQoJyAgICBpZiAoISElKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3Ms
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT4lKGNvbW1hbmROYW1l
KXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFyZXN1bHQpIHsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA9PSAxOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gJXMgPSBXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKTsnICUgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXNbMF0pCiAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVsc2UnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7JykKKyAgICAgICAgICAgIGVsaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA+IDE6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBbJXNdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7JyAlICIsICIuam9pbihyZXN1bHRfZXh0cmFjdGlvbl9uYW1lcykpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChyZXN1bHRfY29udmVyc2lvbl9saW5lcykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIlxuIi5qb2lu
KGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAxMTlkMjNjMzhjZGYyNGNm
NTZkMGZmYzY2ZDU3YjhhM2Q0ZTJkYTQ0Li5iZWFhMTdjOTgxNTRiN2VlMjJlM2I1Yjk3NmQwMTgz
OTQwYTQ2OTEzIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC03Myw5ICs3Myw5IEBA
IGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwgIiVzUHJvdG9j
b2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAot
ICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90
ZXh0L1dURlN0cmluZy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAg
ICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CkBAIC0x
MTcsOCArMTE3LDEzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAgICAgICAg
IGxpbmVzID0gW10KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFy
YW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1l
dGVyX25hbWUKKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycg
JSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMgYW5kIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNl
ZF9lbnVtX25hbWVzOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHBhcmFtZXRlciwgZXZlbnQpKQogICAgICAg
ICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY2ZGM2ZTE4
NWNmZTJiNjFiMWVjYTc3NTczY2UxNjc0ZTZiMzVhNDkuLjc2M2UwMWRmYjc4Y2RlYzhkNjAzMGQy
ZWRjMzUwNTQ4OTE3Njk4MGMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CkBAIC0zMywxMiArMzMsMTIgQEAgdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIGV4Y2VwdDoKICAgICBmcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAg
ICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBP
YmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNzEsOSArNzEsNyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAg
aGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL3RleHQvQ1N0cmluZy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNs
dWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKQEAgLTkwLDI3ICs4OCw0MyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9u
YW1lCiAKLSAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2Vu
ZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBl
KToKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNl
bGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAgICAgZWxp
ZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5p
c19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVy
X3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRl
cl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKIAogICAgICAgICAg
ICAgcGFyYW1ldGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwK
LSAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAg
ICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhv
ZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0
aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJh
bWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUo
cGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQogICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1z
T2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFt
ZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lKGtleWVk
U2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAl
IHBhcmFtZXRlcl9hcmdzKQogCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQo
JyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCks
IHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBldmVudF9hcmdzID0gewogICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xMjAsMTUgKzEzNCwxNSBAQCBj
bGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Zyb250
ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZl
bnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiX3MpOycgJSBldmVudF9h
cmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIl9zKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChw
YXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7JykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
fScpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2
ZW50LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDAw
MTkyNGRlMGViMDgyN2Y3NDVkM2Q3MzZjMGFiOTIwMjEyNGRiMzYuLjc4MWQwNmQ5NDA1NjZiMTcy
ZWM1NWMyZWZiZDEwMWEwMDUwZDcxYTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtODUsOSArODUs
MTAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAg
ICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvQXNzZXJ0aW9ucy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKKyAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwu
aCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIs
ICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1
ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdmVyc2lvbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0y
MzIsOSArMjMzLDYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24s
IGRvbWFpbik6Ci0gICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykg
PT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotCiAgICAgICAgIGVudW1fbWVtYmVycyA9IFtt
ZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2lu
c3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91
c10KICAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAg
ICAgICBvcHRpb25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KQEAgLTI0NiwxMSArMjQ0
LDEyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgYmFzZV9jbGFzcyA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAg
ICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xh
c3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIGZpbmFsIDogcHVibGljICVzIHsn
ICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdwdWJs
aWM6JykKICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgXCclc1wn
IHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgb2JqZWN0
X25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9m
b3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJf
c3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0aW9uKSkKIAogICAgICAgICBjb25zdHJ1Y3Rvcl9leGFt
cGxlID0gW10KQEAgLTI3Nyw3ICsyNzYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5l
cmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiBvcGVuX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlczsn
ICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlc0tl
eTsnICUgKGV4cG9ydF9tYWNybywgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQogCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVz
KSkKQEAgLTMyOCw0NyArMzI3LDU2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21l
bWJlciwgZG9tYWluKToKKyAgICAgICAgbWVtYmVyX25hbWUgPSAnaW5fJyArIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0gbWVtYmVyX25hbWUKKyAgICAg
ICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICBtZW1iZXJfdmFs
dWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAgICBlbGlmIENwcEdlbmVyYXRv
ci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCBGYWxzZSk6CisgICAgICAg
ICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVtYmVyX3ZhbHVlCisKICAgICAg
ICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0
b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAg
ICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICdtZW1iZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCh0eXBlX21l
bWJlci50eXBlLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnbWVtYmVy
S2V5JzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6
IG1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAog
ICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5h
bWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNl
dHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8
ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVt
YmVyTmFtZSlzKScgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQp
OycgJSBzZXR0ZXJfYXJncykKLQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9y
ZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUo
aGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0
ZXJfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIHZhbHVlKTsnICUgc2V0
dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG1lbWJlcktleSlzX2Fs
cmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoc2V0dGVyKXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFs
dWUpcyk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVy
KHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBtZW1iZXJfbmFtZSA9ICdpbl9v
cHRfJyArIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0g
bWVtYmVyX25hbWUKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAg
ICAgICAgICBtZW1iZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAg
ICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBl
LCBGYWxzZSk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVt
YmVyX3ZhbHVlCisKICAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxO
YW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5
ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1i
ZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAot
ICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzog
c2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVy
YXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAg
ICAgICAgICdtZW1iZXJLZXknOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAg
ICdtZW1iZXJOYW1lJzogbWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyVmFsdWUnOiBt
ZW1iZXJfdmFsdWUsCisgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShj
YW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKG1lbWJlclR5cGUp
cyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHsnKQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjol
KGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNO
YW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlw
ZSh0eXBlX21lbWJlci50eXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3Ms
IHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKHNldHRlcilzKCIlKG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZh
bHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKQEAgLTM4MSwxMyArMzg5LDEzIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVf
ZGVjbGFyYXRpb25zIGlmIHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlw
ZSldCiAKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190
b19nZW5lcmF0ZToKLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5
cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSksIEZhbHNlKSkK
LQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0
aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJh
dGlvbi50eXBlKSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNs
YXJhdGlvbi50eXBlKSkpCiAKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2VudW0odHlwZV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAodHlwZV9kZWNsYXJhdGlvbi50eXBl
X25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkpLCBGYWxzZSkpCisKICAg
ICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3
b3JkcyA9IFsnc3RhdGljIHZvaWQnXQogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0zOTksNyArNDA3
LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpv
aW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQogICAgICAgICAgICAgaWYgYXJndW1l
bnRbMV06Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBy
dW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWY8JXM+IHJ1bnRpbWVDYXN0
KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSop
OycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ307JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKQEAgLTQzOCwxMyArNDQ2
LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9u
YW1lKQogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAg
ICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKGVudW1fdHlwZSkKKyAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9
IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdf
bmFtZSgpKQogICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24s
ICd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmlu
ZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUp
LCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4g
b2JqZWN0X3R5cGVzOgogICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1v
dXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAgICAgICAg
Y3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQorICAgICAg
ICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFt
ZSgpLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdF9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9t
YWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAg
ICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBl
LmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4ob2JqZWN0X2xpbmVzKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNWRkNTM0Njk0NDg1NTE1NDhkNjdhYTBi
NDU2YzZhMWE2NjU4ZDU5My4uMTNlNTg5NzI2ZDRjZGI3YTQ1MmM2NzBjODMyNWViMWEzOWVlNjIy
MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtODIsMTAgKzgyLDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRD
b3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwuaCIpKSwKLSAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5n
LmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL0Fzc2VydGlvbnMuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgpAQCAtMTQ0LDE0ICsx
NDIsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCIv
LyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAg
ICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICBjcHBfcHJvdG9jb2xf
dHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUp
CisgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5l
cmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUp
KSkKIAogICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgogICAgICAgICAg
ICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0
ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVy
cyk6Ci0gICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5k
ZWNsYXJhdGlvbigpKQorICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9i
amVjdF90eXBlLnJhd19uYW1lKCksIHVjZmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkK
ICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25f
bWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAg
ICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVz
KToKQEAgLTE4Myw4ICsxODEsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpXToKICAgICAgICAgICAgICAgICBvcGVuX21l
bWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKG9wZW5fbWVtYmVycywga2V5PWxhbWJk
YSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxk
X25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWlu
X25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVf
bWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgn
Y29uc3QgY2hhciogUHJvdG9jb2w6OiVzOjolczo6JXNLZXkgPSAiJXMiOycgJSAoZG9tYWluLmRv
bWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKICAgICAgICAgICAgIGlm
IGxlbihkb21haW5fbGluZXMpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihk
b21haW5fbGluZXMpKSkKIApAQCAtMjI3LDM3ICsyMjQsNTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5
cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCIiInsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
IiIiKQorICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9i
amVjdCk7IiIiKQogICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoK
KyAgICAgICAgICAgIG1lbWJlcl90eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAg
IG1lbWJlcl90eXBlID0gbWVtYmVyX3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVz
OjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJf
dHlwZSkKKwogICAgICAgICAgICAgYXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFt
ZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRo
b2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5
cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5
cGUnOiBtZW1iZXJfdHlwZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIiIiICAgIHsKICAgICAgICAgYXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+Zmlu
ZCgiJShtZW1iZXJOYW1lKXMiX3MpOwogICAgICAgICBBU1NFUlQoJShtZW1iZXJOYW1lKXNQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1l
KXNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czwlKG1lbWJlclR5cGUp
cz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5w
dHIoKSk7CiAgICAgfSIiIiAlIGFyZ3MpCiAKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3Bl
cnRpZXM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJlcXVpcmVk
X21lbWJlcnMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2l6ZV90IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKIAogICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlcl90
eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJf
dHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gbWVtYmVy
X3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJfdHlwZSkKKwogICAgICAgICAgICAg
YXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3Bw
X2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBtZW1iZXJfdHlwZQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKICAgICAgICAg
YXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiX3Mp
OwogICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkp
OyIiIiAlIGFyZ3MpCisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigp
KTsiIiIgJSBhcmdzKQogCiAgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7JykKQEAgLTI2NywyNyArMjgxLDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBzaG91bGRf
Y291bnRfcHJvcGVydGllczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3Vu
ZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSknKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
I2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYn
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9t
ZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICVzKEpTT046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9y
LmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8
JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAl
IChvYmplY3RfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJl
cl9uYW1lKSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5n
IHJlc3VsdDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQoY2FzdFN1Y2NlZWRlZCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBy
ZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQocmVzdWx0KTsnKQogCiAgICAgICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9p
bihbJ3Jlc3VsdCA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9t
ZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNT
RVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRpdGlvbikKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCiAKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCAzZTEzOTc0YWIzNjIxM2RhNzhiNzJjYTIzMmU3N2UxYTk5NGM1
NWY3Li45NmI2YjYxMjZkYzdlZDgxMzJjM2YyZTIzNWRlM2Y3MDFkY2Y4OTExIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zMywxMyArMzMsMTMgQEAgZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJh
dG9yCiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2Rl
bHMgaW1wb3J0IEZyYW1ld29ya3MKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBB
bGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBP
YmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9y
OgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdv
cmtzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTEwMyw5ICsxMDMsMTkgQEAgY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyByZXF1
ZXN0SWQnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVy
KSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xv
bmcgcHJvdG9jb2xfY2FsbElkJ10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJp
bWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBmNWVlOGU1ODM5OGQ2OWJhZTRi
ZWI0YzE4NjcwNjNjY2Q1MjIwOWVjLi4xYmQ5NjM1YmQzMjUxOTkxNTFjZmQ5ODAxM2E1MTI3Mjg5
ODhkMWI5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAt
OTAsOSArOTAsMjAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCisgICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfY2FsbElkJ10KICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQorICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlw
ZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFu
ZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFt
ZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9t
YWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTExNSw0NSArMTI2LDU0IEBAIGNsYXNz
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAg
c3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAn
b3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0g
J291dF8nICsgb3V0X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVy
X3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAg
ICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUo
b2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJh
bWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvdXRfcGFyYW1fbmFt
ZSkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KCVzKSB7JyAlICcsICcuam9pbihzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMpKQogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsnKQogCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLQog
ICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBh
cmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWlyZWRfcG9p
bnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUp
KQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNl
bGYub2JqY19jbGFzc19mb3JfYXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAg
ICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgo
c2VsZi5vYmpjX3ByZWZpeCgpKToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFz
c10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9B
UlJBWSglcywgWyVzIGNsYXNzXSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFz
cykpCiAKICAgICAgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0
ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBl
KHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxf
cG9pbnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVy
YXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZh
cl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFt
ZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25h
bWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFt
ZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKICAgICAgICAgICAgICAgICBvYmpjX2FycmF5
X2NsYXNzID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl9hcnJheV90eXBlKHBhcmFtZXRlci50eXBlKQog
ICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Mu
c3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgotICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05B
TF9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKG91
dF9wYXJhbV9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9w
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFt
ZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25h
bWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQogICAgICAgICAgICAgICAgIGtleWVkX3NldF9t
ZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVy
LnR5cGUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZp
ZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAg
ICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsIGVsc2UgdmFyX25hbWUKKyAgICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9
ICcqJXMnICUgb3V0X3BhcmFtX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ugb3V0
X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBleHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2Jq
Y19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUs
IHZhcl9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRP
YmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JXMoIiVzIl9zLCAlcyk7
JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9l
eHByZXNzaW9uKSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKCIlcyJfcywg
JXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBv
cnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGlmICghISVzKScgJSBvdXRfcGFyYW1fbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9OycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBAIC0xNjYsMTcg
KzE4NiwyNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZGVmIGluX3BhcmFtX2V4cHJlc3Npb24ocGFy
YW1fbmFtZSwgcGFyYW1ldGVyKToKICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUK
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51
bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBw
cmltaXRpdmUuCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKLSAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYXJyYXknLCAnYW55
JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9u
YW1lIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICcqJXMnICUgcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9uYW1l
IGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCisgICAgICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlw
ZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gJyonICsgcGFyYW1fbmFtZQorICAgICAg
ICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Jl
bGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtX25hbWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAg
ICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJldHVybiAnKicgKyBwYXJhbV9u
YW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdXVEZN
b3ZlKCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcGFyYW1fbmFtZQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3Bh
cmFtX25hbWUgPSAnb3B0XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXycgKyBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25h
bWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyLCBGYWxzZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKToKQEAgLTE5NCwxMSArMjI0LDggQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9h
bmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghISVzKScgJSBpbl9wYXJhbV9uYW1lKQogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJh
bV9uYW1lLCBpbXBvcnRfZXhwcmVzc2lvbikpCi0KLSAgICAgICAgaWYgbGluZXM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBj
b21tYW5kKToKQEAgLTIwNiw3ICsyMzMsMTAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaW5f
cGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnb3B0
XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXycgKyBp
bl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAnb18l
cycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKToKQEAgLTIxNyw2ICsyNDcsNiBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgICAg
IG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbiA9ICclcy52YWx1ZSgpJyAlIG9iamNfaW5fcGFyYW1f
ZXhwcmVzc2lvbgogCi0gICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMg
PyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24p
CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoISElcyA/ICYlcyA6IG5p
bCknICUgKGluX3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKICAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
IG9wdGlvbmFsX2V4cHJlc3Npb24pKQogICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAl
cyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZGRkYjI3YTg4YzJiYWZm
NWZjNmYyN2JjNDNhMDFlMzFlYTljZDQ5ZC4uOGQ0MTkzODEyM2Y5MDZmYmYwOTFlMmFiN2IzNmE2
MDczM2RiMzk1MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtMTI1LDExICsxMjUsMTEgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICIlcy4lcyJfcyk7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlcy4lcyJfcyk7JyAlIChkb21h
aW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVudC5ldmVu
dF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2
ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIApAQCAtMTQ1LDE2ICsxNDUsMTYgQEAgY2xhc3MgT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4s
IGV2ZW50KToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAg
ICAgICAgdmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHNh
ZmVfdmFyX25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgdmFyX25hbWUKICAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpj
X3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwg
c2FmZV92YXJfbmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMi
X3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
ZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSAo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRo
b2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7JykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3Nl
dF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKICAgICAgICAg
cmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOTRkMThkOWQ2NjE5NGQx
NTg1YzBlMTBjMDQ5NGJiNGIxYTEzYjk1NS4uMjlhMmRlYTcyNGYwYmJlY2ZlYmE2ZGI5MjA2MDgx
NzAxZTUxMGM1MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNzMsOSArNzMsNiBAQCBf
VFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICAgICAiUnVudGltZS5Db2xsZWN0
aW9uRW50cnkiLAogICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLAogICAgICJEZWJ1Z2dl
ci5DYWxsRnJhbWUiLAotICAgICJDYW52YXMuVHJhY2VMb2ciLAotICAgICJDYW52YXMuUmVzb3Vy
Y2VJbmZvIiwKLSAgICAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAogICAgICMgVGhpcyBzaG91bGQg
YmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEg
Z2VuZXJhdGVkIEMrKyBBUEkuCiAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAogICAgICMg
Rm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KQEAgLTg1LDEwICs4MiwxOSBAQCBfVFlQRVNfTkVF
RElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZl
cnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KIF9UWVBFU19XSVRIX09QRU5fRklFTERTID0g
ewogICAgICJUaW1lbGluZS5UaW1lbGluZUV2ZW50IjogW10sCi0gICAgIyBJbnNwZWN0b3JTdHls
ZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBp
dCBhbmQgbW9kaWZ5IGl0LgotICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbXSwKLSAgICAjIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgotICAgICJOZXR3b3Jr
LlJlc3BvbnNlIjogWyJtaW1lVHlwZSJdLAorICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbInByaW9y
aXR5IiwgInBhcnNlZE9rIiwgInN0YXR1cyJdLAorICAgICJET00uSGlnaGxpZ2h0Q29uZmlnIjog
W10sCisgICAgIkRPTS5SR0JBQ29sb3IiOiBbXSwKKyAgICAiRE9NU3RvcmFnZS5TdG9yYWdlSWQi
OiBbXSwKKyAgICAiRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbiI6IFtdLAorICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50T3B0aW9ucyI6IFtdLAorICAgICJEZWJ1Z2dlci5Mb2NhdGlvbiI6IFtdLAor
ICAgICJJbmRleGVkREIuS2V5IjogW10sCisgICAgIkluZGV4ZWREQi5LZXlSYW5nZSI6IFtdLAor
ICAgICJOZXR3b3JrLlJlc3BvbnNlIjogWyJzdGF0dXMiLCAic3RhdHVzVGV4dCIsICJtaW1lVHlw
ZSIsICJzb3VyY2UiXSwKKyAgICAiUGFnZS5Db29raWUiOiBbXSwKKyAgICAiUnVudGltZS5DYWxs
QXJndW1lbnQiOiBbIm9iamVjdElkIl0sCisgICAgIlJ1bnRpbWUuVHlwZUxvY2F0aW9uIjogW10s
CiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgogICAgICJUZXN0Lk9wZW5QYXJhbWV0
ZXJzIjogWyJhbHBoYSJdLAogfQpAQCAtMTM0LDcgKzE0MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoK
ICAgICAgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dl
ZF9mcmFtZXdvcmtzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlm
IGZyYW1ld29ya19uYW1lID09ICJXVEYiOgorICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUg
PT0gIldURiIgb3IgZnJhbWV3b3JrX25hbWUgPT0gInN0ZCI6CiAgICAgICAgICAgICAgICAgaW5j
bHVkZXMuYWRkKCIjaW5jbHVkZSA8JXM+IiAlIGhlYWRlcl9wYXRoKQogICAgICAgICAgICAgZWxp
ZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgIT0gZnJhbWV3b3JrX25hbWU6CiAgICAgICAg
ICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5jbHVkZSA8JXMvJXM+IiAlIChmcmFtZXdvcmtfbmFt
ZSwgb3MucGF0aC5iYXNlbmFtZShoZWFkZXJfcGF0aCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dl
bmVyYXRvci5weQppbmRleCA3MzE1M2I5NTQ2NjcyYjk5MDRlN2Y1ZWI5MTg4NjVmYzhhNTE2OGI2
Li5hMmQzNzZkZjNiOTQzZGRjOTE2NzhiYmJhNWEyZWQzZjAyZTM3MGMwIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtMjYzLDcgKzI2Myw3IEBAIGNsYXNzIE9iakNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSk6CiAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKICAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKICAgICAg
ICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgc3ViX3R5cGUKQEAgLTM1Myw4ICsz
NTMsNiBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5v
YmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9u
eW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5v
bnltb3VzX2VudW0oX3R5cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUp
ICsgJyAqJwpAQCAtMzk4LDggKzM5Niw2IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKIAogICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0
ZXIoc2VsZiwgbmFtZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25h
bWUsIHBhcmFtZXRlciksIG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0
cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2Vu
dW0ocGFyYW1ldGVyLnR5cGUpLCBuYW1lKQogICAgICAgICByZXR1cm4gc2VsZi5vYmpjX3Byb3Rv
Y29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cmlu
ZGV4IDMyNmMyNjI1ZWEzNGYwNjZiMmQ0Y2M5ODQ2ZTE0YTIzNDFiODE4ODEuLmI1NmQxNDgxOTVj
NGI2NWZmZDI0M2E5OTEwYWFkMzYzMzNhMDg1MmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTExNCwxMyArMTE0LDEzIEBAIHByaXZh
dGU6CiAgICAgIiIidm9pZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KQogewogICAgIGlmICghJHtyZXNwb25k
c1RvU2VsZWN0b3J9KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
JHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4ke2Nv
bW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgppbmRleCBj
ZGFkNjFkZjdjOWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkLi4yODE1NjFiOTQ4ZTE5YTQx
ZmEwYTJjODBlY2YyZTA5YWYzYThiYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpA
QCAtMyw5ICszLDkgQEAKICAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAogICAgICJ0eXBlcyI6
IFsKICAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAg
ICAgICAgICJpZCI6ICJFbnVtIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAg
ICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAiMSIsICIyIl0KICAgICAgICAgfQogICAgIF0KIH0s
CkBAIC0xMywxMCArMTMsMTggQEAKICAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAogICAg
ICJjb21tYW5kcyI6IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAg
ICAgICAgICJuYW1lIjogImNvbW1hbmQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9t
YWluLkVudW0iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAi
JHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiYmxhY2siXSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgInJlZCJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KKyAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlw
ZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVk
IiwgInNoYXJlZFJlcXVpcmVkIiwgIndoaXRlIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJldHVybk9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIs
ICJzaGFyZWRPcHRpb25hbCIsICJibHVlIl0sICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAg
ICAgXQogICAgICAgICB9CiAgICAgXQpAQCAtMjUsOSArMzMsMTIgQEAKICAgICAiZG9tYWluIjog
IkV2ZW50RG9tYWluIiwKICAgICAiZXZlbnRzIjogWwogICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAgICJuYW1lIjogImV2
ZW50IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyYW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJi
bGFjayIsICJ3aGl0ZSJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJl
ZCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlclJlcXVpcmVkIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJn
cmV5Il0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRpb25hbCIsICJn
cmVlbiJdLCAib3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAg
IF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTljMThiZmFlNWIzMmM5NTdiYmVhZDRlMGVi
OWQwNmI2Mzk4YjA2My4uMzJkNGE4ZTgxMTQ2MDFlZmQ2NmVmOTg3OWJkY2E2Y2ZmZTcwYmM4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJp
dmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2Nv
bF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDEx
ICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQo
KSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRl
RGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1h
bmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5k
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2Nh
bGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFu
ZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCku
aXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEs
MTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAK
LSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4
LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAg
bmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBD
b21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTks
MjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9p
ZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IGQxYzY5YjAzMWNkYjQ3MWQxOGEyZTQ5Nzhm
MjEyN2IwZWNkNDdjNTIuLjRjZTZmYzNkMjEzNmE0ZWI0YWIyMjQ2NTFhOWJmYjE2NWU0NTMwZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTczLDcgKzczLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05
MSwxMCArOTEsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzYsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBA
IC0xNDgsMjcgKzE1MSwyMCBAQCBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6
Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0
aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KLSAg
ICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFn
ZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9
OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0
X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9w
dF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0
aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5h
dGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBv
cHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyogb3B0X2NvbHVt
bk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVzICovLCBPcHRpb25hbDxkb3VibGU+IC8qIG9w
dF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpPYmplY3Q+IC8qIG9wdF92YWx1ZXMgKi8sIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxvYWQgKi8sIE9wdGlvbmFsPGludD4gLyogb3B0
X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBvcHRf
c3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
Lyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBvcHRfcHJpbnRDb2xvciAq
Lz4+IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAg
ICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1
bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVz
dGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1
ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
cj4gcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7
CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXls
b2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhp
bnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyog
Y29sdW1uTmFtZXMgKi8sIFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFtcCAq
LywgUmVmPEpTT046Ok9iamVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8qIHBh
eWxvYWQgKi8sIGludCAvKiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gLyogc3FsRXJyb3IgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
LyogYWx0ZXJuYXRlQ29sb3JzICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
Lyogc2NyZWVuQ29sb3IgKi8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZVNRTFN5
bmMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpW
YWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQg
c2VuZFN1Y2Nlc3MoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2
YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxs
YmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJikg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTc2LDEyICsxNzIsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xf
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJp
dmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3Bh
cmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMzAsOSArMjI2
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjU0LDM3ICsyNDgsMzYgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFi
YXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChw
cm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7
CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMU3luYyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVj
dXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxB
c3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDg1ICsy
ODUsNzYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdEkKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
cHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7
Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046
Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxv
YWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29s
dW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxv
YWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChv
dXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVz
dGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChv
dXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpv
dXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlm
IChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRf
YWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENv
bG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworCisgICAgYXV0byBbb3V0X29wdF9jb2x1bW5OYW1lcywgb3V0X29wdF9ub3Rlcywgb3V0X29w
dF90aW1lc3RhbXAsIG91dF9vcHRfdmFsdWVzLCBvdXRfb3B0X3BheWxvYWQsIG91dF9vcHRfZGF0
YWJhc2VJZCwgb3V0X29wdF9zcWxFcnJvciwgb3V0X29wdF9zY3JlZW5Db2xvciwgb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMsIG91dF9vcHRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9vcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9vcHRfbm90ZXMp
OworICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAg
aWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgb3V0X29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
aWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIG91dF9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfb3B0X3ByaW50
Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5n
PiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGlu
dD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0
X2RhdGFiYXNlSWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxF
cnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9z
Y3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGlt
ZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICp2YWx1ZXMpOwotICAgIGlmIChw
YXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChkYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAg
IGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsK
LSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xv
ci5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqcHJpbnRDb2xvcik7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3Zl
KGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X25vdGVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3B0X25vdGVzKTsKKyAgICBp
ZiAoISFvcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvcHRfdmFsdWVz
KQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG9w
dF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3BheWxvYWQpCisgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxv
YWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X2RhdGFiYXNlSWQpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3B0X2Rh
dGFiYXNlSWQpOworICAgIGlmICghIW9wdF9zcWxFcnJvcikKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoISFv
cHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3B0X3ByaW50Q29sb3IpOworICAgIENh
bGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwog
fQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRh
YmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsK
KyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2Vy
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBh
dXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTM3OCwyMCArMzYyLDE4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0
Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5j
b3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQp
KSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFy
YW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
cXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNl
SWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMzk5LDY1ICszODEsNTYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamUKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhwcm90b2NvbF9jYWxsSWQsICppbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAg
ICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046
Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGlu
dCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAg
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENv
bG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0
X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKLQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIG91dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBvdXRfcGF5bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5leGVjdXRlU1FMU3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAg
ICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3Zh
bHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRl
cm5hdGVDb2xvcnMsIG91dF9zY3JlZW5Db2xvciwgb3V0X3ByaW50Q29sb3JdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91
dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKG91dF9zcWxFcnJvcikp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfcHJpbnRDb2xvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkg
OiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNo
ZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYm
IGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IgcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWY8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIHByaW50Q29sb3IpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZh
bHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29s
b3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2Up
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBX
VEZNb3ZlKGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZN
b3ZlKHNxbEVycm9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
c2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpKTsK
IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAg
aW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFt
ZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVl
cnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1
ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlk
Il9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAg
aWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBA
IC00NjUsMTQgKzQzOCwxMiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElk
KSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCpp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC01MTMsNiArNDg0LDcgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmoKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU1Niw3ICs1MjgsNiBAQCBjbGFzcyBG
cm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
OTcsNyArNTY4LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02MTksNyArNTkyLDcgQEAgZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNlSWQgPSBpbnQ7Ci11c2luZyBDb2xv
ckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVm
cy4KIApAQCAtNjQzLDcgKzYxNiw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CiB9OyAv
LyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFz
cyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02NzAsMTcgKzY0MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21l
c3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29k
ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0K
IApAQCAtNzE5LDcgKzY5Miw3IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEYXRh
YmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKK09w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5n
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTc3MSw4ICs3NDQsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzk3LDE2ICs3NjksMTYgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUs
CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC04NjMsMTAgKzgzNSwxMCBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
YXRhYmFzZUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBy
ZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTkxNCwxODMgKzg4NiwxNzkgQEAg
cHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwot
ICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAg
ICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAg
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVu
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKm91dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3Rlcywg
ZG91YmxlICpvdXRfb3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29w
dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpv
dXRfb3B0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3Nx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRf
b3B0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpvdXRfb3B0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisg
ICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91
dF9vcHRfbm90ZXMpOworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9v
cHRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92
YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypv
dXRfb3B0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0
YWJhc2VJZCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29w
dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IGlmICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29w
dF9zY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAg
ICAgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0
X29wdF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwog
ICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9k
YXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6
cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0g
ICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9vcHRfbm90
ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91
dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxvYWQsIGlu
dCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqb3V0X29w
dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRfb3B0X3Nj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENvbG9yKSB7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0
X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9zcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0X25vdGVz
KQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpv
dXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKm91dF9v
cHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQp
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0
X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmICghIW91
dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91
dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
Km91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwg
ZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdh
dGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpv
X2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3Rl
cywgZG91YmxlIG91dF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBv
dXRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFs
dWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMi
X3MsIG91dF9ub3Rlcyk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9w
YXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0
X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAg
TlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9y
KSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0
ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFs
c2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
dXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAi
cGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVy
bmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2lu
X2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0g
aW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKQEAgLTEzNDYsMTAg
KzEzMTQsMTAgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKIEBw
cm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9w
dGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lk
KWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQp
ZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2Fk
LCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFi
YXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRl
U1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxs
YmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsK
IEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAxZjJmNDVkNzRjMzkzOTExMTIzNmE4NjdkN2Zm
ZmQyNDBlNmQ5OWM1Li4zZTQ0Mjc0ODk0YzJlZDA2NGVlOGQxOTllMWEwZTRjMTE0NGFiZmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiBjbGFz
cyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSog
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYg
b3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBv
cHRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9i
amVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmlu
dENvbG9yKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMSwxMSAr
MTMxLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0MywxNSArMTQ2LDggQEAgY2xhc3MgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJp
bnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9
IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBC
bGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9p
bl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBv
cHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2lu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0
cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1w
LCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046
OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywg
SlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBvcHRfY29sdW1u
TmFtZXMgKi8sIFN0cmluZyAvKiBvcHRfbm90ZXMgKi8sIE9wdGlvbmFsPGRvdWJsZT4gLyogb3B0
X3RpbWVzdGFtcCAqLywgUmVmUHRyPEpTT046Ok9iamVjdD4gLyogb3B0X3ZhbHVlcyAqLywgUmVm
UHRyPEpTT046OlZhbHVlPiAvKiBvcHRfcGF5bG9hZCAqLywgT3B0aW9uYWw8aW50PiAvKiBvcHRf
ZGF0YWJhc2VJZCAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIG9wdF9z
cWxFcnJvciAqLywgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiAv
KiBvcHRfc2NyZWVuQ29sb3IgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gLyogb3B0X2FsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5nIC8qIG9wdF9wcmludENvbG9yICov
Pj4gZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYm
IG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNl
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBjb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8q
IG5vdGVzICovLCBkb3VibGUgLyogdGltZXN0YW1wICovLCBSZWY8SlNPTjo6T2JqZWN0PiAvKiB2
YWx1ZXMgKi8sIFJlZjxKU09OOjpWYWx1ZT4gLyogcGF5bG9hZCAqLywgaW50IC8qIGRhdGFiYXNl
SWQgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBzcWxFcnJvciAqLywgUHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBSZWY8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5n
IC8qIHByaW50Q29sb3IgKi8+PiBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046
OkFycmF5PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4m
JiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTU5LDEwICsxNTUsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMTEsOSArMjA3LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjM1LDQ3ICsyMjksMzYgQEAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7
CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJz
ID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKLSAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
KSB7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIg
KyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
CiB7Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCAmb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgJm9wdF9pbl9ub3Rlc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsICZvcHRfaW5fdGltZXN0YW1w
X3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCAmb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsICZvcHRf
aW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCAmb3B0
X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3Fs
RXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2NyZWVu
Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgJm9wdF9p
bl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xv
cl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9y
Il9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7CisgICAgYXV0byBpbl9vcHRfY29s
dW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9ub3Rl
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAibm90ZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3ZhbHVlcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9z
LCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFZhbHVlKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCBmYWxzZSk7
CisgICAgYXV0byBpbl9vcHRfZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIGZhbHNlKTsK
KyAgICBhdXRvIGluX29wdF9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVj
dChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIGZhbHNlKTsKKyAgICBh
dXRvIGluX29wdF9zY3JlZW5Db2xvcl9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgZmFsc2UpOwor
ICAgIGF1dG8gaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIGZh
bHNlKTsKKyAgICBhdXRvIGluX29wdF9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBmYWxz
ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
ICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9z
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzLDY1ICsyNjYsNTggQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBSZWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVs
bHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29wdF9ub3RlcywgV1RGTW92ZShp
bl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSwgV1RGTW92ZShpbl9vcHRf
cGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBXVEZNb3ZlKGluX29wdF9zcWxF
cnJvciksIGluX29wdF9zY3JlZW5Db2xvcl9qc29uLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVD
b2xvcnMpLCBpbl9vcHRfcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1
bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxk
b3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFs
dWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25h
bDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3By
aW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJv
ciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBu
dWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6
IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRh
YmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3Fs
RXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9j
b2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5
bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisgICAgYXV0byBpbl9vcHRfc2NyZWVu
Q29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX29wdF9zY3JlZW5Db2xvcl9qc29u
KTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Km91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAo
b3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2Ny
ZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKFdURk1v
dmUoaW5fb3B0X2NvbHVtbk5hbWVzKSwgaW5fb3B0X25vdGVzLCBXVEZNb3ZlKGluX29wdF90aW1l
c3RhbXApLCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpLCBXVEZNb3ZlKGluX29wdF9wYXlsb2FkKSwg
V1RGTW92ZShpbl9vcHRfZGF0YWJhc2VJZCksIFdURk1vdmUoaW5fb3B0X3NxbEVycm9yKSwgV1RG
TW92ZShpbl9vcHRfc2NyZWVuQ29sb3IpLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVDb2xvcnMp
LCBpbl9vcHRfcHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1uTmFtZXMs
IG91dF9vcHRfbm90ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywgb3V0X29w
dF9wYXlsb2FkLCBvdXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91dF9vcHRf
c2NyZWVuQ29sb3IsIG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50Q29sb3Jd
ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5h
bWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBvdXRfb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91
dF9vcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfb3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0
X29wdF90aW1lc3RhbXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFsdWVzLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3BheWxvYWQu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9v
cHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRfc3FsRXJy
b3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIFBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRfc2NyZWVu
Q29sb3IpKTsKKyAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9vcHRf
YWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcHJp
bnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgb3V0X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlu
X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5n
ZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9z
LCBudWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRW
YWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJz
LmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2Ny
ZWVuQ29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJu
YXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29s
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInBy
aW50Q29sb3IiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1u
TmFtZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShw
cm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCB0cnVlKTsKKyAgICBhdXRv
IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3BheWxvYWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
cGF5bG9hZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fc2NyZWVuQ29sb3JfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTM0OSw0MSArMzI1LDM4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBp
bl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJh
c2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywg
aW5fcHJpbnRDb2xvcik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgaW5fY29sdW1uTmFtZXMucmVsZWFz
ZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5yZWxlYXNlTm9u
TnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCksICppbl9kYXRhYmFzZUlkLCBpbl9z
cWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCBpbl9zY3JlZW5Db2xvcl9qc29uLCBpbl9hbHRlcm5h
dGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9z
Y3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byBpbl9zY3JlZW5Db2xvciA9IFBy
b3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3JfanNvbik7CisgICAgaWYgKCFp
bl9zY3JlZW5Db2xvcikgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5r
bm93biBzY3JlZW5Db2xvcjogIl9zLCBpbl9zY3JlZW5Db2xvcl9qc29uKSk7CisgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
aW5fY29sdW1uTmFtZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAs
IGluX3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCks
ICppbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fc2NyZWVu
Q29sb3IsIGluX2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wcmludENvbG9y
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rl
cywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X3ByaW50Q29sb3JdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5O
YW1lcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBv
dXRfbm90ZXMpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFi
YXNlSWQpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBXVEZNb3ZlKG91dF9zcWxFcnJvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBv
dXRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MjQsNiArMzk3LDcgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlAKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTQ2
Nyw3ICs0NDEsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC01MDgsNyArNDgxLDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MzAsNyArNTA1
LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8q
IFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNl
SWQgPSBpbnQ7Ci11c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJh
c2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtNTU0LDcgKzUyOSw3IEBAIGVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7CiB9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0
YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
K2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgog
ICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01ODEsMTcgKzU1NiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNz
YWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
ZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNjMwLDcgKzYwNSw3IEBAIE9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAog
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTY4Miw4ICs2NTcsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzA4LDE2ICs2
ODIsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6
R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkJsdWUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OkJsdWUsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAg
ICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC03NzQsOCArNzQ4
LDggQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBP
cHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGlu
dD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1
ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKSBmaW5hbDsKIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwpAQCAtODIzLDEzNyArNzk3LDEzNSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6
QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpT
T046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJp
bnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBpbl9vcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fb3B0X25v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiYgaW5fb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxv
YWQsIE9wdGlvbmFsPGludD4mJiBpbl9vcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBpbl9vcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBpbl9vcHRfcHJpbnRDb2xvcikKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVz
OnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6
cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
bm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYg
KGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAo
bm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpu
b3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVl
cykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFs
dWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
KnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29s
b3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91
dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRf
b3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2
YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9y
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihv
dXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMp
OworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1w
KTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxv
YWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9v
cHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xv
cikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pT
T05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENv
bG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBpZiAo
aW5fY29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAgaWYg
KGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJsZSBv
X2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3RpbWVz
dGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Zh
bHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10gYXV0
b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwotICAg
IGlmIChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFz
ZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0YWJhc2VJZCkKLSAg
ICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3FsRXJyb3IpCi0gICAg
ICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7Ci0g
ICAgaWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVl
bkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3Jz
OwotICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRlQ29s
b3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAgIG9f
aW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rlczoo
aW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAm
b19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDog
bmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJ
ZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9z
cWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29s
b3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGlu
X2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xv
cjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOworICAg
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9vcHRfY29sdW1uTmFtZXM7CisgICAgaWYgKCEh
aW5fb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX29wdF9jb2x1bW5OYW1lcyA9IHRvT2Jq
Q1N0cmluZ0FycmF5KGluX29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBO
U1N0cmluZyAqb19pbl9vcHRfbm90ZXM7CisgICAgaWYgKCEhaW5fb3B0X25vdGVzKQorICAgICAg
ICBvX2luX29wdF9ub3RlcyA9IGluX29wdF9ub3RlczsKKyAgICBkb3VibGUgb19pbl9vcHRfdGlt
ZXN0YW1wOworICAgIGlmICghIWluX29wdF90aW1lc3RhbXApCisgICAgICAgIG9faW5fb3B0X3Rp
bWVzdGFtcCA9ICppbl9vcHRfdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b19pbl9vcHRfdmFsdWVzOworICAgIGlmICghIWluX29wdF92YWx1ZXMpCisgICAgICAgIG9faW5f
b3B0X3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OmluX29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9vcHRfcGF5bG9hZDsKKyAgICBpZiAoISFpbl9v
cHRfcGF5bG9hZCkKKyAgICAgICAgb19pbl9vcHRfcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX29wdF9wYXlsb2FkLnJlbGVhc2VO
b25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9vcHRfZGF0YWJhc2VJZDsKKyAg
ICBpZiAoISFpbl9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9vcHRfZGF0YWJhc2VJZCA9
ICppbl9vcHRfZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X29wdF9zcWxFcnJvcjsKKyAgICBpZiAoISFpbl9vcHRfc3FsRXJyb3IpCisgICAgICAgIG9faW5f
b3B0X3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OmluX29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFz
ZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2lu
X29wdF9zY3JlZW5Db2xvcjsKKyAgICBpZiAoISFpbl9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAg
IG9faW5fb3B0X3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fb3B0X3NjcmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fb3B0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoISFpbl9vcHRf
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBvX2luX29wdF9hbHRlcm5hdGVDb2xvcnMgPSB0b09i
akNTdHJpbmdBcnJheShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cyk+IG9faW5fb3B0X3By
aW50Q29sb3I7CisgICAgaWYgKCEhaW5fb3B0X3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fb3B0
X3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5v
bnltb3VzKT4oaW5fb3B0X3ByaW50Q29sb3IpOworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KCEhaW5fb3B0X2NvbHVtbk5hbWVz
ID8gJm9faW5fb3B0X2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooISFpbl9vcHRfbm90ZXMgPyAm
b19pbl9vcHRfbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooISFpbl9vcHRfdGltZXN0YW1wID8gJm9f
aW5fb3B0X3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOighIWluX29wdF92YWx1ZXMgPyAmb19pbl9v
cHRfdmFsdWVzIDogbmlsKSBwYXlsb2FkOighIWluX29wdF9wYXlsb2FkID8gJm9faW5fb3B0X3Bh
eWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KCEhaW5fb3B0X2RhdGFiYXNlSWQgPyAmb19pbl9vcHRf
ZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KCEhaW5fb3B0X3NxbEVycm9yID8gJm9faW5fb3B0
X3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooISFpbl9vcHRfc2NyZWVuQ29sb3IgPyAmb19p
bl9vcHRfc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOighIWluX29w
dF9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9vcHRfYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmlu
dENvbG9yOighIWluX29wdF9wcmludENvbG9yID8gJm9faW5fb3B0X3ByaW50Q29sb3IudmFsdWUo
KSA6IG5pbCldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpT
T046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91Ymxl
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6
dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6
YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3Vu
ZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0p
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9y
KSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRf
bm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91
cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtv
dXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
cyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoV1RGTW92ZShp
bl9jb2x1bW5OYW1lcykpOwogICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CiAg
ICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpXVEZNb3ZlKGluX3ZhbHVlcyldIGF1dG9y
ZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5f
cGF5bG9hZCldIGF1dG9yZWxlYXNlXTsKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0g
W1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Km9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl9zcWxFcnJvcildIGF1dG9yZWxlYXNlXTsKICAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Pihpbl9zY3JlZW5Db2xvcik7CiAgICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJf
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
X2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xv
cnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4oaW5fcHJpbnRDb2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVy
bmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KFdURk1vdmUoaW5fYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4gb19pbl9w
cmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255
bW91cyk+KGluX3ByaW50Q29sb3IpOwogICAgIGlmICghb19pbl9wcmludENvbG9yKSB7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5v
dGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVl
cyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJv
cjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRl
cm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29s
b3IudmFsdWUoKV07CiB9CiAKQEAgLTEyMTMsOCArMTE4NSw4IEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3Vj
Y2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRl
cm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
IGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxF
cnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVl
bkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykpcHJpbnRD
b2xvcjsKIEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKaW5k
ZXggZDAyYmVkN2I4ZDZlMmZlMDJhNTI0MmVkMTIyZjRhMjg0ZjkwYzliOS4uYjMwZGYxNzBhYWJh
NTk3YjM2MTk2MjRiYWQ2NzkzNTE1MzNlNDQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uLXJlc3VsdApAQCAtNzYsNyArNzYsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogfTsKICNlbmRpZiAv
LyBET01BSU4tTUFDCkBAIC0xNDAsMTEgKzE0MCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpZiBET01BSU4tTUFDCkBAIC0xNTYsNyArMTU5LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiBwdWJsaWM6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gbG9hZFJlc291cmNlKCkgPSAwOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OwpAQCAtMTY3LDEwICsxNzAsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKICNpZiBDT01N
QU5ELU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJv
dG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTIyMSw5ICsyMjQsNyBAQCBwcml2YXRlOgogI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDgsNDEgKzI0
OSw0MSBAQCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7CiB9CiAKLXZv
aWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAog
I2lmIENPTU1BTkQtTUFDCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgewotICAg
ICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNv
dXJjZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfQogCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1B
QwpAQCAtMzI1LDYgKzMyNiw3IEBAIHZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zODEsNyArMzgzLDYgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zODksMTAgKzM5MCwxMCBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpZiBFVkVOVC1NQUMKIHZvaWQgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIl9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMK
ICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC00MzQsNyArNDM1LDkgQEAgdm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NjEsNyArNDY0LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9y
OwogbmFtZXNwYWNlIE5ldHdvcmsgewogCiAjaWYgVFlQRS1NQUMKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5ldHdvcmtFcnJvciBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtNDg4LDE3ICs0OTEsMTcgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNv
ZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9z
LCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAg
ICAgICAgfQogCkBAIC01NzAsOCArNTczLDcgQEAgcHVibGljOgogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjMxLDcgKzYzMyw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlCiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAg
dm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKICNlbmRpZiAvLyBDT01NQU5ELU1B
QwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwpAQCAtNjgzLDIxICs2ODUsMjIgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpZiBET01BSU4tTUFDCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAg
ICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC05MTEsOSAr
OTE0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxv
YWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5l
dHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uLXJlc3VsdAppbmRleCBhNDhmNmY5YjVhMTk3OTgyYWQ2OTEwMjlhZWFh
ZGM2NzUyZjgxMzJhLi5jODc1MTQ4ZjNkYWYwNWVkMzFhY2VkOTdjMzJlYjNiYjc1NDdmOGFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcg
QEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAt
MTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENv
bW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3Rv
Y29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0g
IkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBD
b21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAot
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3Rv
Y29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVy
cm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2
ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1
LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIx
ICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQo
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKaW5kZXggYTc3ZmUzNTg5Nzg4NTM0NzUwNTYyMjNlMDE5YTFiMGZiMWQ0N2U2
OC4uOTQyZGNjYThmMjYwMWVjNjk3MmJiYzYwOTg0YmRjNzU1NzQxYzNlZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1
YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxl
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
QEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3Rv
Y29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIw
NCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21h
aW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAg
ICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3Rv
Y29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Cit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5k
KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92
ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFu
ZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQog
ewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFp
bi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2Fn
ZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBA
IC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CmluZGV4IDBhZDZk
MDQ0NjAxYzJlYTQwODM4OGJjZjI1NGZjNjY1NDVmN2NkMDQuLjg0OWYzYjcyOWNhY2Q4YjlmMTE0
YzhiOWJmYjIxNzE5MWQyNzI5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3
ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Cisg
ICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7
CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBA
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMg
PSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0
aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVy
cykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5D
b21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFu
ZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
YWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6
RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUy
LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xh
c3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAg
LTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12
b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKaW5kZXggNDc1
Yjg3YmQwYzhkYTg1MmI1Zjk5MGNiMjFjYjNjMmUwNzYwOTk4NC4uNDE5ZjkyZWRhMTNhZWMyMmQ4
ZjRhZjJhZjE3ZjA1Zjc1ZDI0MWE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQKQEAgLTc5LDcgKzc5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToK
IGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2
KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBj
YWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29s
X2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBwcm90
b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHBy
b3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
cHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9u
ZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNTEsMTEgKzE1MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNjQsMjAgKzE2NywyMCBAQCBj
bGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UxKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwogCiBjbGFzcyBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2Ux
KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJl
c291cmNlMigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGxvYWRSZXNvdXJjZTMoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBsb2FkUmVzb3VyY2U0KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTYoKSA9IDA7CisgICAgdmlydHVhbCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2U3KCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTg1LDkgKzE4OCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KQEAgLTIwMiwxNSArMjA1LDE1IEBAIHByaXZhdGU6CiBjbGFzcyBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgot
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBw
cm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTUobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9w
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBwcm90b2NsX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yNTksOSArMjYy
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjg0LDM4ICsyODUsMzggQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdv
cmsxIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
MSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAg
ICAgIGxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShwcm90b2NvbF9jYWxsSWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJv
cigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAog
UmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKQEAgLTMzMCwxNCArMzMxLDEzIEBAIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMyJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVy
cyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5n
IENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAgdXNpbmcgQ2Fs
bEhhbmRsZXIgPSB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAg
ICB1c2luZyBEaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAo
ZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CkBAIC0zNTgsMTQ2ICszNTgsMTUzIEBAIHZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSCiAgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgYXV0
byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGF1dG8g
ZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQocHJvdG9jb2xfbWV0aG9kKTsKICAg
ICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgcHJvdG9jb2xf
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UxKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihwcm90b2NvbF9j
YWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTIoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlNChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoKTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1
KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
NShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihwcm90b2NvbF9jYWxs
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTYoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
IH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U3KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoKTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC01MzgsNiArNTQ1LDcgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWMKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU4MSw3ICs1ODksNiBA
QCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC02MjIsNyArNjI5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02ODEsOCArNjkwLDcgQEAgdXNpbmcg
TG9hZGVySWQgPSBTdHJpbmc7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC03MzksNyArNzQ3LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29y
azFCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTc0OCwxMyArNzU2LDEzIEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFjCiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9j
YWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJ
ZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC04MDIsMTYxICs4MTAsMTY5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTYnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTco
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKaW5kZXgg
Nzk1M2NiZjIxODM4OGY4NDc3NzJiZDQxM2QxODAyNjI5YTdiODA1Yi4uOTkzZjlhYTI4YzcxMzY2
ZGRlZTdhZGExZjFjNjEwYzY3MWMxZmIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApAQCAtMzAsMTggKzMwLDE5IEBACiAKIC8v
IFR5cGVEb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4i
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVE
b21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4i
LCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9t
YWluLkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgMTogIjEiLCAyOiAiMiJ9KTsKIEluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKIAogLy8gQ29tbWFu
ZERvbWFpbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4u
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmQi
LCBudWxsLCBbeyJuYW1lIjogImVudW1SZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAiZW51bU9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUi
OiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
fV0sIFsiZW51bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJyZXR1cm5SZXF1aXJlZCIsICJy
ZXR1cm5PcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1h
bmREb21haW4iLCBudWxsKTsKIAogLy8gRXZlbnREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyUmVxdWlyZWQiLCB7U2hhcmVkOiAic2hhcmVk
IiwgU2hhcmVkUmVxdWlyZWQ6ICJzaGFyZWRSZXF1aXJlZCIsIEdyZXk6ICJncmV5In0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyT3B0
aW9uYWwiLCB7U2hhcmVkOiAic2hhcmVkIiwgU2hhcmVkT3B0aW9uYWw6ICJzaGFyZWRPcHRpb25h
bCIsIEdyZWVuOiAiZ3JlZW4ifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50IiwgbnVsbCwgWyJlbnVtUmVxdWlyZWQiLCAiZW51bU9wdGlvbmFsIiwg
InBhcmFtZXRlclJlcXVpcmVkIiwgInBhcmFtZXRlck9wdGlvbmFsIl0pOwogSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7CiBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwogIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KQEAgLTgwLDcgKzgxLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBA
IC05OCw3ICs5OSw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25n
IGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIGVudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9w
dGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9w
dF9wYXJhbWV0ZXJPcHRpb25hbCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNDAsMTEgKzE0MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1MiwxNCArMTU2LDcg
QEAgY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFz
cyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFzcyBS
ZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAotICAg
ICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNs
YXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSAvKiBl
bnVtUmVxdWlyZWQgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiAvKiBv
cHRfZW51bU9wdGlvbmFsICovLCBTdHJpbmcgLyogcmV0dXJuUmVxdWlyZWQgKi8sIFN0cmluZyAv
KiBvcHRfcmV0dXJuT3B0aW9uYWwgKi8+PiBjb21tYW5kKFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYg
b3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3Qg
U3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTY3
LDkgKzE2NCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGNvbW1hbmQobG9uZyBwcm90
b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIxOCw5ICsyMTUsNyBAQCBwcml2YXRlOgog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDIs
NDIgKzIzNyw2MyBAQCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhp
cyk7CiB9CiAKLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIikgewotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRo
b2QgPT0gImNvbW1hbmQiKSB7CisgICAgICAgIGNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7CisgICAgYXV0byBpbl9lbnVtUmVxdWly
ZWRfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiZW51bVJlcXVpcmVkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX29wdF9lbnVt
T3B0aW9uYWxfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAiZW51bU9wdGlvbmFsIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9w
YXJhbWV0ZXJSZXF1aXJlZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRydWUpOworICAgIGF1
dG8gaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXJhbWV0ZXJPcHRpb25hbCJfcywgZmFs
c2UpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Nv
bW1hbmREb21haW4uY29tbWFuZCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBpbl9lbnVt
UmVxdWlyZWRfanNvbiwgaW5fb3B0X2VudW1PcHRpb25hbF9qc29uLCBpbl9wYXJhbWV0ZXJSZXF1
aXJlZCwgaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKyAgICBhdXRvIGlu
X2VudW1SZXF1aXJlZCA9IFByb3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihpbl9lbnVtUmVxdWlyZWRfanNvbik7
CisgICAgaWYgKCFpbl9lbnVtUmVxdWlyZWQpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gZW51bVJlcXVpcmVkOiAiX3MsIGluX2VudW1SZXF1aXJlZF9qc29u
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUp
KTsKKyAgICBhdXRvIGluX29wdF9lbnVtT3B0aW9uYWwgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbF9qc29uKTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmNvbW1hbmQoKmluX2VudW1S
ZXF1aXJlZCwgV1RGTW92ZShpbl9vcHRfZW51bU9wdGlvbmFsKSwgaW5fcGFyYW1ldGVyUmVxdWly
ZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBbb3V0X2VudW1SZXF1aXJlZCwgb3V0X29wdF9lbnVtT3B0aW9uYWwsIG91dF9yZXR1cm5SZXF1
aXJlZCwgb3V0X29wdF9yZXR1cm5PcHRpb25hbF0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsK
KworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywg
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfZW51bVJlcXVp
cmVkKSk7CisgICAgaWYgKCEhb3V0X29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgb3V0
X3JldHVyblJlcXVpcmVkKTsKKyAgICBpZiAoISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5PcHRpb25hbCJfcywg
b3V0X29wdF9yZXR1cm5PcHRpb25hbCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZh
bHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zMTgsNiArMzM0LDcgQEAg
dm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkLAogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMzI4LDEzICszNDUsMTkgQEAgY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEV2ZW50RG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBl
dmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7Cisg
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyUmVxdWlyZWQnIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJh
bWV0ZXJSZXF1aXJlZCB7CiAgICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAgQmxh
Y2sgPSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNsYXNz
IFBhcmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFy
YW1ldGVyKTsKKyAgICAgICAgICAgIFNoYXJlZFJlcXVpcmVkID0gMywKKyAgICAgICAgICAgIEdy
ZXkgPSA0LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkCisgICAg
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyT3B0aW9uYWwnIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJhbWV0
ZXJPcHRpb25hbCB7CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgU2hhcmVk
T3B0aW9uYWwgPSA1LAorICAgICAgICAgICAgR3JlZW4gPSA2LAorICAgICAgICB9OyAvLyBlbnVt
IGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsCisgICAgdm9pZCBldmVudChQcm90b2NvbDo6VHlwZURv
bWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWlyZWQs
IGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKIHByaXZhdGU6CiAgICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMzc2LDE5ICszOTksMjMgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIEV2ZW50
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRl
ciBwYXJhbWV0ZXIpCit2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudChQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29s
OjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKQogewot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5l
dmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAg
IGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCBQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGVudW1SZXF1aXJlZCkpOwor
ICAgIGlmICghIW9wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoKm9wdF9lbnVtT3B0aW9uYWwpKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHBhcmFtZXRlclJlcXVp
cmVkKTsKKyAgICBpZiAoISFvcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRpb25hbCJfcywgb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDI4LDcgKzQ1NSw5IEBAIHZv
aWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIo
UGFyYW1ldGVyIHBhcmFtZXRlcikKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTQ0MCw3ICs0NjksNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogCiAvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KIG5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlw
ZURvbWFpbkVudW07CitlbnVtIGNsYXNzIEVudW07CiB9IC8vIFR5cGVEb21haW4KIC8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KIApAQCAtNDYwLDEyICs0ODksMTEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBu
YW1lc3BhY2UgVHlwZURvbWFpbiB7CiAKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0geworZW51
bSBjbGFzcyBFbnVtIHsKICAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0gICAgR3JlZW4g
PSAyLAotICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQorICAg
IDEgPSAxLAorICAgIDIgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBFbnVtCiAKIH0gLy8gVHlwZURv
bWFpbgogCkBAIC00NzgsNyArNTA2LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUg
J1R5cGVEb21haW4nIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3Qg
U3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDkyLDcgKzUyMCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKIAogLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4g
OiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
PiB7IH07CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6RW51bT4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaApAQCAtNTMwLDggKzU1OCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gOiBJbnRIYXNoPEluCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
NDEsMTQgKzU2OCwxNiBAQCBuYW1lc3BhY2UgVGVzdEhlbHBlcnMgewogCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICAic2hhcmVkIiwKLSAg
ICAicmVkIiwKKyAgICAiMSIsCisgICAgIjIiLAorICAgICJzaGFyZWRSZXF1aXJlZCIsCisgICAg
ImdyZXkiLAorICAgICJzaGFyZWRPcHRpb25hbCIsCiAgICAgImdyZWVuIiwKLSAgICAiYmx1ZSIs
CiAgICAgImJsYWNrIiwKKyAgICAicmVkIiwKICAgICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAg
ICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCisgICAgImJsdWUiLAogfTsKIAogU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CkBAIC01NTgsMTcgKzU4NywxNiBAQCBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnVHlw
ZURvbWFpbicgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6U2hhcmVkLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUeXBl
RG9tYWluOjpFbnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21h
aW46OkVudW06OjEsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06
OjIsCiAgICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
QEAgLTYyNSw3ICs2NTMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbgogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgZW51bVJlcXVpcmVkLCBjb25z
dCBTdHJpbmcmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02NzMsMjYgKzcwMSw0NyBAQCBwcml2YXRlOgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkK
K3ZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBpbl9lbnVtUmVxdWlyZWQsIGNv
bnN0IFN0cmluZyYgaW5fb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBpbl9wYXJhbWV0
ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCiB7Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5j
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgaWYgKCFb
bV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZW51bVJlcXVpcmVkOmVudW1PcHRpb25hbDpwYXJhbWV0
ZXJSZXF1aXJlZDpwYXJhbWV0ZXJPcHRpb25hbDopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKLSAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1By
b3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gb3V0
X2VudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKm91dF9vcHRfZW51bU9w
dGlvbmFsLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgb3V0X3JldHVyblJl
cXVpcmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKm91dF9vcHRfcmV0
dXJuT3B0aW9uYWwpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoImVudW1SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfZW51bVJlcXVpcmVkKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfZW51bU9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpvdXRfb3B0X2VudW1PcHRpb25hbCkpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcmV0
dXJuUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9yZXR1cm5PcHRpb25hbCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVybk9wdGlvbmFs
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3JldHVybk9wdGlvbmFsKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAotICAgIFttX2RlbGVn
YXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9lbnVtUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+KGluX2VudW1SZXF1aXJlZCk7CisgICAg
aWYgKCFvX2luX2VudW1SZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFy
YW1ldGVyICdlbnVtUmVxdWlyZWQnIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBj
YW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9vcHRfZW51bU9wdGlvbmFsOwor
ICAgIGlmICghIWluX29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIG9faW5fb3B0X2VudW1PcHRp
b25hbCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbCk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpPiBvX2luX3BhcmFtZXRlclJlcXVpcmVkID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fcGFyYW1ldGVyUmVxdWly
ZWQpOworICAgIGlmICghb19pbl9wYXJhbWV0ZXJSZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwYXJhbWV0ZXJSZXF1aXJlZCcgb2YgbWV0aG9kICdDb21t
YW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnlt
b3VzKT4gb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKQorICAgICAgICBvX2luX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+KGluX29w
dF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBlbnVt
UmVxdWlyZWQ6b19pbl9lbnVtUmVxdWlyZWQudmFsdWUoKSBlbnVtT3B0aW9uYWw6KCEhaW5fb3B0
X2VudW1PcHRpb25hbCA/ICZvX2luX29wdF9lbnVtT3B0aW9uYWwudmFsdWUoKSA6IG5pbCkgcGFy
YW1ldGVyUmVxdWlyZWQ6b19pbl9wYXJhbWV0ZXJSZXF1aXJlZC52YWx1ZSgpIHBhcmFtZXRlck9w
dGlvbmFsOighIWluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA/ICZvX2luX29wdF9wYXJhbWV0ZXJP
cHRpb25hbC52YWx1ZSgpIDogbmlsKV07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtODg3LDE2ICs5MzYsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICByZXR1
cm4gc2VsZjsKIH0KIAotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRl
cjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVy
KXBhcmFtZXRlcgorLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xF
dmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRlck9wdGlvbmFs
OihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1ldGVyT3B0aW9uYWwK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFt
ZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNl
dFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKGVudW1SZXF1aXJlZCkp
OworICAgIGlmIChlbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCplbnVtT3B0aW9u
YWwpKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlclJl
cXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlclJlcXVpcmVkKSk7CisgICAgaWYg
KHBhcmFtZXRlck9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0
cmluZygicGFyYW1ldGVyT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCpwYXJhbWV0ZXJP
cHRpb25hbCkpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
X3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVu
dChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCkBAIC05
NDMsMjEgKzk5NywyMCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgewogICAgIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCi0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
MSwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTIsCiB9OwogCiAKIAogQHByb3RvY29s
IFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRp
b25hbAotLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpY29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0g
ZW51bVJlcXVpcmVkLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqZW51bU9wdGlvbmFsLCBU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgcmV0dXJuUmVxdWlyZWQsIFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSAqcmV0dXJuT3B0aW9uYWwpKXN1Y2Nlc3ND
YWxsYmFjayBlbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1
aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtICopZW51bU9wdGlv
bmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91
cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbENvbW1h
bmREb21haW4oYW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVu
dFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKKy0gKHZvaWQpZXZlbnRX
aXRoRW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQg
ZW51bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBw
YXJhbWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJh
bWV0ZXJSZXF1aXJlZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4o
YW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiAKQEAgLTEwNTAsMTIgKzEx
MDMsMTAgQEAgaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtIHZhbHVlKQogICAgIHN3aXRjaCh2YWx1ZSkgewogICAgIGNhc2UgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CiAgICAgICAgIHJldHVybiAic2hhcmVkIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Ci0gICAgICAgIHJldHVybiAicmVk
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKLSAgICAgICAg
cmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0xOgorICAgICAgICByZXR1cm4gIjEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bTI6CisgICAgICAgIHJldHVybiAiMiJfczsKICAgICB9CiB9CiAKQEAgLTEw
NjQsMTIgKzExMTUsMTAgQEAgaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWwKIHsKICAgICBpZiAodmFs
dWUgPT0gInNoYXJlZCIpCiAgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVl
ID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZTsKKyAgICBpZiAodmFsdWUgPT0gIjEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0xOworICAgIGlmICh2YWx1ZSA9PSAiMiIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bTI7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIApA
QCAtMTExNywxNyArMTE2NiwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKIAot
KyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5Eb21haW4pCiAKLSsgKHZvaWQp
X3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCiB7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKICAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR5cGVEb21haW5FbnVtIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiRW51bSIpOwogICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTJlZDlm
ODg5NGNlNzc2YjI3MmQ2MTEzZTUzNmNhYTc0NmViY2I4NS4uYmU5NGIzNTk0MDAzMmIzZTlhMzM2
ZDU0MTM0NDc3Yjk2NWNkM2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAt
ODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBA
IGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVj
dGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZp
bmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwz
OCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2Fn
ZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRP
YmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0
ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYg
KG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7
CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNv
bW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBA
IHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQg
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07
CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJf
cyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29s
X2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAg
IFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVy
LnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDkwZTE0
ZThjN2JiNGYwNTE1MTNjYmQ3YzNjNmRjN2I5NmZjYzFhNzQuLjg0N2I0OTNmNzFjNTdlNDI3M2Q4
NDk2MmJhZTlmNmM5MjBmZGM5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjMxLDggKzIzMyw4IEBAIGNsYXNz
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3Vi
bGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIHByaW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7CiB9OwpAQCAtMjc0LDU1ICsyNzYsNTQgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29s
b3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3Rh
bXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRf
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFt
cCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVz
dGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChzcWxFcnJvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7
Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRl
cm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9ub3RlcykK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvcHRf
bm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX3BhcmFt
c09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBp
ZiAoISFvcHRfdmFsdWVzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9w
dF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc3Fs
RXJyb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBvcHRfc2NyZWVuQ29sb3IpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAo
ISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0
KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHBy
aW50Q29sb3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVj
dD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVm
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5h
bWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29sdW1uTmFtZXMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKHNxbEVycm9yKSk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xv
cik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBXVEZNb3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1z
T2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29s
X2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMzYyLDcgKzM2Myw5IEBAIHZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6
OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyCiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zOTEsNyArMzk0LDcgQEAgdXNp
bmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogbmFtZXNwYWNlIERhdGFiYXNl
IHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
ewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTgs
MTcgKzQyMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdl
Il9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNl
dD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDk4LDggKzUwMSw3IEBAIHB1
YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTc3OCwyOSArNzgwLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CiAKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAgaWYgKG5vdGVzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7
CiAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKICAgICBpZiAodmFsdWVz
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMp
IHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOwogICAgIGlmIChwYXlsb2Fk
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2Fk
KSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CiAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNx
bEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CiAgICAg
aWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CiAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKICAgICBpZiAocHJpbnRDb2xv
cikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJp
bnRDb2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7Cisg
ICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCiAtICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50
Q29sb3IKQEAgLTgxNiwyMCArODE4LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5D
b2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXAp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBz
Y3JlZW5Db2xvcik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggMjk0YmE5MDgxMjE4
YTM1MDJkOTZkNDU1ZDRkNjNkMmIzZjVhYWU5YS4uMzljMzY2M2FmZjJmNmZiOWMwZWE3Yjg0OWNm
MzkwYWZkYTNiZmJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0CkBAIC03NCw3ICs3NCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmszIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogY2xhc3Mg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzNCwx
MSArMTM0LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Niw3ICsxNDksNyBAQCBjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShF
cnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1NCw5ICsxNTcsOSBAQCBwcm90
ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVz
c2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjA1LDkgKzIwOCw3IEBA
IHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKQEAgLTIyOSwzOCArMjMwLDM4IEBAIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJf
cywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpIHsK
LSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2Fk
UmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
IH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cisg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zMDEsNiArMzAyLDcgQEAgdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3QKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM1MywxNiArMzU1LDE1IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBOZXR3b3Jr
M0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
azMucmVzb3VyY2VMb2FkZWQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTQwMiw3ICs0MDMsOSBAQCB2b2lkIE5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC00MjMsNyArNDI2LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwog
CiBuYW1lc3BhY2UgTmV0d29yazIgewogCi1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTQ1MCwxNyArNDUzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2Up
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
NTMwLDggKzUzMyw3IEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU4Nyw3ICs1ODksNyBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrMUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwog
fTsKQEAgLTYzNSwyMSArNjM3LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9q
c29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTg1MSw5ICs4NTQsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBy
b3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAppbmRleCA0NTNl
ZjZlNDk0OGVhYjAyNWFiNTYxMzc4ZDJiOGFhOTRmNTVjODhkLi41NmVmNjM0ZGU5ODA2ODU4NmRi
ZGNkMDg4MWI5MWQ4NDllMmZiYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNs
YXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4ICszNjUsNyBAQCB1c2luZyBSZW1v
dGVPYmplY3RJZCA9IFN0cmluZzsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDVmMmNkNzkzMzA0MjQ3ZTc2NTVmM2U5ODFlYTcwMGY1N2M3NzBmZDkuLjhlY2Vj
YzcwMTAzNDA0ZGE3ZGMyNzhjYTk3NTE5YTJkZWJmYzAwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQogbmFtZXNwYWNlIFJ1bnRpbWUgewogCiAvKiBLZXkgcGF0aC4gKi8KLWNsYXNz
IEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBLZXlQYXRoIGZpbmFs
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KICAgICBlbnVt
IGNsYXNzIFR5cGUgewpAQCAtMzM5LDYgKzM0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5n
ID0gMSwKICAgICAgICAgQXJyYXkgPSAyLAogICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQorCiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICAgVHlwZVNldCA9IDEg
PDwgMCwKQEAgLTM2MywxMCArMzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNz
IEtleVBhdGg7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0
PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZSBpbl90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKGluX3R5cGUpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICAgfQogCkBAIC0zOTIsMTQgKzM5NiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5fb3B0X3N0cmluZykKICAgICB7Ci0g
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Cisg
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9vcHRfc3Ry
aW5nKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0QXJyYXkoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBpbl9vcHRfYXJyYXkpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRB
cnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKGluX29wdF9hcnJheSkpOwogICAgIH0KIH07
CiAKQEAgLTQxNCw3ICs0MTgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CitPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDU2LDggKzQ2MCw3IEBAIE9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NzgsMTYgKzQ4MSwxNiBAQCBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWlu
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCiAgICAgfTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKaW5kZXggMzQ4YWNlOTNiYWIwOTQ3ZGFm
ODViNDVmNTljOWZjYWE2NzAyZGUwMC4uMDBhYTM2ZmEzZDAyNDkxM2M1YjhkMjczODExZGE1YTAx
NTQ4MzEyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5
LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAK
QEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTM1Miw4ICszNTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNzljYjk4NTQ1OWY4
ODI0NTY3N2M1ZTNjMjYwNWY3MzQ0ZTExNmJmYy4uMzRiMWFjYmJjYWVjODEyZDg0ZDE2OWZlM2Iy
YjgyNzI1NjdhYmQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAg
cHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1
cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcs
NyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcg
KzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM1Nyw4ICszNjAsNyBA
QCB1c2luZyBSZW1vdGVPYmplY3RJZCA9IGludDsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24t
cmVzdWx0CmluZGV4IGQ4ODgwYzYzZTMzNzhjNWNmZTMwOGNhZmRmODRjYzk4NzQ5MmJiZmMuLjk0
MGYxNTgwYmRjMWQ5YmNhNDQwMTQ3NDE1MmEyM2JiMjU0YjE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0LDE0IEBAIHByaXZh
dGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjksOSArMTcyLDcgQEAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQs
NiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC0zMDMsNyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0LDcgQEAgdXNp
bmcgTHVja3lOdW1iZXJzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwogdXNpbmcgQmFieU5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogdXNpbmcgTmV3T2JqZWN0cyA9IEpTT046OkFycmF5T2Y8
aW50PjsKIHVzaW5nIE9sZE9iamVjdHMgPSBKU09OOjpBcnJheU9mPGludD47Ci11c2luZyBTdG9w
UmVhc29ucyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj47Cit1c2luZyBTdG9wUmVhc29ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+OwogfSAvLyBSdW50aW1lCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM2
NSw3ICszNjgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERv
bWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTQxNyw4ICs0MjAsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDM5LDE2ICs0
NDEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpIdW5ncnksCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7
ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJl
dHVybiAoUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CmluZGV4IDNhMmMyMDUyODMwNDRlMDAwNmIzMzFlZTMxNWIwNDM3YTRmYTViZjkuLjk1MTE2YmM1
MGFiZjI3OTQwNjQ1OTA3MTBmY2QzZTI0NmJmMGM1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiUnVudGltZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTczLDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3ICsyNjUsNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOSArMzY1LDkgQEAgT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwog
CiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYp
OworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQxOCw4ICs0
MjEsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gOiBJbnRIYXNoPElucwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQ0LDMzICs0NDYsMzMgQEAgU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1J1
bnRpbWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6SGVucywKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1lOjpGYXJt
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
OjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXgg
MzI4ZmVkMjNkYzRjYTdmMTg4NTkwYjYzNDRkNWJmN2U0NzNkZGMwMy4uYmE5ZjE3YzYyNTBkY2Uw
NjhjZjk0NjU1OTQ3MGRkNDViNjE3NzQwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjYsMTEgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcxLDkgKzE3NCw3IEBAIHR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjQsNyArMjY2LDYgQEAgY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzA1LDcgKzMwNiw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMzLDcgKzMzNiw3IEBAIGNsYXNzIFBhcmFtZXRl
ckJ1bmRsZTsKIAogLy8gVHlwZWRlZnMuCiBuYW1lc3BhY2UgRGF0YWJhc2UgewotdXNpbmcgRXJy
b3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+OwordXNpbmcgRXJyb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtMzUxLDcg
KzM1NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9y
LiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJv
ciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzc4LDE3ICszODEsMTcgQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwog
ICAgICAgICB9CiAKQEAgLTQyNCwxMyArNDI3LDE0IEBAIGVudW0gY2xhc3MgTW91c2VCdXR0b24g
ewogICAgIFJpZ2h0ID0gMywKIH07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KIAotY2xhc3Mg
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAgICAgUlRMID0g
NSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCkBAIC00NzUs
NTkgKzQ3OSw2MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbHVtbk5h
bWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0Q29s
dW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9vcHRfY29sdW1uTmFtZXMp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEJ1dHRvbnMo
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5f
b3B0X2J1dHRvbnMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
YnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9vcHRfYnV0dG9ucykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgdm9p
ZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSBpbl9vcHRfZGlyZWN0aW9uYWxpdHkp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJl
Y3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbl9vcHRfZGlyZWN0aW9uYWxpdHkpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIGluX29w
dF9ub3RlcykKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90
ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3Rl
cyJfcywgaW5fb3B0X25vdGVzKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIGluX29wdF90aW1lc3RhbXAp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFt
cCJfcywgaW5fb3B0X3RpbWVzdGFtcCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgdm9pZCBzZXRWYWx1ZXMoUmVmPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5fb3B0X3ZhbHVlcykpOwog
ICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQor
ICAgIHZvaWQgc2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxvYWQpCiAg
ICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9h
ZCJfcywgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RXJy
b3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisg
ICAgdm9pZCBzZXRFcnJvcihSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9vcHRf
ZXJyb3IpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9y
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fb3B0X2Vycm9yKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxp
c3Q+IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yTGlzdD4mJiBpbl9vcHRfZXJyb3JMaXN0KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKGluX29w
dF9lcnJvckxpc3QpKTsKICAgICB9CiB9OwogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxl
LgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAg
ICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIENvbHVtbk5hbWVzU2V0
ID0gMSA8PCAwLApAQCAtNTYwLDY2ICs1NjUsNjYgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0
PiYgc2V0Q29sdW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9jb2x1bW5O
YW1lcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9jb2x1
bW5OYW1lcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0
QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNT
ZXQ+JiBzZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+PiYmIGluX2J1dHRvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9i
dXR0b25zKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBz
ZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxp
dHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVj
dGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVj
dGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2Jq
ZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9w
YXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
clNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBX
VEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4m
IHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
TGlzdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRF
cnJvckxpc3QoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiYmIGluX2Vycm9yTGlz
dCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9y
TGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUoaW5fZXJyb3JMaXN0KSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKICAgICAgICAgfQog
CkBAIC02NTUsNyArNjYwLDcgQEAgcHVibGljOgogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1lcyBt
YXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWlu
IEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTY4NSwzOCAr
NjkwLDM4IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJ
bnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBpbl9pbnRl
Z2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50
ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgaW5faW50ZWdlcik7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIGluX2Fy
cmF5KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJy
YXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiYXJyYXkiX3MsIGluX2FycmF5KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8QXJyYXlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3Ry
aW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbl9zdHJpbmcpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQp
LCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJzdHJpbmciX3MsIGluX3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0cmluZ1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1
ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgaW5fdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InZhbHVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1
ZSJfcywgaW5fdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVj
dFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIGluX29iamVjdCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29i
amVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmpl
Y3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJf
cywgaW5fb2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0Pigp
OwogICAgICAgICB9CiAKQEAgLTc0NywxNyArNzUyLDY2IEBAIHB1YmxpYzoKICAgICB9CiB9Owog
CisvKiBBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVs
ZHMuICovCitjbGFzcyBEdW1teU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFJlZjwvKkR1bW15T2JqZWN0Ki9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBEdW1teU9iamVjdDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPER1bW15T2JqZWN0
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihEdW1teU9iamVjdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPER1bW15T2JqZWN0Pio+KCZqc29uUmVzdWx0KSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxEdW1teU9iamVjdD4g
cmVzdWx0ID0gRHVtbXlPYmplY3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorfTsKKwogfSAvLyBEYXRhYmFzZQogCiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNs
YXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFBh
cmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoK
ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUg
Z2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0
eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDAsCkBAIC03ODksNTkgKzg0Myw1
OSBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAgICAg
cHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSBpbl9kaXJlY3Rpb25hbGl0eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9u
YWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fZGlyZWN0aW9uYWxpdHkpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0
aW9uYWxpdHlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0
dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3Ms
IFdURk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0
b25zU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5h
bWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5h
bWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFtZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCks
IHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIGluX25vdGVzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIGluX25vdGVzKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgaW5fdGltZXN0YW1wKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBpbl90aW1lc3Rh
bXApOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVz
U2V0PiYgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVy
dHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBXVEZNb3ZlKGluX3ZhbHVlcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZjxKU09OOjpWYWx1ZT4m
JiBpbl9wYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fcGF5bG9hZCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYmIGluX2Vycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fZXJyb3IpKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtODg2LDE1
ICs5NDAsMTUgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdUZXN0JyBE
b21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC05NDYsOCArMTAwMCw3IEBAIHN0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IDog
SW50SGFzaDxJbnNwZWN0CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC05NzEsNDUgKzEwMjQsNDUgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
IAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0
aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbjo6Tm9uZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b246OkxlZnQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbilj
b25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0
YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAg
ICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1
ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4g
KFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25z
dGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0xMDE3LDE1
ICsxMDcwLDE1IEBAIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVuCiAvLyBFbnVtcyBpbiB0aGUgJ1Rl
c3QnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVz
W2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKaW5kZXggMjZiNzUwYzY2YjIwMWIwZDRlY2JmMmYzNzQ4YWI5ZjQwMzA5
YTllYy4uNGRlMDRhYjRiNmQ5MWRjOTdmMDA2MzU5YThkNmM3NjgwZDkyZjM3YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBA
IHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0
dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTcz
LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3
ICsyNjUsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNDYsNyArMzQ5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKQogbmFtZXNwYWNlIFRlc3QgewogCiAvKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJl
cyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBl
cyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGlu
Z0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBUeXBlTmVlZGluZ0Nhc3Qg
ZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM3NiwzOCArMzc5LDM4IEBAIHB1YmxpYzoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKICAgICBwdWJsaWM6CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgaW5fc3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgaW5fbnVtYmVyKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0
KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJudW1iZXIiX3MsIGluX251bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE51bWJlclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
bmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFu
aW1hbHMoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgaW5fYW5pbWFscykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9w
ZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImFuaW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
YW5pbWFscyJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bl9hbmltYWxzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQg
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCBpbl9pZCkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwg
cHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImlkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQi
X3MsIGluX2lkKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmPFByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX3RyZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCBXVEZNb3ZlKGluX3RyZWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKICAgICAgICAgfQog
CkBAIC00NTIsNyArNDU1LDcgQEAgZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKICAgICBGbGFt
aW5nb3MgPSAzLAogfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCiAKLWNsYXNzIFJlY3Vy
c2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVP
YmplY3QxIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00OTgsMTMgKzUwMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgdm9pZCBzZXRPYmooUmVm
PFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiYmIGluX29wdF9vYmopCiAgICAgewot
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92
ZShpbl9vcHRfb2JqKSk7CiAgICAgfQogfTsKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKQEAgLTU1MCwyNSArNTUzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWY8UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+JiYgaW5fb3B0X29iaikKICAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKGluX29wdF9vYmopKTsK
ICAgICB9CiB9OwogCiB9IC8vIFRlc3QKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsK
K3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0YXRp
YyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewogc3RhdGljIHZv
aWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKIH07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSopOwogfTsKIApAQCAtNTc5LDkgKzU4Miw5IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitP
cHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKIApAQCAtNjM1LDggKzYzOCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiA6IEludEhhc2g8SW5zcGVjdG9yCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02
NjEsMzMgKzY2MywzMyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
IC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6Q2F0cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6SGVucywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytp
KQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICBy
ZXR1cm4gKFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07
CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
RmxhbWluZ29zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpEdWNrcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jv
d3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1p
bmdvcywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CkBAIC02OTYsMTE1ICs2OTgsMTAxIEBAIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwCiAKIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsK
KyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBB
U1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09
ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOwot
I2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFT
U0VSVChvYmplY3QpOwogICAgIHsKICAgICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZp
bmQoInN0cmluZyJfcyk7CiAgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3Ry
aW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51
bWJlciJfcyk7CiAgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0g
ICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVt
YmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAg
IHsKICAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsK
ICAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAg
ewogICAgICAgICBhdXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7CiAgICAgICAgIEFT
U0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52
YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byB0cmVlUG9zID0gb2JqZWN0
LT5maW5kKCJ0cmVlIl9zKTsKICAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLnB0cigp
KTsKICAgICB9CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIHNpemVf
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6
VmFsdWU+JiYgdmFsdWUpCitSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVz
dWx0LmdldCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZT4o
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7
CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBBU1NFUlQob2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Cisg
ICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8g
b2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9i
amVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
alBvcy0+dmFsdWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAv
LyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKKyNlbmRpZgogfQogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09i
amVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2Nl
ZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQo
b2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgc2l6ZV90
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8gb2JqUG9zID0g
b2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+
dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFs
dWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKICAgICAgICAg
fQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdAppbmRleCA3ZDU3NzYyYThmZjhiZTRhOWFlNDlkYzllZjU0N2I5ZDMyMTNk
YzdiLi5iOTg0Y2IwN2MyYjM3NTUxYTFmNzdjMjNiMDk0MDYyMjkxNmVlNWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMjAsNyArMzIz
LDcgQEAgY2xhc3MgT3BlblBhcmFtZXRlcnM7CiAKIG5hbWVzcGFjZSBUZXN0IHsKIAotY2xhc3Mg
Tm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5vT3Bl
blBhcmFtZXRlcnMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM0NywxNyArMzUwLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7CiAgICAgcHVi
bGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSBpbl9v
bmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPbmVT
ZXQpLCBwcm9wZXJ0eV9vbmVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgib25lIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJvbmUiX3MsIGluX29uZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9uZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28o
ZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRv
dWJsZSBpbl90d28pCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0d28iX3MsIGluX3R3byk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR3b1NldD4oKTsKICAgICAgICAgfQogCkBAIC0zODUsNyArMzg4LDcgQEAgcHVibGljOgogICAg
IH0KIH07CiAKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7Citj
bGFzcyBPcGVuUGFyYW1ldGVycyBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3QgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTIsMTcgKzQxNSwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91
YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShk
b3VibGUgaW5fYWxwaGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgaW5fYWxwaGEpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgaW5fYmV0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRh
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIGluX2Jl
dGEpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCZXRhU2V0PigpOwogICAgICAgICB9
CiAKQEAgLTQ1MCw3ICs0NTMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gUHJvcGVydHkg
bmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3Qg
Y2hhciogQWxwaGE7CisgICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogYWxwaGFLZXk7CiB9Owog
CiB9IC8vIFRlc3QKQEAgLTQ5NSwxNCArNDk4LDEzIEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAKLWNvbnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJh
bWV0ZXJzOjpBbHBoYSA9ICJhbHBoYSI7Citjb25zdCBjaGFyKiBQcm90b2NvbDo6VGVzdDo6T3Bl
blBhcmFtZXRlcnM6OmFscGhhS2V5ID0gImFscGhhIjsKIAogfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApp
bmRleCBlZjc3OGEwNmM3ZjI1MTFmNmMyMzQxODY3MjU1MDU2ODM3ZmJmYTNmLi5jMDRhYjU5NzNl
NzY2MTIxZTZiZTg2OTk5ODU0MWQ1YTcxMjcyZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI0LDExICsx
MjQsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2
OSw5ICsxNzIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE5LDYgKzIyMCw3IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtMjYyLDcgKzI2NCw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwMyw3ICszMDQsOSBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4
ICszNjUsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKaW5kZXggZDk5ZmYzMTFkYjc1NTRh
MmIwMTMwZDI3MjI0OWM3YjA0ZDA1YjhhNS4uNjVlYTM1NDU5YzQ0OTc4NDJiNThhYTNiNGQyYzE2
YWJjYzlmZTE1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAK
QEAgLTUwMSwxNCArNTAxLDE0IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZmllbGQgOiBjdXJyZW50U2hhcGUtPm1fb3B0aW9uYWxGaWVsZHMpCiAg
ICAgICAgICAgICBvcHRpb25hbEZpZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CiAKLSAgICAg
ICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKCZmaWVsZHMuZ2V0KCkpOwotICAgICAgICBjdXJy
ZW50T2JqZWN0LT5zZXRPcHRpb25hbEZpZWxkcygmb3B0aW9uYWxGaWVsZHMuZ2V0KCkpOworICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoV1RGTW92ZShmaWVsZHMpKTsKKyAgICAgICAg
Y3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoV1RGTW92ZShvcHRpb25hbEZpZWxkcykp
OwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRDb25zdHJ1Y3Rvck5hbWUoY3VycmVudFNoYXBl
LT5tX2NvbnN0cnVjdG9yTmFtZSk7CiAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldElzSW1wcmVj
aXNlKGN1cnJlbnRTaGFwZS0+bV9pc0luRGljdGlvbmFyeU1vZGUpOwogCiAgICAgICAgIGlmIChj
dXJyZW50U2hhcGUtPm1fcHJvdG8pIHsKICAgICAgICAgICAgIGF1dG8gbmV4dE9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUo
KS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1
Y3R1cmUoJm5leHRPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
UHJvdG90eXBlU3RydWN0dXJlKG5leHRPYmplY3QuY29weVJlZigpKTsKICAgICAgICAgICAgIGN1
cnJlbnRPYmplY3QgPSBXVEZNb3ZlKG5leHRPYmplY3QpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwIGIvU291cmNlL1dURi93dGYvSlNPTlZh
bHVlcy5jcHAKaW5kZXggNDA1MjA3OGYzZjk3YzJlOTBmYWNkMDUxZGMxOTJlYzY1MjYxNGMzNC4u
NDliM2YwY2EyZmYxZjhlNjlkMGM0ZjQzYWFhY2ZjYzZhYmRhNmI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSlNPTlZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVl
cy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBUb2tlbiB7CiAgICAgSW52YWxpZCwK
IH07CiAKLWNvbnN0IGNoYXIqIGNvbnN0IG51bGxTdHJpbmcgPSAibnVsbCI7Ci1jb25zdCBjaGFy
KiBjb25zdCB0cnVlU3RyaW5nID0gInRydWUiOwotY29uc3QgY2hhciogY29uc3QgZmFsc2VTdHJp
bmcgPSAiZmFsc2UiOworY29uc3QgY2hhciogY29uc3QgbnVsbFRva2VuID0gIm51bGwiOworY29u
c3QgY2hhciogY29uc3QgdHJ1ZVRva2VuID0gInRydWUiOworY29uc3QgY2hhciogY29uc3QgZmFs
c2VUb2tlbiA9ICJmYWxzZSI7CiAKIGJvb2wgcGFyc2VDb25zdFRva2VuKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgY29uc3QgY2hh
ciogdG9rZW4pCiB7CkBAIC0yMDksMTUgKzIwOSwxNSBAQCBUb2tlbiBwYXJzZVRva2VuKGNvbnN0
IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlblN0YXJ0
LAogCiAgICAgc3dpdGNoICgqc3RhcnQpIHsKICAgICBjYXNlICduJzoKLSAgICAgICAgaWYgKHBh
cnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgbnVsbFN0cmluZykpCisgICAgICAg
IGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxUb2tlbikpCiAg
ICAgICAgICAgICByZXR1cm4gVG9rZW46Ok51bGw7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
J3QnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0
cnVlU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tl
bkVuZCwgdHJ1ZVRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbFRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ2YnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2Vu
KHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgIGlmIChwYXJzZUNv
bnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIGZhbHNlVG9rZW4pKQogICAgICAgICAgICAg
cmV0dXJuIFRva2VuOjpCb29sRmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ1snOgpA
QCAtMzgwLDcgKzM4MCw3IEBAIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyCiAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRv
a2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdU
Rk1vdmUoYXJyYXlOb2RlKSk7CisgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKGFycmF5Tm9k
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVl
LCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICAg
c3RhcnQgPSB0b2tlbkVuZDsKQEAgLTQyMCw3ICs0MjAsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+
IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcgogICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJ1aWxkVmFsdWUo
c3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG9iamVjdC0+
c2V0VmFsdWUoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICBvYmplY3QtPnNldFZh
bHVlKGtleSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZQpAQCAtNDg5LDQwICs0ODksMzggQEAgUmVmPFZh
bHVlPiBWYWx1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIHZhbHVlKQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgVmFsdWU6OmFzVmFsdWUoUmVmUHRyPFZh
bHVlPiYgdmFsdWUpCitSZWZQdHI8VmFsdWU+IFZhbHVlOjphc1ZhbHVlKCkKIHsKLSAgICB2YWx1
ZSA9IHRoaXM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRoaXM7CiB9CiAKLWJvb2wg
VmFsdWU6OmFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+JikKK1JlZlB0cjxPYmplY3Q+IFZhbHVlOjph
c09iamVjdCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1ib29sIFZhbHVlOjphc0FycmF5KFJlZlB0cjxBcnJheT4mKQorUmVmUHRyPEFycmF5PiBWYWx1
ZTo6YXNBcnJheSgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1ib29sIFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uSW5wdXQsIFJlZlB0
cjxWYWx1ZT4mIG91dHB1dCkKK1JlZlB0cjxWYWx1ZT4gVmFsdWU6OnBhcnNlSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91bGQganVz
dCB1c2UgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQgdXBjb252
ZXJ0aW5nLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbklucHV0KS51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpz
b24pLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IGNo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHN0YXJ0ICsganNvbklucHV0Lmxlbmd0
aCgpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb24ubGVuZ3RoKCk7CiAgICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOwogICAgIGF1dG8gcmVzdWx0ID0gYnVpbGRWYWx1ZShzdGFy
dCwgZW5kLCAmdG9rZW5FbmQsIDApOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBVQ2hhciog
dmFsdWVFbmQgPSB0b2tlbkVuZDsgdmFsdWVFbmQgPCBlbmQ7ICsrdmFsdWVFbmQpIHsKICAgICAg
ICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKCp2YWx1ZUVuZCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBvdXRwdXQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBWYWx1ZTo6ZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIFN0
cmluZ1ZpZXcgc3RyaW5nKQpAQCAtNTczLDk0ICs1NzEsMzIgQEAgU3RyaW5nIFZhbHVlOjp0b0pT
T05TdHJpbmcoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotYm9v
bCBWYWx1ZTo6YXNCb29sZWFuKGJvb2wmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGJvb2w+IFZh
bHVlOjphc0Jvb2xlYW4oKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6Qm9vbGVh
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5ib29sZWFu
OwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBtX3ZhbHVlLmJvb2xlYW47CiB9CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYg
b3V0cHV0KSBjb25zdAorT3B0aW9uYWw8ZG91YmxlPiBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAog
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLm51bWJlcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkgIT0gVHlwZTo6SW50ZWdlcikKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbV92YWx1ZS5udW1iZXI7CiB9
CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGZsb2F0JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxp
bnQ+IFZhbHVlOjphc0ludGVnZXIoKSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6RG91YmxlICYmIHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdmFsdWUu
bnVtYmVyKTsKIH0KIAotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGludCYgb3V0cHV0KSBjb25zdAot
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91
YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBU
eXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLm51bWJl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25nJiBv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUo
KSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9
IHN0YXRpY19jYXN0PGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgp
ICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV92
YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVn
ZXIodW5zaWduZWQgbG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc1N0
cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKK1N0cmluZyBWYWx1ZTo6YXNTdHJpbmcoKSBjb25z
dAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6U3RyaW5nKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLnN0cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICByZXR1cm4gbV92YWx1ZS5zdHJpbmc7CiB9
CiAKIHZvaWQgVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CkBA
IC03MDMsNzYgKzYzOSw3NCBAQCBPYmplY3RCYXNlOjp+T2JqZWN0QmFzZSgpCiB7CiB9CiAKLWJv
b2wgT2JqZWN0QmFzZTo6YXNPYmplY3QoUmVmUHRyPE9iamVjdD4mIG91dHB1dCkKK1JlZlB0cjxP
YmplY3Q+IE9iamVjdEJhc2U6OmFzT2JqZWN0KCkKIHsKICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoT2JqZWN0KSA9PSBzaXplb2YoT2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQotICAgIG91
dHB1dCA9IHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PYmplY3QqIE9iamVjdEJhc2U6Om9wZW5BY2Nlc3NvcnMoKQotewotICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihPYmplY3QpID09IHNpemVvZihPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwot
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwogfQogCiBzaXplX3QgT2Jq
ZWN0QmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSBW
YWx1ZTo6bWVtb3J5Q29zdCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21hcCkg
ewotICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LmtleS5zaXplSW5CeXRlcygpOwotICAgICAg
ICBpZiAoZW50cnkudmFsdWUpCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LnZhbHVl
LT5tZW1vcnlDb3N0KCk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21h
cCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS5rZXkuc2l6ZUluQnl0ZXMoKSArIGVudHJ5
LnZhbHVlLT5tZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKLWJvb2wg
T2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkg
Y29uc3QKK09wdGlvbmFsPGJvb2w+IE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRW
YWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB2
YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHZhbHVlLT5hc0Jvb2xlYW4oKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJs
ZT4gT2JqZWN0QmFzZTo6Z2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1
dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZSgp
OwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxpbnQ+IE9iamVjdEJhc2U6Omdl
dEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4g
dmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3Qob3V0cHV0KTsKKyAgICBhdXRvIHZh
bHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcigpOwogfQogCi1ib29sIE9i
amVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYgb3V0
cHV0KSBjb25zdAorU3RyaW5nIE9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVl
KG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVl
LT5hc0FycmF5KG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgcmV0dXJuIHZh
bHVlLT5hc1N0cmluZygpOwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldFZhbHVlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KSBjb25zdAorUmVmUHRyPE9iamVjdD4g
T2JqZWN0QmFzZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBE
aWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsK
KyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOworfQorCitS
ZWZQdHI8QXJyYXk+IE9iamVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKK3sKKyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc0FycmF5KCk7Cit9
CisKK1JlZlB0cjxWYWx1ZT4gT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAoreworICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7CiAgICAg
aWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG91dHB1dCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWUuY29weVJlZigp
OwogfQogCiB2b2lkIE9iamVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03
OTgsOCArNzMyLDYgQEAgdm9pZCBPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYg
b3V0cHV0KSBjb25zdAogCiBPYmplY3RCYXNlOjpPYmplY3RCYXNlKCkKICAgICA6IFZhbHVlKFR5
cGU6Ok9iamVjdCkKLSAgICAsIG1fbWFwKCkKLSAgICAsIG1fb3JkZXIoKQogewogfQogCkBAIC04
MDcsMTcgKzczOSwxNiBAQCBBcnJheUJhc2U6On5BcnJheUJhc2UoKQogewogfQogCi1ib29sIEFy
cmF5QmFzZTo6YXNBcnJheShSZWZQdHI8QXJyYXk+JiBvdXRwdXQpCitSZWZQdHI8QXJyYXk+IEFy
cmF5QmFzZTo6YXNBcnJheSgpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEFycmF5QmFz
ZSkgPT0gc2l6ZW9mKEFycmF5KSwgY2Fubm90X2Nhc3QpOwotICAgIG91dHB1dCA9IHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7CiB9CiAKIHZvaWQgQXJyYXlCYXNlOjp3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciYgb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IG1fbWFw
LmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdCAhPSBt
X21hcC5iZWdpbigpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwogICAgICAgICAo
Kml0KS0+d3JpdGVKU09OKG91dHB1dCk7CkBAIC04MjcsMTEgKzc1OCwxMCBAQCB2b2lkIEFycmF5
QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogQXJyYXlCYXNl
OjpBcnJheUJhc2UoKQogICAgIDogVmFsdWUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX21hcCgpCiB7
CiB9CiAKLVJlZlB0cjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAor
UmVmPFZhbHVlPiBBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fbWFwLnNpemUo
KSk7CiAgICAgcmV0dXJuIG1fbWFwW2luZGV4XTsKQEAgLTg1MCwxMCArNzgwLDggQEAgUmVmPEFy
cmF5PiBBcnJheTo6Y3JlYXRlKCkKIHNpemVfdCBBcnJheUJhc2U6Om1lbW9yeUNvc3QoKSBjb25z
dAogewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkgewotICAgICAgICBpZiAoaXRlbSkKLSAgICAg
ICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBpdGVtLT5t
ZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaApp
bmRleCBlYmFiYzQ0OWY4ODBiMzlkM2ZhZGU3OGNkNjFiMWM0ZDVlMGU2ODYzLi40MzA3NDUzZDlj
YzhmODhjYzE2OTljZDg4NTcyMTY4NzdmZGM5YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9KU09OVmFsdWVzLmgKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCkBAIC05Miwy
MiArOTIsMTUgQEAgcHVibGljOgogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51
bGw7IH0KIAotICAgIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsKLSAgICBib29sIGFzSW50
ZWdlcihpbnQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25n
IGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Q7
Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9v
bCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGZsb2F0JikgY29u
c3Q7Ci0gICAgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGFzVmFsdWUo
UmVmUHRyPFZhbHVlPiYpOworICAgIE9wdGlvbmFsPGJvb2w+IGFzQm9vbGVhbigpIGNvbnN0Owor
ICAgIE9wdGlvbmFsPGludD4gYXNJbnRlZ2VyKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBhc0RvdWJsZSgpIGNvbnN0OworICAgIFN0cmluZyBhc1N0cmluZygpIGNvbnN0OworICAgIFJl
ZlB0cjxWYWx1ZT4gYXNWYWx1ZSgpOworICAgIHZpcnR1YWwgUmVmUHRyPE9iamVjdD4gYXNPYmpl
Y3QoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxBcnJheT4gYXNBcnJheSgpOwogCi0gICAgdmlydHVh
bCBib29sIGFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+Jik7Ci0gICAgdmlydHVhbCBib29sIGFzQXJy
YXkoUmVmUHRyPEFycmF5PiYpOwotCi0gICAgc3RhdGljIGJvb2wgcGFyc2VKU09OKGNvbnN0IFN0
cmluZyYganNvbklucHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpOworICAgIHN0YXRpYyBSZWZQ
dHI8VmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBlc2Nh
cGVTdHJpbmcoU3RyaW5nQnVpbGRlciYsIFN0cmluZ1ZpZXcpOwogCiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwpAQCAtMTcyLDk1ICsxNjUsNjMgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
V1RGX0VYUE9SVF9QUklWQVRFIE9iamVjdEJhc2UgOiBwdWJsaWMgVmFsdWUgewogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VmFsdWU+PiBEaWN0aW9uYXJ5Owor
ICAgIHVzaW5nIERhdGFTdG9yYWdlID0gSGFzaE1hcDxTdHJpbmcsIFJlZjxWYWx1ZT4+OworICAg
IHVzaW5nIE9yZGVyU3RvcmFnZSA9IFZlY3RvcjxTdHJpbmc+OwogCiBwdWJsaWM6Ci0gICAgdHlw
ZWRlZiBEaWN0aW9uYXJ5OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIERpY3Rpb25h
cnk6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHVzaW5nIGl0ZXJhdG9yID0g
RGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0
b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgT2JqZWN0KiBvcGVuQWNjZXNzb3JzKCk7Cisg
ICAgUmVmUHRyPE9iamVjdD4gYXNPYmplY3QoKSBmaW5hbDsKIAogICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICB+T2JqZWN0QmFzZSgpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBvdmVycmlk
ZTsKLQogICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGR1cGxpY2F0ZWQgc2V0KigpIG1ldGhvZHMuCiAgICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCk7CiAgICAgdm9pZCBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgaW50KTsKICAgICB2b2lkIHNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7
CiAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmKTsK
LSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RCYXNl
PiYmKTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5
QmFzZT4mJik7CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxWYWx1
ZT4mJik7CisgICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0
QmFzZT4mJik7CisgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxBcnJh
eUJhc2U+JiYpOwogCiAgICAgaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAotICAgIC8v
IEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQg
Z2V0KigpIG1ldGhvZHMuCi0gICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgb3V0cHV0KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJs
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJl
ZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB2YWx1ZS0+YXNEb3Vi
bGUob3V0cHV0KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVm
UHRyPFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVn
ZXIob3V0cHV0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBPcHRpb25hbDxUPiBn
ZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRy
PFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIFQgcmVzdWx0OwotICAgICAg
ICBpZiAoIXZhbHVlLT5hc0RvdWJsZShyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgZ2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0OwotICAgIGJv
b2wgZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdD4mKSBjb25zdDsK
LSAgICBib29sIGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYpIGNv
bnN0OwotICAgIGJvb2wgZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFsdWU+
JikgY29uc3Q7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgT3B0aW9uYWw8aW50PiBnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgU3RyaW5nIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBSZWZQdHI8VmFsdWU+IGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7
CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHdy
aXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IGZpbmFsOwogCiAgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQogCi0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX21hcC5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuc2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBPYmplY3RCYXNlKCk7CiAKIHByaXZhdGU6
Ci0gICAgRGljdGlvbmFyeSBtX21hcDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyOworICAg
IERhdGFTdG9yYWdlIG1fbWFwOworICAgIE9yZGVyU3RvcmFnZSBtX29yZGVyOwogfTsKIAogY2xh
c3MgT2JqZWN0IDogcHVibGljIE9iamVjdEJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZf
RVhQT1JUX1BSSVZBVEUgUmVmPE9iamVjdD4gY3JlYXRlKCk7CiAKLSAgICB1c2luZyBPYmplY3RC
YXNlOjphc09iamVjdDsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2
YWx1ZXMsIGFzIHdlIGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6c2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpzZXRJbnRlZ2Vy
OwpAQCAtMjc0LDcgKzIzNSw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRC
b29sZWFuOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEludGVnZXI7CiAgICAgdXNpbmcgT2Jq
ZWN0QmFzZTo6Z2V0RG91YmxlOwotICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE51bWJlcjsKICAg
ICB1c2luZyBPYmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0
T2JqZWN0OwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEFycmF5OwpAQCAtMjkwLDQ5ICsyNTAs
NDkgQEAgcHVibGljOgogCiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJhc2UgOiBw
dWJsaWMgVmFsdWUgeworcHJpdmF0ZToKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IFZlY3RvcjxS
ZWY8VmFsdWU+PjsKKwogcHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxWYWx1ZT4+
OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBEYXRh
U3RvcmFnZTo6aXRlcmF0b3I7CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBEYXRhU3RvcmFn
ZTo6Y29uc3RfaXRlcmF0b3I7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9tYXAuc2l6ZSgpKTsgfQorICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KIAotICAgIFJlZlB0cjxWYWx1ZT4g
Z2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgUmVmPFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4
KSBjb25zdDsKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWw7CiAKKyAgICBS
ZWZQdHI8QXJyYXk+IGFzQXJyYXkoKSBmaW5hbDsKKwogcHJvdGVjdGVkOgogICAgIH5BcnJheUJh
c2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNBcnJheShSZWZQdHI8QXJyYXk+Jikgb3ZlcnJp
ZGU7Ci0KICAgICB2b2lkIHB1c2hCb29sZWFuKGJvb2wpOwogICAgIHZvaWQgcHVzaEludGVnZXIo
aW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsKICAgICB2b2lkIHB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUoUmVmUHRyPFZhbHVlPiYmKTsKLSAg
ICB2b2lkIHB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+JiYpOwotICAgIHZvaWQgcHVzaEFy
cmF5KFJlZlB0cjxBcnJheUJhc2U+JiYpOwotCi0gICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1c2hWYWx1ZShSZWY8VmFs
dWU+JiYpOworICAgIHZvaWQgcHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJik7CisgICAgdm9p
ZCBwdXNoQXJyYXkoUmVmPEFycmF5QmFzZT4mJik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9CisgICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBj
b25zdCBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEFycmF5QmFzZSgpOwogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxSZWZQdHI8VmFsdWU+PiBtX21hcDsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsK
IH07CiAKLWNsYXNzIEFycmF5IDogcHVibGljIEFycmF5QmFzZSB7CitjbGFzcyBBcnJheSBmaW5h
bCA6IHB1YmxpYyBBcnJheUJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZfRVhQT1JUX1BS
SVZBVEUgUmVmPEFycmF5PiBjcmVhdGUoKTsKIAotICAgIHVzaW5nIEFycmF5QmFzZTo6YXNBcnJh
eTsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2YWx1ZXMsIGFzIHdl
IGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcgQXJyYXlCYXNlOjpw
dXNoQm9vbGVhbjsKICAgICB1c2luZyBBcnJheUJhc2U6OnB1c2hJbnRlZ2VyOwpAQCAtMzQ4LDcg
KzMwOCw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBBcnJheUJhc2U6OmVuZDsKIH07CiAKLQogaW5s
aW5lIE9iamVjdEJhc2U6Oml0ZXJhdG9yIE9iamVjdEJhc2U6OmZpbmQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIHJldHVybiBtX21hcC5maW5kKG5hbWUpOwpAQCAtMzc5LDIzICszMzgsMjAg
QEAgaW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRWYWx1ZShuYW1lLCBWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5p
c05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZv
aWQgT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVj
dEJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFs
dWUpOwogICAgIGlmIChtX21hcC5zZXQobmFtZSwgV1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkp
CiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RC
YXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJhc2U+JiYgdmFs
dWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUs
IFJlZjxBcnJheUJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBpZiAo
bV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29y
ZGVyLmFwcGVuZChuYW1lKTsKIH0KQEAgLTQyMCwyNiArMzc2LDIzIEBAIGlubGluZSB2b2lkIEFy
cmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIG1fbWFwLmFwcGVu
ZChWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZlB0cjxWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZjxWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1f
bWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6
cHVzaE9iamVjdChSZWZQdHI8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5
QmFzZTo6cHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
dmFsdWUpOwogICAgIG1fbWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2
b2lkIEFycmF5QmFzZTo6cHVzaEFycmF5KFJlZlB0cjxBcnJheUJhc2U+JiYgdmFsdWUpCitpbmxp
bmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewot
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFycmF5T2YgOiBwdWJsaWMgQXJyYXlCYXNl
IHsKK2NsYXNzIEFycmF5T2YgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHByaXZhdGU6CiAg
ICAgQXJyYXlPZigpIHsgfQogCkBAIC00NTAsNyArNDAzLDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
IHB1YmxpYzoKLSAgICB2b2lkIGFkZEl0ZW0oUmVmUHRyPFQ+JiYgdmFsdWUpCisgICAgdm9pZCBh
ZGRJdGVtKFJlZjxUPiYmIHZhbHVlKQogICAgIHsKICAgICAgICAgY2FzdGVkQXJyYXkoKS5wdXNo
VmFsdWUoV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA4ZGM3NmZhMmU1OWVhNjdlMDIxNzM4YzMxMWEzNTc3
ZjRkMzZlNjkxLi5mODhjYWRhNjYwZjM5YWRlZmEwMDZkMDk1ZWM1ODdmYjI5MzQ2MjBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC01NCwxNCAr
NTQsMTQgQEAgQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYgdGV4dCwKIHsKICAgICBtX21hbmlmZXN0VVJMID0g
bWFuaWZlc3RVUkw7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzb25WYWx1ZTsKLSAgICBp
ZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odGV4dCwganNvblZhbHVlKSkgeworICAgIGF1dG8g
anNvblZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih0ZXh0KTsKKyAgICBpZiAoIWpzb25W
YWx1ZSkgewogICAgICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKCJUaGUgbWFuaWZlc3QgaXMgbm90
IHZhbGlkIEpTT04gZGF0YS4iX3MpOwogICAgICAgICBqc29uVmFsdWUgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1hbmlmZXN0Owot
ICAgIGlmICghanNvblZhbHVlLT5hc09iamVjdChtYW5pZmVzdCkpIHsKKyAgICBhdXRvIG1hbmlm
ZXN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWFuaWZlc3QpIHsKICAgICAg
ICAgbG9nRGV2ZWxvcGVyV2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCBhIEpTT04gdmFsdWUg
b2YgdHlwZSBcIm9iamVjdFwiLiJfcyk7CiAgICAgICAgIG1hbmlmZXN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICB9CkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyOjpsb2dEZXZlbG9wZXJXYXJuaW5nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IAogVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCkKIHsKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCIsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCJfcyk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50VVJMOwog
Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0cmlu
Z1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3Ry
aW5nKCJzdGFydF91cmwiX3MpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnRVUkw7CiAgICAgfQpA
QCAtMTI3LDEyICsxMjcsMTIgQEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNl
U3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QKIAogQXBwbGljYXRp
b25NYW5pZmVzdDo6RGlzcGxheSBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZURpc3Bs
YXkoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MsIHZhbHVl
KSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MpOworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5
OjpCcm93c2VyOwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJv
cGVydHlOb3RBU3RyaW5nKCJkaXNwbGF5Il9zKTsKICAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OkRpc3BsYXk6OkJyb3dzZXI7CiAgICAgfQpAQCAtMTk1LDEyICsxOTUsMTIgQEAg
VVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2Jq
ZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIHsKICAgICBVUkwgZGVmYXVsdFNjb3BlIHsgc3RhcnRV
UkwsICIuLyIgfTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFt
YW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlm
ZXN0LmdldFZhbHVlKCJzY29wZSIpOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBk
ZWZhdWx0U2NvcGU7CiAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5h
c1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFsdWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQ
cm9wZXJ0eU5vdEFTdHJpbmcoInNjb3BlIl9zKTsKICAgICAgICAgcmV0dXJuIGRlZmF1bHRTY29w
ZTsKICAgICB9CkBAIC0yMzEsMTIgKzIzMSwxMiBAQCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VTY29wZShjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBVUgog
CiBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nKGNv
bnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQog
ewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFtYW5pZmVzdC5nZXRW
YWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0
VmFsdWUocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0
cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsK
KyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RB
U3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lz
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFS
ZWdpc3RyeS5jcHAKaW5kZXggM2IyNWQwNmIxMjNhMWE1MWEwYTJhY2ZiNGY2NTZmOGQ5NGFkYjNm
Yy4uNmFiMmY4NzhhM2Y4Y2E5OGU4MmIwZTQyZTVmMGJhYWEyMjhiMWM1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCkBAIC02MiwyMiArNjIsMjIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8
U2hhcmVkQnVmZmVyPj4+IGV4dHJhY3RLZXlJRHNLZXlpZHMoY29uc3QgU2hhcmVkQnVmZmUKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRh
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNv
biwgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24p
OworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2Jq
ZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdldEFycmF5KCJraWRzIiwga2lkc0Fy
cmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoImtpZHMiX3MpOwor
ICAgIGlmICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBrZXlJRHM7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
ICpraWRzQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlEOwotICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5SUQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IGRjZTM1OWU3NjhlZjlhMTNhNmM2ZGUxNmQxZjhk
M2M4YmJmZjdhOTcuLjk0ZDAzZDg1ZDZkYTlmNGY4OGY4Y2QxMmU0YmZmYmQzM2I0ZGM1NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMgPSBudWxscHRyOwogfQogCi12b2lkIENvbW1hbmRMaW5l
QVBJSG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgdmFsdWVUb0luc3BlY3QsIEpTQzo6SlNWYWx1ZSBoaW50c1ZhbHVlKQor
dm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIG9iamVjdCwgSlNDOjpKU1ZhbHVlIGhpbnRz
KQogewogICAgIGlmICghbV9pbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICAgICByZXR1cm47CkBA
IC04MiwxMiArODIsMjAgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjoKICAgICBpZiAoIWluc3Bl
Y3RvckFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBo
aW50c09iamVjdDsKLSAgICBpZiAoIUluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgaGludHNWYWx1ZSktPmFzT2JqZWN0KGhpbnRzT2JqZWN0KSkKKyAgICBh
dXRvIG9iamVjdFZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBvYmplY3QpOworICAgIGlmICghb2JqZWN0VmFsdWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gcmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChJbnNwZWN0b3I6OnRv
SW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlVG9JbnNwZWN0KSk7Ci0g
ICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmplY3QpLCBXVEZNb3Zl
KGhpbnRzT2JqZWN0KSk7CisgICAgYXV0byBoaW50c1ZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3Bl
Y3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBoaW50cyk7CisgICAgaWYgKCFoaW50c1Zh
bHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGhpbnRzT2JqZWN0ID0gaGludHNWYWx1
ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWhpbnRzT2JqZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlbW90ZU9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChvYmplY3RWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChXVEZNb3ZlKHJlbW90ZU9i
amVjdCksIGhpbnRzT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBDb21tYW5kTGluZUFQ
SUhvc3Q6OkV2ZW50TGlzdGVuZXJzUmVjb3JkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRM
aXN0ZW5lcnMoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQpCkBAIC0xMzYsOCArMTQ0LDcgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKCkKICAgICBpZiAoIWNvbnNvbGVBZ2VudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBjb25zb2xlQWdlbnQtPmNsZWFy
TWVzc2FnZXMoaWdub3JlZCk7CisgICAgY29uc29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKCk7CiB9
CiAKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNv
dXJjZXNPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0
UmVzb3VyY2VzT2JqZWN0LmNwcAppbmRleCAwMDE0OGUwZmY0OTQ0YWJkMDkwYjgzNmVhOTMwNWVj
Zjc0OGM2ZmE0Li5iN2ZmMGUxMDRhNTUwNjkxNmNjZmE5ZDIzMGM4YjJiYmIzNjNkZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJl
c291cmNlc09iamVjdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBFeGNlcHRpb25PcjxJbnNwZWN0
b3JBdWRpdFJlc291cmNlc09iamVjdDo6UmVzb3VyY2VDb250ZW50PiBJbnNwZWN0b3JBdWRpdFJl
c291cgogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RGb3VuZEVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGlkZW50aWZpZXIgIl9zLCBpZCkg
fTsKIAotICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKICAgICBSZXNvdXJjZUNvbnRlbnQgcmVzb3VyY2VDb250ZW50Owog
ICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFt
ZSwgY2FjaGVkUmVzb3VyY2UtPnVybCgpLCAmcmVzb3VyY2VDb250ZW50LmRhdGEsICZyZXNvdXJj
ZUNvbnRlbnQuYmFzZTY0RW5jb2RlZCk7CiAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IDVj
NTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYuLmE2MWI4ZWVkYTA0MTZjZjdm
MTU0YWEwMTFjODYwY2U4ZmIwYjMyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCkBAIC0zNTYsMTMgKzM1NiwxMyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFJlYwogICAgIH0KIAogICAgIGlmICghbV9mcmFtZXMpCi0gICAgICAgIG1fZnJhbWVzID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPjo6Y3Jl
YXRlKCk7CisgICAgICAgIG1fZnJhbWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UmVjb3Jk
aW5nOjpGcmFtZT46OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFtX2N1cnJlbnRBY3Rpb25zKSB7CiAg
ICAgICAgIG1fY3VycmVudEFjdGlvbnMgPSBKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPjo6Y3Jl
YXRlKCk7CiAKLSAgICAgICAgYXV0byBmcmFtZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6RnJhbWU6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0QWN0aW9ucyhtX2N1cnJlbnRB
Y3Rpb25zKQorICAgICAgICBhdXRvIGZyYW1lID0gUHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0QWN0aW9ucygqbV9jdXJyZW50QWN0aW9ucykKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgbV9mcmFtZXMtPmFkZEl0ZW0oV1RGTW92
ZShmcmFtZSkpOwpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpyZWNv
cmRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVjCiAK
ICAgICBtX2xhc3RSZWNvcmRlZEFjdGlvbiA9IGJ1aWxkQWN0aW9uKG5hbWUsIFdURk1vdmUocGFy
YW1ldGVycykpOwogICAgIG1fYnVmZmVyVXNlZCArPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVt
b3J5Q29zdCgpOwotICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0obV9sYXN0UmVjb3JkZWRB
Y3Rpb24uZ2V0KCkpOworICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0oKm1fbGFzdFJlY29y
ZGVkQWN0aW9uKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
OjpmaW5hbGl6ZUZyYW1lKCkKICAgICBhcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCk7CiAK
ICAgICBpZiAobV9mcmFtZXMgJiYgbV9mcmFtZXMtPmxlbmd0aCgpICYmICFzdGQ6OmlzbmFuKG1f
Y3VycmVudEZyYW1lU3RhcnRUaW1lKSkgewotICAgICAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0
YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1l
cy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgpKTsKKyAgICAgICAgYXV0byBjdXJy
ZW50RnJhbWUgPSBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlJlY29yZGluZzo6RnJh
bWU+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkpOwogICAgICAgICBjdXJy
ZW50RnJhbWUtPnNldER1cmF0aW9uKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fY3VycmVudEZy
YW1lU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CiAKICAgICAgICAgbV9jdXJyZW50RnJhbWVT
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKQEAgLTQxMiw3ICs0MTIsOCBAQCB2b2lk
IEluc3BlY3RvckNhbnZhczo6bWFya0N1cnJlbnRGcmFtZUluY29tcGxldGUoKQogICAgIGlmICgh
bV9jdXJyZW50QWN0aW9ucyB8fCAhbV9mcmFtZXMgfHwgIW1fZnJhbWVzLT5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVj
b3JkaW5nOjpGcmFtZSo+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkuZ2V0
KCkpLT5zZXRJbmNvbXBsZXRlKHRydWUpOworICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0
KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpKTsKKyAgICBjdXJyZW50RnJhbWUtPnNldEluY29tcGxl
dGUodHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpzZXRCdWZmZXJMaW1pdChsb25n
IG1lbW9yeUxpbWl0KQpAQCAtNDM4LDI5ICs0MzksMjkgQEAgYm9vbCBJbnNwZWN0b3JDYW52YXM6
Om92ZXJGcmFtZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZUNvdW50ICYmIG1fZnJh
bWVzQ2FwdHVyZWQgPj0gbV9mcmFtZUNvdW50LnZhbHVlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZv
ckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpCitSZWY8UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVyZUJh
Y2t0cmFjZSkKIHsKLSAgICB1c2luZyBDb250ZXh0VHlwZVR5cGUgPSBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlPjsKKyAgICB1c2luZyBDb250ZXh0VHlw
ZVR5cGUgPSBPcHRpb25hbDxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZT47CiAgICAgYXV0
byBjb250ZXh0VHlwZSA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0LAogICAgICAgICBbXSAoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3JhcHBl
cikgLT4gQ29udGV4dFR5cGVUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSBjb250
ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwogICAgICAgICAgICAg
aWYgKGlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkJp
dG1hcFJlbmRlcmVyOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6Qml0bWFwUmVuZGVyZXI7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdM
OworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0w7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAgICAgaWYgKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CiAj
ZW5kaWYKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0sCiAjaWYg
RU5BQkxFKFdFQkdQVSkKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViR1BV
RGV2aWNlPikgewotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU6OldlYkdQVTsKKyAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwogICAgICAgICB9LAogI2VuZGlmCiAgICAgICAgIFtd
IChNb25vc3RhdGUpIHsKQEAgLTQ3MCwxMCArNDcxLDEwIEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZh
cyhiCiAgICAgKTsKICAgICBpZiAoIWNvbnRleHRUeXBlKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgICAgICBjb250ZXh0VHlwZSA9IFByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKICAgICB9CiAKLSAgICBhdXRvIGNh
bnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQorICAg
IGF1dG8gY2FudmFzID0gUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0Q2FudmFzSWQobV9pZGVudGlmaWVyKQogICAgICAgICAuc2V0Q29udGV4dFR5cGUoY29u
dGV4dFR5cGUudmFsdWUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTQ4NiwxMiArNDg3LDEy
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2Fu
dmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc4MjgyPiBXZWIgSW5zcGVjdG9yOiBzZW5kIGEgRE9NIG5vZGUgd2l0aCBl
YWNoIENhbnZhcyBwYXlsb2FkIGFuZCBlbGltaW5hdGUgQ2FudmFzLnJlcXVlc3ROb2RlCiAgICAg
fQogCi0gICAgdXNpbmcgQ29udGV4dEF0dHJpYnV0ZXNUeXBlID0gUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+OworICAgIHVzaW5nIENvbnRleHRB
dHRyaWJ1dGVzVHlwZSA9IFJlZlB0cjxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRl
cz47CiAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0
LAogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0PiBjb250ZXh0V3JhcHBlcikgLT4gQ29udGV4dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAg
ICAgIGF1dG8mIGNvbnRleHQgPSBjb250ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlm
IChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1
dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRBbHBoYShkb3duY2FzdDxJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpLmhhc0FscGhhKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQ7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JD
YW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAg
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgYXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLmdldENvbnRleHRBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkLT5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpOwpAQCAt
NTMwLDcgKzUzMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIFtdIChzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURldmljZT4gZGV2aWNlV3JhcHBlcikgLT4gQ29udGV4
dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGRldmljZSA9IGRldmljZVdyYXBw
ZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgb3B0aW9ucyA9IGRldmljZS5h
ZGFwdGVyKCkub3B0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmli
dXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1
dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1
dG8mIHBvd2VyUHJlZmVyZW5jZSA9IG9wdGlvbnMtPnBvd2VyUHJlZmVyZW5jZSkgewogICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHBvd2VyUHJlZmVyZW5jZS52YWx1ZSgpKSB7CkBAIC01NTQs
NyArNTU1LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNw
ZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICAgICAgfQogICAgICk7CiAg
ICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKQotICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRy
aWJ1dGVzKFdURk1vdmUoY29udGV4dEF0dHJpYnV0ZXMpKTsKKyAgICAgICAgY2FudmFzLT5zZXRD
b250ZXh0QXR0cmlidXRlcyhjb250ZXh0QXR0cmlidXRlcy5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTgwODMzPiBXZWIgSW5zcGVjdG9y
OiBzdXBwb3J0IE9mZnNjcmVlbkNhbnZhcyBmb3IgQ2FudmFzIHJlbGF0ZWQgb3BlcmF0aW9ucwog
CkBAIC01NzEsNyArNTcyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICByZXR1cm4g
Y2FudmFzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRp
bmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpCitSZWY8UHJv
dG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmpl
Y3RGb3JSZWNvcmRpbmcoKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50QWN0aW9ucyk7CiAgICAg
QVNTRVJUKCFtX2xhc3RSZWNvcmRlZEFjdGlvbik7CkBAIC01ODEsMjYgKzU4MiwyNiBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc+IEluc3BlY3RvckNhbnZh
czo6cmVsZWFzZU9iamVjdEZvcgogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBw
b3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZSB0eXBlOworICAgIFByb3RvY29sOjpSZWNvcmRpbmc6
OlR5cGUgdHlwZTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250ZXh0
KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6
Q2FudmFzMkQ7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXMyRDsKICAgICBlbHNlIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRl
eHQpKQotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBl
OjpDYW52YXNCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRp
bmc6OlR5cGU6OkNhbnZhc0JpdG1hcFJlbmRlcmVyOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBl
bHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICB0eXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKKyAg
ICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOwogI2VuZGlmCiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpS
ZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOwogICAgIH0KIAotICAgIGF1dG8gcmVjb3JkaW5nID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0ZSgpCi0gICAg
ICAgIC5zZXRWZXJzaW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
KyAgICBhdXRvIHJlY29yZGluZyA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZzo6Y3Jl
YXRlKCkKKyAgICAgICAgLnNldFZlcnNpb24oUHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
ICAgICAgICAgLnNldFR5cGUodHlwZSkKICAgICAgICAgLnNldEluaXRpYWxTdGF0ZShtX2luaXRp
YWxTdGF0ZS5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAuc2V0RGF0YShtX3NlcmlhbGl6ZWRE
dXBsaWNhdGVEYXRhLnJlbGVhc2VOb25OdWxsKCkpCkBAIC02MTQsNyArNjE1LDcgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6
OnJlbGVhc2VPYmplY3RGb3IKICAgICByZXR1cm4gcmVjb3JkaW5nOwogfQogCi1TdHJpbmcgSW5z
cGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKK1N0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnRBc0RhdGFV
UkwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBhdXRvKiBub2Rl
ID0gY2FudmFzRWxlbWVudCgpOwogICAgIGlmICghbm9kZSkgewpAQCAtNjUxLDcgKzY1Miw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzOjphcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCkKICAg
ICBpZiAobV9jb250ZW50Q2hhbmdlZCkgewogICAgICAgICBtX2J1ZmZlclVzZWQgLT0gbV9sYXN0
UmVjb3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25v
cmVkOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgbV9s
YXN0UmVjb3JkZWRBY3Rpb24tPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGdldENhbnZhc0NvbnRlbnRB
c0RhdGFVUkwoaWdub3JlZCkpKTsKIAogICAgICAgICBtX2J1ZmZlclVzZWQgKz0gbV9sYXN0UmVj
b3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKQEAgLTc3NSw3ICs3NzYsNyBAQCBpbnQgSW5zcGVj
dG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0YSkKIAogICAg
IGlmIChpdGVtKSB7CiAgICAgICAgIG1fYnVmZmVyVXNlZCArPSBpdGVtLT5tZW1vcnlDb3N0KCk7
Ci0gICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oV1RGTW92ZShpdGVt
KSk7CisgICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oaXRlbS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmFwcGVuZChk
YXRhKTsKICAgICAgICAgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLnNpemUoKSAtIDE7
CkBAIC04MTAsMTMgKzgxMSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBidWlsZEFycmF5Rm9yVmVjdG9yKAogICAgIHJldHVy
biBhcnJheTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlh
bFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0YXRlKCkKK1JlZjxQcm90b2Nv
bDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFs
U3RhdGUoKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAgQVNT
RVJUKGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUx
PiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdl
YkdQVURldmljZQogCi0gICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAg
ICBhdXRvIGluaXRpYWxTdGF0ZVBheWxvYWQgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFs
U3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gYXR0cmlidXRlc1BheWxvYWQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRJbnRl
Z2VyKCJ3aWR0aCJfcywgY29udGV4dC0+Y2FudmFzQmFzZSgpLndpZHRoKCkpOwpAQCAtOTA4LDcg
KzkwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0
ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTCiAgICAgaWYgKHBhcmFtZXRlcnNQYXls
b2FkLT5sZW5ndGgoKSkKICAgICAgICAgaW5pdGlhbFN0YXRlUGF5bG9hZC0+c2V0UGFyYW1ldGVy
cyhXVEZNb3ZlKHBhcmFtZXRlcnNQYXlsb2FkKSk7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIGluaXRpYWxTdGF0ZVBh
eWxvYWQtPnNldENvbnRlbnQoZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChpZ25vcmVkKSk7CiAK
ICAgICByZXR1cm4gaW5pdGlhbFN0YXRlUGF5bG9hZDsKQEAgLTk0Niw3ICs5NDcsNyBAQCBSZWY8
SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24o
Y29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVl
LmQudmFsdWVPcigxKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZS52
YWx1ZU9yKDApKTsKICAgICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5mLnZhbHVl
T3IoMCkpOwotICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihhcnJheS5wdHIoKSwgUmVjb3Jk
aW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOworICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRl
cihXVEZNb3ZlKGFycmF5KSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOwogICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgRWxlbWVudCogdmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKQEAgLTExMDYsMTYgKzExMDcsMTYgQEAgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICBhdXRvIGRlZHVwbGljYXRlZCA9IHZh
bHVlLm1hcChbJl0gKGNvbnN0IFN0cmluZyYgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXhGb3JEYXRhKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKGRlZHVwbGljYXRlZCkucHRy
KCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6U3RyaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRQ
YXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OlN0cmluZyk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rv
cih2YWx1ZSkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9LAorICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVp
bGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9
LAogICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIGF1dG8gbWFwcGVkID0gdmFsdWUubWFwKFsmXSAodWludDMyX3QgaXRlbSkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihpdGVtKTsK
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRB
cnJheUZvclZlY3RvcihtYXBwZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5
KTsKKyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihtYXBw
ZWQpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsKICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVy
KGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6
OkFycmF5KTsgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGludDMyX3Q+JiB2YWx1
ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3
aXp6bGVUeXBlczo6QXJyYXkpOyB9LAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIFsm
XSAoY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6RmxvYXQzMkxpc3Q6OlZhcmlhbnRU
eXBlJiB2YWx1ZSkgewogICAgICAgICAgICAgICAgIFdURjo6dmlzaXQocGFyc2VQYXJhbWV0ZXIs
IHZhbHVlKTsKQEAgLTExNTksNyArMTE2MCw3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZh
bHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiBS
ZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJh
eUZvckNhbnZhc0dyYWRpZW50KGNvbnN0IENhbnZhc0dyYWRpZW50JiBjYW52YXNHcmFkaWVudCkK
IHsKICAgICBBU0NJSUxpdGVyYWwgdHlwZSA9ICJsaW5lYXItZ3JhZGllbnQiX3M7Ci0gICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6QXJyYXlPZjxmbG9hdD46OmNyZWF0ZSgpOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8ZG91YmxlPjo6Y3JlYXRlKCk7CiAgICAgV1RGOjpz
d2l0Y2hPbihjYW52YXNHcmFkaWVudC5ncmFkaWVudCgpLmRhdGEoKSwKICAgICAgICAgWyZdIChj
b25zdCBHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5oCmluZGV4IDc4Y2I2YThhM2I4YWI3ODBlOTVmYjNmYWVkM2FiYzU5NGQx
NDY1OTguLmIyN2JjOGQ0OTIzOTExN2JlZTUyNWQ1ZmU2YWMyNmUyZDYxNmI1YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKQEAgLTU4LDggKzU4LDYgQEAg
Y2xhc3MgT2Zmc2NyZWVuQ2FudmFzOwogY2xhc3MgVHlwZWRPTUNTU0ltYWdlVmFsdWU7CiAjZW5k
aWYKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNhbnZh
cyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckNhbnZhcz4gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ2FudmFzPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpOwpAQCAtMTA3LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVy
ZUJhY2t0cmFjZSk7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVj
b3JkaW5nPiByZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCk7CiAKLSAgICBTdHJpbmcgZ2V0Q2Fu
dmFzQ29udGVudEFzRGF0YVVSTChFcnJvclN0cmluZyYpOworICAgIFN0cmluZyBnZXRDYW52YXND
b250ZW50QXNEYXRhVVJMKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJik7CiAKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCAyZTkwYzExOTQ4YTdlMGViNjEwNWE4M2UyYzA4Y2I0ZjgyYThmMmZlLi42MzBkZjcxNzkwYzYz
YjZlNzU4NzM0NTFhMTc0MGY4NmY2N2UwMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00NzgsMTAgKzQ3OCw4IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiB7CiAgICAgaWYgKG1f
cGF1c2VBZnRlckluaXRpYWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxp
emF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkgewotICAgICAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNl
KGlnbm9yZWQpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAg
ICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCmluZGV4IDUwZTBjODNiYzkyMDY2MmU3NjgwMjU1Nzc1MmIzNmYyMzc1
YjAzOWMuLmE2YmI4NzdhMjJhMGFhODZiZjg5OTgzOWE3NWY1YWZmNmVmOGRlMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBA
IC02MDcsNyArNjA3LDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9jbGllbnQgJiYgbV9jbGllbnQtPmRpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKGNv
bnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKQorc3RhdGljIE9wdGlvbmFsPERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
ewogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5OgpAQCAtNjE3LDI0ICs2MTcsMTYg
QEAgc3RhdGljIE9wdGlvbmFsPERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+
IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW46Ci0gICAgICAgIGJvb2wgYm9v
bFZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNCb29sZWFuKGJvb2xWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGJvb2xWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHZhbHVl
LT5hc0Jvb2xlYW4oKS52YWx1ZU9yKGZhbHNlKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpU
eXBlOjpEb3VibGU6Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgdmFsdWUt
PmFzRG91YmxlKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5n
Q2xpZW50OjpWYWx1ZVBheWxvYWQoZG91YmxlVmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNEb3VibGUoKS52YWx1ZU9y
KDApKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXI6Ci0gICAgICAgIGxv
bmcgbG9uZyBpbnRWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzSW50ZWdlcihpbnRWYWx1ZSk7Ci0g
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGludFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2YWx1ZS0+YXNJbnRlZ2VyKCkudmFsdWVPcigwKSkp
OwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nOgotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHN0cmluZ1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQodmFsdWUtPmFzU3RyaW5nKCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNjQ2LDE3ICs2MzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvZ0Rp
YWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgU3QKICAgICBpZiAo
IXN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWYWx1ZSkpCisgICAgYXV0byBwYXlsb2FkVmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHBheWxvYWRTdHJpbmcpOworICAgIGlmICghcGF5
bG9hZFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXlsb2FkT2JqZWN0OwotICAgIGlmICghcGF5bG9hZFZhbHVlLT5hc09iamVjdChwYXlsb2FkT2Jq
ZWN0KSkKKyAgICBhdXRvIHBheWxvYWRPYmplY3QgPSBwYXlsb2FkVmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCFwYXlsb2FkT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5IGRpY3Rpb25hcnk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiAqcGF5bG9hZE9iamVjdCkgewotICAgICAgICBpZiAo
YXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKHZhbHVlKSkKKyAg
ICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICpwYXlsb2FkT2JqZWN0KSB7CisgICAgICAgIGlm
IChhdXRvIHZhbHVlUGF5bG9hZCA9IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUoV1RGTW92ZSh2
YWx1ZSkpKQogICAgICAgICAgICAgZGljdGlvbmFyeS5zZXQoa2V5LCBXVEZNb3ZlKHZhbHVlUGF5
bG9hZC52YWx1ZSgpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggYWUwZmVmNWRmZTM5YjlhNTE2ZTU1MTAzMDdl
YWJjYjY2MGQxYWJjYi4uOTc2NjllZmI2ODdkMzM1NTRkNTJiYzY4ZTE4YzY4NDFhZWI0Y2Y0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVDb21t
ZW50KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiAgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFw
cGVuZChDU1NQcm9wZXJ0eVNvdXJjZURhdGEocHJvcGVydHlEYXRhLm5hbWUsIHByb3BlcnR5RGF0
YS52YWx1ZSwgZmFsc2UsIHRydWUsIHRydWUsIFNvdXJjZVJhbmdlKHN0YXJ0T2Zmc2V0IC0gdG9w
UnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kT2Zmc2V0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCkp
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJh
bmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSwgY29u
c3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzLCBpbnQqIGVuZGluZ0xpbmUgPSBudWxscHRy
KQorc3RhdGljIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+
JiBsaW5lRW5kaW5ncywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikKIHsKICAgICBpZiAobGlu
ZUVuZGluZ3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5MSw3ICsz
OTEsNyBAQCBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFu
Z2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoY29ucwogICAgIGlmIChlbmRpbmdMaW5lKQogICAg
ICAgICAqZW5kaW5nTGluZSA9IGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CiAKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRT
dGFydExpbmUoc3RhcnQubV9saW5lLnplcm9CYXNlZEludCgpKQogICAgICAgICAuc2V0U3RhcnRD
b2x1bW4oc3RhcnQubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpCiAgICAgICAgIC5zZXRFbmRMaW5l
KGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCkpCkBAIC00MjgsMzQgKzQyOCwzNCBAQCBzdGF0aWMg
UmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBy
dWxlKQorc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPj4g
YnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBydWxlKQogewotICAgIGF1dG8gZ3JvdXBp
bmdzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91
cGluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZ3JvdXBpbmdzUGF5bG9hZCA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKIAogICAgIGF1dG8qIHBhcmVu
dFJ1bGUgPSAmcnVsZTsKICAgICB3aGlsZSAocGFyZW50UnVsZSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9hZDsK
KyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPiBydWxlR3JvdXBpbmdQYXls
b2FkOwogCiAgICAgICAgIGlmIChpczxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpKSB7CiAgICAg
ICAgICAgICBhdXRvKiBtZWRpYSA9IGRvd25jYXN0PENTU01lZGlhUnVsZT4ocGFyZW50UnVsZSkt
Pm1lZGlhKCk7CiAgICAgICAgICAgICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1l
ZGlhLT5tZWRpYVRleHQoKSAhPSAiYWxsIikgewotICAgICAgICAgICAgICAgIHJ1bGVHcm91cGlu
Z1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQor
ICAgICAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91
cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlh
VGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5z
ZXRUeXBlKFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCiAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1l
ZGlhID0gZG93bmNhc3Q8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSktPm1lZGlhKCk7CiAgICAg
ICAgICAgICBpZiAobWVkaWEubGVuZ3RoKCkgJiYgbWVkaWEubWVkaWFUZXh0KCkgIT0gImFsbCIp
IHsKLSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBp
bmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLm1lZGlhVGV4dCgpKQotICAgICAgICAgICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRp
YUltcG9ydFJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpDU1M6
Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUltcG9ydFJ1bGUpCiAgICAgICAgICAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3VwcG9y
dHNSdWxlPihwYXJlbnRSdWxlKSkgewotICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAg
ICBydWxlR3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldFRleHQoZG93bmNhc3Q8Q1NTU3VwcG9ydHNSdWxlPihwYXJl
bnRSdWxlKS0+Y29uZGl0aW9uVGV4dCgpKQotICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRzUnVsZSkKKyAgICAg
ICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6U3VwcG9y
dHNSdWxlKQogICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIH0KIApAQCAtNDcw
LDcgKzQ3MCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgICAgICAgICAgICAg
IHJ1bGVHcm91cGluZ1BheWxvYWQtPnNldFNvdXJjZVVSTChzb3VyY2VVUkwpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBncm91cGluZ3NQYXlsb2FkLT5hZGRJdGVtKFdURk1vdmUocnVs
ZUdyb3VwaW5nUGF5bG9hZCkpOworICAgICAgICAgICAgZ3JvdXBpbmdzUGF5bG9hZC0+YWRkSXRl
bShydWxlR3JvdXBpbmdQYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKSkgewpAQCAtNDgyLDkgKzQ4Miw5IEBA
IHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3Vw
aW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgIHdoaWxlIChzdHlsZVNoZWV0KSB7CiAg
ICAgICAgICAgICBhdXRvKiBtZWRpYSA9IHN0eWxlU2hlZXQtPm1lZGlhKCk7CiAgICAgICAgICAg
ICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1lZGlhLT5tZWRpYVRleHQoKSAhPSAi
YWxsIikgewotICAgICAgICAgICAgICAgIGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAgICAg
IGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlhVGV4dCgpKQot
ICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShpczxIVE1MU3R5bGVFbGVtZW50PihzdHlsZVNo
ZWV0LT5vd25lck5vZGUoKSkgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpU
eXBlOjpNZWRpYVN0eWxlTm9kZTogSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoaXM8SFRN
TFN0eWxlRWxlbWVudD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gUHJvdG9jb2w6OkNTUzo6
R3JvdXBpbmc6OlR5cGU6Ok1lZGlhU3R5bGVOb2RlOiBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VVUkw7CkBAIC01MjMsMjggKzUyMywzMCBAQCBJ
bnNwZWN0b3JTdHlsZTo6SW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxl
SWQsIFJlZjxDU1NTdHlsZURlY2xhcgogCiBJbnNwZWN0b3JTdHlsZTo6fkluc3BlY3RvclN0eWxl
KCkgPSBkZWZhdWx0OwogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAorUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgp
IGNvbnN0CiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJl
c3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKLSAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3R5bGVJZChtX3N0eWxlSWQuYXNQcm90b2NvbFZhbHVl
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVJZD4oKSk7CisgICAgUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7CisgICAg
aWYgKGF1dG8gc3R5bGVJZCA9IG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVJZD4oKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKHN0eWxlSWQucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXN1bHQtPnNldFdpZHRoKG1fc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoIndpZHRoIikpOwogICAgIHJlc3VsdC0+c2V0SGVpZ2h0KG1fc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IGV4dHJhY3RTb3VyY2VEYXRhKCk7Ci0gICAgaWYgKHNvdXJjZURhdGEpCi0g
ICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRh
LT5ydWxlQm9keVJhbmdlLCBtX3BhcmVudFN0eWxlU2hlZXQtPmxpbmVFbmRpbmdzKCkpKTsKKyAg
ICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNl
UmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHlsZVNoZWV0
LT5saW5lRW5kaW5ncygpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UocmFuZ2UucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25z
dAorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QK
IHsKLSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IGNvbGxlY3RQcm9wZXJ0aWVz
KHRydWUpKSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlF
bnRyeSA9IHByb3BlcnR5LnNvdXJjZURhdGE7Ci0gICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKKyAg
ICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKHByb3BlcnR5RW50cnkubmFtZSkKICAg
ICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJl
bGVhc2UoKTsKQEAgLTYyMywxMyArNjI1LDEzIEBAIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5PiBJbnNwZWN0b3JTdHlsZTo6Y29sbGVjdFByb3BlcnRpZXMoYm9vbCBpbmNsdWRlQWxsCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKK1JlZjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIGF1dG8gcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKGZh
bHNlKTsKIAotICAgIGF1dG8gcHJvcGVydGllc09iamVjdCA9IEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOwotICAgIGF1dG8gc2hv
cnRoYW5kRW50cmllcyA9IEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eTsKKyAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBzaG9ydGhhbmRF
bnRyaWVzID0gQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgp
OworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+
PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CiAgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKICAgICBTdHJpbmcgcHJldmlvdXNQcmlvcml0eTsKICAgICBT
dHJpbmcgcHJldmlvdXNTdGF0dXM7CkBAIC02NDEsOSArNjQzLDkgQEAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY28KICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVu
dHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3Bl
cnR5RW50cnkubmFtZTsKIAotICAgICAgICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkRpc2FibGVkIDogSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlOworICAgICAg
ICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
U3RhdHVzOjpEaXNhYmxlZCA6IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3Rp
dmU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKG5hbWUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSkKICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVu
dHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTY2OSw3ICs2NzEsOCBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgU291cmNlUmFuZ2UgYWJzb2x1dGVQ
cm9wZXJ0eVJhbmdlID0gcHJvcGVydHlFbnRyeS5yYW5nZTsKICAgICAgICAgICAgIGFic29sdXRl
UHJvcGVydHlSYW5nZS5zdGFydCArPSBydWxlQm9keVJhbmdlU3RhcnQ7CiAgICAgICAgICAgICBh
YnNvbHV0ZVByb3BlcnR5UmFuZ2UuZW5kICs9IHJ1bGVCb2R5UmFuZ2VTdGFydDsKLSAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGFic29sdXRlUHJv
cGVydHlSYW5nZSwgbGluZUVuZGluZ3MpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0g
YnVpbGRTb3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdz
KSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgewpAQCAtNjgz
LDMwICs2ODYsMzUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IElu
c3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KIAogICAgICAgICAgICAgICAg
IC8vIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyB0byB0cmVhdCBub24tcHJlZml4ZWQgYW5k
IHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lcyB0aGUgc2FtZSAob3BhY2l0eSB2cy4gLXdl
YmtpdC1vcGFjaXR5KS4KICAgICAgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsUHJvcGVydHlO
YW1lID0gcHJvcGVydHlJZCA/IGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlkKSA6IG5h
bWU7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0Fj
dGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3NQcmlvcml0eSA9IGFjdGl2ZUl0
LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6
OlByaW9yaXR5LCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2Vzc1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1cywgcHJldmlvdXNTdGF0dXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NTdGF0dXMgJiYgcHJldmlvdXNTdGF0dXMg
IT0gImluYWN0aXZlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0
ID09ICJub3QgaW1wb3J0YW50Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6
OkFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmFjdGl2YXRl
IGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhlIHNhbWUtbmFtZWQgaW1wb3J0
YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbmV3UHJpb3JpdHkgPSBhY3RpdmVJdC0+dmFsdWUt
PmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cHJpb3JpdHlLZXkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbmV3UHJpb3JpdHkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNQcmlvcml0eSA9IG5ld1ByaW9yaXR5OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG5ld1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5n
KFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpzdGF0dXNLZXkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbmV3U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNTdGF0dXMgPSBuZXdTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpb3VzU3RhdHVzICE9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8
fCAhIW5ld1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJv
cGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJldmlvdXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgcHJldmlvdXNQYXJzZWRPayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNQYXJzZWRPayA9IGFjdGl2ZUl0LT52YWx1
ZS0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cGFyc2VkT2tLZXkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyc2VkT2sgJiYgIXByZXZpb3Vz
UGFyc2VkT2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNl
dChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1
ZS0+c2V0U3RhdHVzKFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC03MTQsMTMgKzcyMiwxMyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgImltcGxp
Y2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBz
dGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHls
ZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6U3R5bGU7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gbV9zdHls
ZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzaG9y
dGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTaG9ydGhh
bmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OlNo
b3J0aGFuZEVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRO
YW1lKHNob3J0aGFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoc2hv
cnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwpAQCAtNzMxLDExICs3MzksMTEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERlZmF1bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAg
ICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eVN0YXR1czo6U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1
cyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhXVEZNb3ZlKHByb3BlcnRpZXNPYmplY3QpKQog
ICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhXVEZNb3ZlKHNob3J0aGFuZEVudHJpZXMpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtODA1LDcgKzgxMyw3IEBAIFZlY3RvcjxTdHJpbmc+IElu
c3BlY3RvclN0eWxlOjpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0CiAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQs
IFdURk1vdmUocGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikp
OwogfQpAQCAtODE3LDcgKzgyNSw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8
Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVl
dChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlz
dGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAg
ICwgbV9wYWdlU3R5bGVTaGVldChXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSkKQEAgLTk0Nyw3ICs5
NTUsNyBAQCBFeGNlcHRpb25PcjxDU1NTdHlsZVJ1bGUqPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojph
ZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4
dC50b1N0cmluZygpKTsKIAogICAgIC8vIEluc3BlY3RvciBTdHlsZSBTaGVldHMgYXJlIGFsd2F5
cyB0cmVhdGVkIGFzIHRob3VnaCB0aGVpciBwYXJzZWQgZGF0YSBpcyByZWFkeS4KLSAgICBpZiAo
bV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3IpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46Okluc3BlY3RvcikKICAgICAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXBhcnNlU3R5bGVTaGVldChzdHlsZVNoZWV0VGV4dC50b1N0cmluZygp
KTsKQEAgLTEwMDcsNyArMTAxNSw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKICAgICByZXR1cm4g
aWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IG51bGxwdHIgOiBtX2ZsYXRSdWxl
cy5hdChpZC5vcmRpbmFsKCkpLmdldCgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKIHsKICAg
ICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAo
IXN0eWxlU2hlZXQpCkBAIC0xMDE1LDcgKzEwMjMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YgogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
c3R5bGVTaGVldCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hl
ZXRJZChpZCgpKQogICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1
bGVMaXN0LmdldCgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTEwMjcsNyArMTAzNSw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAzNSw3ICsx
MDQzLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhl
YWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQorICAgIHJldHVy
biBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAg
ICAgIC5zZXREaXNhYmxlZChzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKQpAQCAtMTA0OCw5ICsxMDU2
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IpCitzdGF0aWMgUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVj
dG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JU
ZXh0LCBjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiB7Ci0gICAgYXV0byBpbnNwZWN0b3JT
ZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgp
CisgICAgYXV0byBpbnNwZWN0b3JTZWxlY3RvciA9IFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
OjpjcmVhdGUoKQogICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKQEAgLTEwNjUsMTEgKzEwNzMsMTEgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGMK
ICAgICByZXR1cm4gaW5zcGVjdG9yU2VsZWN0b3I7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJv
bVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3RyaW5n
JiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQorc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3Jz
RnJvbVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3Ry
aW5nJiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uPiBj
b21tZW50KCIvXFwqW15dKj9cXCovIiwgSlNDOjpZYXJyOjpUZXh0Q2FzZVNlbnNpdGl2ZSwgSlND
OjpZYXJyOjpNdWx0aWxpbmVFbmFibGVkKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pjo6Y3JlYXRlKCk7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LmZpcnN0KCk7CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHNvdXJjZURhdGEtPnNlbGVjdG9y
UmFuZ2VzKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzZWxlY3RvciwgdGhhdCBt
ZWFucyB0aGUgU291cmNlRGF0YSBmb3IgdGhpcyBDU1NTdHlsZVNoZWV0CkBAIC0xMDg5LDE3ICsx
MDk3LDE3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJvbVNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQorUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsK
ICAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0
b3JUZXh0KCksICpzZWxlY3Rvcik7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlLCBpbnQmIGVuZGluZ0xpbmUpCitSZWY8UHJvdG9jb2w6
OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqIHJ1bGUsIGludCYgZW5kaW5nTGluZSkKIHsKICAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IoJnJ1
bGUtPnN0eWxlKCkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CiAKICAgICAvLyBUaGlz
IGludGVudGlvbmFsbHkgZG9lcyBub3QgcmVseSBvbiB0aGUgc291cmNlIGRhdGEgdG8gYXZvaWQg
Y2F0Y2hpbmcgdGhlIHRyYWlsaW5nIGNvbW1lbnRzIChiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIHN0
YXJ0aW5nICd7JykuCiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCA9IHJ1bGUtPnNlbGVjdG9yVGV4
dCgpOwpAQCAtMTEwNyw0MSArMTExNSw0MiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnNGcm9tU291cmNl
KHNvdXJjZURhdGEuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCBydWxlLT5zdHls
ZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNlbGVjdG9ycyA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNy
ZWF0ZSgpOworICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JMaXN0ID0gcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAg
ICAgICAgICAgICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxl
Y3RvcikpOwogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQotICAgICAgICAuc2V0U2VsZWN0b3JzKFdURk1vdmUo
c2VsZWN0b3JzKSkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlz
dDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFNlbGVjdG9ycyhzZWxlY3RvcnMucmVsZWFzZU5vbk51
bGwoKSkKICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291
cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygp
LCAmZW5kaW5nTGluZSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFu
Z2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQ
dHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaW50IGVuZGluZ0xpbmUgPSAwOwotICAgIGF1dG8gcmVz
dWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFNlbGVjdG9yTGlzdChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlLCBlbmRpbmdMaW5l
KSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUoZW5kaW5nTGluZSkKICAgICAgICAgLnNldE9yaWdp
bihtX29yaWdpbikKICAgICAgICAgLnNldFN0eWxlKGJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnJ1bGUt
PnN0eWxlKCkpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgaWYgKG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yIHx8IG1fb3Jp
Z2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikK
KyAgICBpZiAobV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0
aG9yIHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIp
CiAgICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJMKCkpOwogCiAgICAgaWYgKGNh
bkJpbmQoKSkgewotICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZChydWxlSWQocnVsZSkpOwotICAg
ICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlk
LmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSk7
CisgICAgICAgIGlmIChhdXRvIHJ1bGVJZCA9IHRoaXMtPnJ1bGVJZChydWxlKS5hc1Byb3RvY29s
VmFsdWU8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRSdWxlSWQocnVsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIGF1dG8gZ3Jv
dXBpbmdzUGF5bG9hZCA9IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoKnJ1bGUpOwpAQCAtMTE1MSw3
ICsxMTYwLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERh
dGFSZWFkeSgpKQpAQCAtMTE1OSwxMyArMTE2OCwxNSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JT
dAogCiAgICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAgICBp
ZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCi0g
ICAgICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldENzc1Byb3BlcnRp
ZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQorICAgICAg
ICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CisKICAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVG
b3JJZChpZCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiAKICAg
ICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQgd2l0aG91dCBzdHlsZXNoZWV0LCBz
byBzZXQgY3NzVGV4dCBoZXJlLgogICAgIGlmIChzb3VyY2VEYXRhKSB7CkBAIC0xMjc0LDcgKzEy
ODUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRNdXRhdGVkKCkgY29u
c3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQog
ewotICAgIGJvb2wgYWxsb3dQYXJzZWREYXRhID0gbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRh
dGVkKCk7CisgICAgYm9vbCBhbGxvd1BhcnNlZERhdGEgPSBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRhdGVkKCk7
CiAgICAgcmV0dXJuIGFsbG93UGFyc2VkRGF0YSAmJiBlbnN1cmVUZXh0KCkgJiYgZW5zdXJlU291
cmNlRGF0YSgpOwogfQogCkBAIC0xMzcxLDcgKzEzODIsNyBAQCBJbnNwZWN0b3JDU1NJZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdAogCiBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6Om9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8IG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQorICAg
IGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5saW5lU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0
KHJlc3VsdCkgfHwgZXh0ZW5zaW9uU3R5bGVTaGVldFRleHQocmVzdWx0KTsKIH0KQEAgLTE0MTQs
OSArMTQyNSw5IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZXh0ZW5zaW9uU3R5bGVTaGVl
dFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3Qp
CitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0xNDI0LDggKzE0MzUsMTAgQEAgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGQKICAgICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7CiAgICAgY29sbGVjdEZs
YXRSdWxlcyhXVEZNb3ZlKHJlZlJ1bGVMaXN0KSwgJnJ1bGVzKTsKIAotICAgIGZvciAoYXV0byYg
cnVsZSA6IHJ1bGVzKQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxl
KHJ1bGUuZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBp
ZiAoYXV0byBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHJ1bGVPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NDgsMTIgKzE0NjEsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlz
dD4mJiBydWxlTGlzdCwgQ1NTU3QKICAgICB9CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5
bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVm
PFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgV1RGTW92
ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1l
bnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVs
ZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxw
dHIsIG9yaWdpbiwgU3RyaW5nKCksIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KFdURk1vdmUo
ZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA3M2QzNjE4ZTVhNDhh
Mzc0NTc2MjZkZDU0OGRjZTdlMzZiMWRlMTM1Li43OGYxNGQyOTE2YmFhNWMzN2UwMTA5MzkyZjIx
ZWY2NmE2NTVmNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmgKQEAgLTQ1LDE4ICs0NSwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNTU0lkIHsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDU1NJZCgpID0gZGVmYXVsdDsKIAogICAgIGV4cGxpY2l0IEluc3BlY3RvckNT
U0lkKGNvbnN0IEpTT046Ok9iamVjdCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LmdldFN0cmluZygic3R5bGVTaGVldElkIl9zLCBtX3N0eWxlU2hlZXRJZCkpCisgICAgICAgIG1f
c3R5bGVTaGVldElkID0gdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiX3MpOworICAgICAg
ICBpZiAoIW1fc3R5bGVTaGVldElkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghdmFsdWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcywgbV9vcmRpbmFsKSkKKyAgICAgICAgaWYg
KGF1dG8gb3JkaW5hbCA9IHZhbHVlLmdldEludGVnZXIoIm9yZGluYWwiX3MpKQorICAgICAgICAg
ICAgbV9vcmRpbmFsID0gKm9yZGluYWw7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc3R5
bGVTaGVldElkID0gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xMjYsNyArMTI3LDcgQEAgcHVibGlj
OgogICAgIH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgY3Nz
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25z
dDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1
dGVkU3R5bGUoKSBjb25zdDsKIAogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gdGV4dCgpIGNvbnN0
OwpAQCAtMTc1LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUq
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlVGV4dChjb25zdCBJbnNw
ZWN0b3JDU1NJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0KTsKIAogICAg
IHZpcnR1YWwgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDM2M2Qx
NjhlODA1ZWEzZjg3ZDdiYzlkODI5ZDQ2ZGU2Y2JmNTJhYWUuLmEwNzAzMzZiNzU2MWRhODVlY2I1
ZmZmNGMxNGI2MWJmZjM5NjIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCkBAIC0xNjEsOSArMTYxLDkgQEAgUmVmPEpTT046
Ok9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCkKK3ZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290
KEpTT046Ok9iamVjdCYgZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIGRhdGEt
PnNldEFycmF5KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKKyAgICBkYXRhLnNldEFycmF5
KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
CmluZGV4IDQ4ZjQzMGU5YmVkOTNkMWFmZDJiYTM2ZTU5NTdlN2VmMDYxOGIzYWEuLmNhNWRiNDEw
ODk4ZGI5M2NkMGEzNWMyNjI3OTA5YzFkNDllMWMyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVPYnNlcnZlckNhbGxiYWNr
RGF0YShjb25zdCBTdHJpbmcmIGNhbGxiYWNrVHlwZSk7CiAgICAgc3RhdGljIFJlZjxKU09OOjpP
YmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9iamVjdCYgZGF0YSwg
Y29uc3QgRmxvYXRRdWFkJik7CiAKIHByaXZhdGU6CiAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFuaW1hdGlvbkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCmluZGV4IDcxMzI1ZjUyMmQzYTEyM2E1MzRmYzdm
ZjNhNTg0YjU4YmM5NGY5MzYuLjAyNTcxMmIwOTQ2NGVjNmIxNTQ3ZWNmNzA2NmUyMGJkZmFiZjQx
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCkBAIC03Miw0NSArNzIsNDUgQEAgc3RhdGljIE9w
dGlvbmFsPGRvdWJsZT4gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoY29uc3QgU2Vjb25kcyYgc2Vj
b25kcykKICAgICByZXR1cm4gc2Vjb25kcy5taWxsaXNlY29uZHMoKTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+
IHByb3RvY29sVmFsdWVGb3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5
YmFja0RpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBsYXliYWNrRGlyZWN0aW9uKFBsYXliYWNr
RGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQogewogICAgIHN3aXRjaCAocGxheWJhY2tEaXJl
Y3Rpb24pIHsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpO
b3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6Tm9ybWFsOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0
aW9uOjpSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJh
Y2tEaXJlY3Rpb246OlJldmVyc2U7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJu
YXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKICAgICBjYXNlIFBsYXliYWNrRGly
ZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGVSZXZlcnNlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUoRmlsbE1v
ZGUgZmlsbE1vZGUpCitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1v
ZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKIHsKICAgICBz
d2l0Y2ggKGZpbGxNb2RlKSB7CiAgICAgY2FzZSBGaWxsTW9kZTo6Tm9uZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6Ok5vbmU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKICAgICBjYXNl
IEZpbGxNb2RlOjpGb3J3YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOwogICAgIGNhc2UgRmlsbE1vZGU6OkJhY2t3
YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU6OkJhY2t3YXJkczsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZp
bGxNb2RlOjpCYWNrd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6Qm90aDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJvdGg7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKICAgICBjYXNl
IEZpbGxNb2RlOjpBdXRvOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRp
b246OkZpbGxNb2RlOjpBdXRvOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQorc3RhdGljIFJlZjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQogewotICAgIGF1dG8ga2V5
ZnJhbWVzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOworICAgIGF1dG8ga2V5ZnJhbWVzUGF5bG9hZCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKIAog
ICAgIGNvbnN0IGF1dG8mIGJsZW5kaW5nS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QuYmxlbmRp
bmdLZXlmcmFtZXMoKTsKICAgICBjb25zdCBhdXRvJiBwYXJzZWRLZXlmcmFtZXMgPSBrZXlmcmFt
ZUVmZmVjdC5wYXJzZWRLZXlmcmFtZXMoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+
IGJ1aWxkT2JqZWN0RgogICAgICAgICAgICAgQVNTRVJUKGJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUo
KSk7CiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9ICpibGVuZGluZ0tleWZyYW1lLnN0eWxlKCk7
CiAKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8ga2V5ZnJh
bWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgLnNldE9mZnNldChibGVuZGluZ0tleWZyYW1lLmtleSgpKQogICAgICAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0RgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBwYXJzZWRLZXlmcmFtZSA6IHBhcnNlZEtleWZyYW1lcykgewotICAgICAgICAgICAgYXV0byBr
ZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2NvbDo6
QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zmc2V0
KHBhcnNlZEtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0KQogICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKQEAgLTE4Niw5ICsxODYsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0RgogICAgIHJl
dHVybiBrZXlmcmFtZXNQYXlsb2FkOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWlsZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZl
Y3QmIGVmZmVjdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWls
ZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBhdXRvIGVm
ZmVjdFBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGVmZmVjdFBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoYXV0byBzdGFydERl
bGF5ID0gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoZWZmZWN0LmRlbGF5KCkpKQpAQCAtMjM4LDIw
ICsyMzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2UKIAogdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3BUcmFja2luZyhpZ25vcmVk
KTsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIHN0b3BUcmFja2luZygpOworICAgIGRpc2Fi
bGUoKTsKIAogICAgIEFTU0VSVChtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcyk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNp
c3RlbnRBbmltYXRpb25BZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRp
b25BZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoKQogewotICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1hdGlvbkFnZW50KCkgPT0gdGhp
cykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudCh0aGlzKTsK
IApAQCAtMjcwLDQ5ICsyNjcsNTEgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICAgICAgICAgICAgICBiaW5kQW5pbWF0
aW9uKCphbmltYXRpb24sIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQW5p
bWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCog
bm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0
QW5pbWF0aW9uKGVycm9yU3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvKiBlZmZlY3QgPSBhbmlt
YXRpb24tPmVmZmVjdCgpOwotICAgIGlmICghaXM8S2V5ZnJhbWVFZmZlY3Q+KGVmZmVjdCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBk
b2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBl
ZmZlY3QiX3MpOwogCiAgICAgYXV0byYga2V5ZnJhbWVFZmZlY3QgPSBkb3duY2FzdDxLZXlmcmFt
ZUVmZmVjdD4oKmVmZmVjdCk7CiAKICAgICBhdXRvKiB0YXJnZXQgPSBrZXlmcmFtZUVmZmVjdC50
YXJnZXRFbGVtZW50T3JQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFy
Z2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4g
YW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfcyk7CiAKLSAgICAqbm9kZUlkID0g
ZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7Cisg
ICAgcmV0dXJuIGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCB0
YXJnZXQpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0
aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OnJlc29sdmVBbmltYXRpb24oY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
SWQmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFz
c2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0
aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBzdGF0ZSA9IGFuaW1hdGlvbi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMzI4LDM4ICsz
MjcsNDIgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFMKIAogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiB1bmtub3duIEFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5rbm93biBBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZh
bHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBB
bmltYXRpb24iKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RhcnRUcmFja2luZygpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKICAgICBBU1NFUlQobV90
cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmlzRW1wdHkoKSk7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3
YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6
c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5n
QW5pbWF0aW9uQWdlbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdBbmltYXRpb25B
Z2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0YS5j
bGVhcigpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9l
bnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBzdGF0aWMgYm9vbCBpc0RlbGF5ZWQoQ29tcHV0ZWRF
ZmZlY3RUaW1pbmcmIGNvbXB1dGVkVGltaW5nKQpAQCAtMzgwLDMxICszODMsMzEgQEAgdm9pZCBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYg
dGFyZ2V0LCBLZXlmcmFtZUUKICAgICB9KTsKICAgICBhdXRvJiB0cmFja2luZ0RhdGEgPSBlbnN1
cmVSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU+IGFuaW1h
dGlvbkFuaW1hdGlvblN0YXRlOwogCiAgICAgaWYgKChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8
fCAhaXNEZWxheWVkKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcpKSAmJiBpc0RlbGF5
ZWQoY29tcHV0ZWRUaW1pbmcpKQotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRlbGF5ZWQ7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkRlbGF5ZWQ7CiAgICAgZWxzZSBpZiAoZW5zdXJlUmVzdWx0LmlzTmV3RW50
cnkgfHwgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBjb21wdXRlZFRp
bWluZy5waGFzZSkgewogICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAg
ICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkJlZm9yZToKLSAgICAgICAgICAgIGFu
aW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6UmVhZHk7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFkeTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFjdGl2ZToK
LSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
QWN0aXZlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBbmltYXRpb25FZmZl
Y3RQaGFzZTo6QWZ0ZXI6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7CisgICAg
ICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlOjpEb25lOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBB
bmltYXRpb25FZmZlY3RQaGFzZTo6SWRsZToKLSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlv
blN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29s
OjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0cmFja2luZ0RhdGEubGFzdENvbXB1dGVkVGlt
aW5nLmN1cnJlbnRJdGVyYXRpb24gIT0gY29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlvbikg
ewogICAgICAgICAvLyBJdGVyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieSBzZXF1ZW50aWFsICJh
Y3RpdmUiIHN0YXRlIGV2ZW50cy4KLSAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICB9CiAKICAgICB0cmFja2luZ0RhdGEubGFzdENvbXB1
dGVkVGltaW5nID0gY29tcHV0ZWRUaW1pbmc7CkBAIC00MTIsNyArNDE1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYgdGFy
Z2V0LCBLZXlmcmFtZUUKICAgICBpZiAoIWFuaW1hdGlvbkFuaW1hdGlvblN0YXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUcmFja2lu
Z0FuaW1hdGlvbklkKHRyYWNraW5nRGF0YS50cmFja2luZ0FuaW1hdGlvbklkKQogICAgICAgICAu
c2V0QW5pbWF0aW9uU3RhdGUoYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUudmFsdWUoKSkKICAgICAg
ICAgLnJlbGVhc2UoKTsKQEAgLTQ0MSw4ICs0NDQsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50OjpkaWRDaGFuZ2VXZWJBbmltYXRpb25OYW1lKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9u
KQogICAgIGlmIChhbmltYXRpb25JZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbmFtZSA9IGFuaW1hdGlvbi5pZCgpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5u
YW1lQ2hhbmdlZChhbmltYXRpb25JZCwgIW5hbWUuaXNFbXB0eSgpID8gJm5hbWUgOiBudWxscHRy
KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsIGFu
aW1hdGlvbi5pZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkU2V0
V2ViQW5pbWF0aW9uRWZmZWN0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQpAQCAtNTI1LDcgKzUy
Nyw3IEBAIFN0cmluZyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZmluZEFuaW1hdGlvbklkKFdl
YkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiB9CiAKLVdl
YkFuaW1hdGlvbiogSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCitXZWJBbmlt
YXRpb24qIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojphc3NlcnRBbmltYXRpb24oUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKIHsK
ICAgICBhdXRvKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbklkTWFwLmdldChhbmltYXRpb25JZCk7
CiAgICAgaWYgKCFhbmltYXRpb24pCkBAIC01MzgsNyArNTQwLDcgQEAgdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6YmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mIGFuaW1hdGlvbiwgYm9v
bCBjYXB0dXIKICAgICBhdXRvIGFuaW1hdGlvbklkID0gbWFrZVN0cmluZygiYW5pbWF0aW9uOiIg
KyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSk7CiAgICAgbV9hbmltYXRp
b25JZE1hcC5zZXQoYW5pbWF0aW9uSWQsICZhbmltYXRpb24pOwogCi0gICAgYXV0byBhbmltYXRp
b25QYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNy
ZWF0ZSgpCisgICAgYXV0byBhbmltYXRpb25QYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6
QW5pbWF0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0QW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTYwMyw5ICs2MDUsOSBAQCB2b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmdEZWNsYXJhdGl2ZUFuaW1hdGlvbihEZWNsYXJh
dGl2ZUFuaW1hdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXQtPnZhbHVlLmxhc3RDb21w
dXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWZ0ZXIgJiYgaXQtPnZh
bHVlLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6SWRs
ZSkgewotICAgICAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBldmVudCA9IFByb3RvY29s
OjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFRy
YWNraW5nQW5pbWF0aW9uSWQoaXQtPnZhbHVlLnRyYWNraW5nQW5pbWF0aW9uSWQpCi0gICAgICAg
ICAgICAuc2V0QW5pbWF0aW9uU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICAuc2V0QW5pbWF0aW9uU3RhdGUo
UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nVXBk
YXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCksIFdURk1vdmUoZXZlbnQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmgKaW5kZXggOGI1
MTE2MjhjOTdhMjIyYThmOWFjZDhkM2U1YjIwMmE4ZGJiNmJlYy4uMDY0YWM0MDYzYzMwOWZkYjQx
YzcxYmZjZjZjYmQ5ZWE2NGVkOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaApAQCAtNDQsMjYgKzQ0
LDI0IEBAIGNsYXNzIEtleWZyYW1lRWZmZWN0OwogY2xhc3MgUGFnZTsKIGNsYXNzIFdlYkFuaW1h
dGlvbjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckFu
aW1hdGlvbkFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6QW5pbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBbmltYXRpb25BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoUGFnZUFn
ZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpIG92ZXJyaWRlOwor
ICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBbmltYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEVmZmVjdFRhcmdl
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCogbm9kZUlkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
RWZmZWN0VGFyZ2V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlQW5pbWF0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50Jiwg
S2V5ZnJhbWVFZmZlY3QmLCBDb21wdXRlZEVmZmVjdFRpbWluZyk7CkBAIC03Nyw3ICs3NSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgZmluZEFuaW1hdGlvbklkKFdlYkFuaW1h
dGlvbiYpOwotICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CisgICAgV2ViQW5pbWF0aW9uKiBhc3NlcnRBbmlt
YXRpb24oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbklkKTsKICAgICB2b2lkIGJpbmRBbmltYXRpb24oV2ViQW5pbWF0aW9uJiwgYm9vbCBj
YXB0dXJlQmFja3RyYWNlKTsKICAgICB2b2lkIHVuYmluZEFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkKTsKICAgICB2b2lkIGFuaW1hdGlvbkRlc3Ryb3llZFRpbWVyRmlyZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5MTI5MjY0OGQ2ODJkOWMz
ODFlNTI0ZmQwOTcwMDhhNDdjMzY1MDRhLi5hZjY3Mzc4YTZkZGNkMWFlNzcyNDRlODk5NTM2Nzcz
YTcwMjdiMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC01Nywz
MSArNTcsMzAgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcioKIAogdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzKTsKIAogICAg
IC8vIFdlIG5lZWQgdG8gcGFzcyBpbml0aWFsIG5hdmlnYXRvci5vbk9ubGluZS4KICAgICBuZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVs
bHB0cik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCkBA
IC0xMDksMTYgKzEwOCwxMyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5ldHdvcmtT
dGF0ZVVwZGF0ZWQocGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmlzT25M
aW5lKCkpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1h
bmlmZXN0Pj4mIHJlc3VsdCkKK0V4cGVjdGVkPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+LCBQcm90b2NvbDo6RXJyb3JTdHJp
bmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0
cygpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CisgICAgaWYgKCFw
YWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAorICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKICAgICAg
ICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTEyNywxNiArMTIzLDE3IEBAIHZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3Ry
aW5nJiBlcnJvclN0CiAgICAgICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaG9zdC5hcHBs
aWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOwogICAgICAgICBpZiAoIW1hbmlm
ZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUo
KQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0RnJhbWVJ
ZChwYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAgICAgICAgIC5zZXRNYW5pZmVz
dFVSTChtYW5pZmVzdFVSTCkKICAgICAgICAgICAgICAgICAuc2V0U3RhdHVzKHN0YXRpY19jYXN0
PGludD4oaG9zdC5zdGF0dXMoKSkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRG9jdW1lbnRMb2FkZXIqIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitEb2N1
bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKQEAgLTE1MSwyOCArMTQ4LDMyIEBAIERvY3VtZW50
TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVyCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9j
dW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpCitFeHBl
Y3RlZDxTdHJpbmcsIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNz
ZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlm
ICghZG9jdW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICptYW5pZmVzdFVSTCA9IGRvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZl
c3Quc3RyaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiYgYXBwbGljYXRpb25DYWNoZSkKK0V4cGVjdGVkPFJlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb2N1bWVu
dExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBob3N0ID0g
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7Ci0gICAgYXBwbGljYXRpb25D
YWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShob3N0LnJlc291cmNlTGlzdCgp
LCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOworICAgIHJldHVybiBidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNh
Y2hlSW5mbygpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVp
bGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCitSZWY8
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25D
YWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBw
bGljYXRpb25DYWNoZUluZm8pCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNoZUluZm8ubWFuaWZlc3Quc3RyaW5n
KCkpCiAgICAgICAgIC5zZXRTaXplKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLnNpemUpCiAgICAgICAg
IC5zZXRDcmVhdGlvblRpbWUoYXBwbGljYXRpb25DYWNoZUluZm8uY3JlYXRpb25UaW1lKQpAQCAt
MTgxLDE1ICsxODIsMTUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW8KICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25z
dCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBWZWN0
b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZXMpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgZm9y
IChhdXRvJiBpbmZvIDogYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKICAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGluZm8pKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKK1JlZjxQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291
cmNlSW5mbykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0yMDgsNyArMjA5LDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXAKICAgICBpZiAocmVzb3VyY2VJbmZvLmlzRXhwbGlj
aXQpCiAgICAgICAgIHR5cGVzLmFwcGVuZExpdGVyYWwoIkV4cGxpY2l0ICIpOwogCi0gICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNvdXJjZUluZm8ucmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTaXplKHN0YXRpY19j
YXN0PGludD4ocmVzb3VyY2VJbmZvLnNpemUpKQogICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0
cmluZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKaW5kZXggNTE5ODhmNjE3ZGUx
MWVmMTE3MDhhN2IzOTJjZjBjZTE5NGI0ODZlYS4uODA3Njc5N2NhYjYwOWI5MjM2NzkzZTIyODFh
NTg5YzRjZDE0NjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zOSwy
NSArMzksMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdl
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9u
Q2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pj4+IGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0TWFuaWZlc3RGb3JGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4+IGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqKTsKQEAgLTY4LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
cyhjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJik7CiAKLSAgICBEb2N1bWVudExv
YWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQpOworICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRl
bmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQu
Y3BwCmluZGV4IGEwZTZmYzQ1MzE1MTZkOTg5MzIxMTViYjRiOWNhMmIyYzIzMDU2OTMuLjgyODEx
YmU1MWNmNDYzYzQxMTgwYmRlODA0NTgyMmQ0N2ZlMWU1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50LmNwcApAQCAtNTMsMTYgKzUzLDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFjCiAKIHZv
aWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0
b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICBzdG9wVHJhY2tpbmcoKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudChudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjph
ZGRPYnNlcnZlcih0aGlzLCBDUFUsIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRh
dGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBsZShkYXRhKTsKQEAgLTcxLDE4ICs3MCwyMiBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcm
KQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRy
YWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7
CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBz
ZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBSZWY8
UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPiBidWlsZFRocmVhZEluZm8oY29uc3Qg
VGhyZWFkQ1BVSW5mbyYgdGhyZWFkKQpAQCAtMTEzLDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYg
ZGF0YSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghZGF0YS5jcHVUaHJlYWRzLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJv
ZmlsZXI6OlRocmVhZEluZm8+PiB0aHJlYWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BV
UHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byB0aHJlYWRzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUo
KTsKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWRJbmZvIDogZGF0YS5jcHVUaHJlYWRzKQogICAg
ICAgICAgICAgdGhyZWFkcy0+YWRkSXRlbShidWlsZFRocmVhZEluZm8odGhyZWFkSW5mbykpOwog
ICAgICAgICBldmVudC0+c2V0VGhyZWFkcyhXVEZNb3ZlKHRocmVhZHMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKaW5kZXggNGVlOGU5Nzg1M2Q3MTJkM2RhNjQzOWI5ODk3ZTg2NWE4OTZkYmZmZi4u
ZmU1ZTE4NWFiZGIxYzRmMmYxM2I0ZDhhMDdhOTJiZmQ3OWU2OWQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKQEAgLTM0LDIyICszNCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
Q1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KCkgb3ZlcnJpZGU7Cisg
ICAgfkluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50
QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQ1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IDU2NWViZTA4MmMwNzhiYjY2ODc3NDAzODllYjM3MmVlMTE5Yjc0
MWIuLjU5NGM4NDVjMThhMzI1ZDUwZDllNWUwMzgyMTA5ZjkyMmIzYmNkMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05MiwxMCArOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhjb25zdCBKU09OOjpBcnJheSYgcHNldWRvQ2xhc3NBcnJheSkKIAogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFBzZXVkb0NsYXNzTm9uZTsKICAgICBmb3IgKGF1dG8mIHBzZXVkb0NsYXNzVmFsdWUg
OiBwc2V1ZG9DbGFzc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBwc2V1ZG9DbGFzczsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcocHNldWRvQ2xhc3Mp
OwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byBwc2V1ZG9DbGFzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAg
IGlmIChwc2V1ZG9DbGFzcyA9PSBhY3RpdmUpCiAgICAgICAgICAgICByZXN1bHQgfD0gUHNldWRv
Q2xhc3NBY3RpdmU7CiAgICAgICAgIGVsc2UgaWYgKHBzZXVkb0NsYXNzID09IGhvdmVyKQpAQCAt
MzEyLDggKzMwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwKIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOwor
ICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQpAQCAt
MzI3LDEwICszMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIHJl
c2V0UHNldWRvU3RhdGVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRD
U1NBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQodGhpcyk7CiAK
QEAgLTMzOCwxMyArMzM0LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCiAgICAgICAgIGZvciAoYXV0byogZG9jdW1lbnQgOiBkb21BZ2VudC0+ZG9jdW1l
bnRzKCkpCiAgICAgICAgICAgICBhY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQoKmRvY3VtZW50KTsK
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckNTU0FnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZENTU0FnZW50KG51bGxwdHIpOwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1l
bnQmIGRvY3VtZW50KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0
CiAgICAgICAgIHByZXZpb3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLnJlbW92ZShjc3NTdHls
ZVNoZWV0KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0
eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KGNzc1N0
eWxlU2hlZXQpOwogICAgICAgICBpZiAobV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlu
cyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpKSkgewotICAgICAgICAgICAgU3RyaW5nIGlkID0g
dW5iaW5kU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOwog
ICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hlZXRSZW1vdmVkKGlkKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCwg
VmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3RpdmVTdHlsZVNoZWV0cy5hZGQoY3NzU3R5
bGVTaGVldCk7CiAgICAgICAgIGlmICghbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNvbnRhaW5zKGNzc1N0eWxlU2hlZXQpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3NzU3R5bGVTaGVl
dCk7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVkKGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpCisgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnN0eWxlU2hlZXRBZGRlZChoZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC00MTAsNyArNDExLDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHMKICAg
ICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgbm9kZUlk
ID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRvIG5vZGVJZCA9IGRv
bUFnZW50LT5ib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDI5LDM3ICs0MzAsMzcgQEAgYm9vbCBJbnNwZWN0b3JDU1NB
Z2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rv
cjo6UHMKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVG
b3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMaW5lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMaW5lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZpcnN0TGluZTsKICAgICBjYXNlIFBzZXVkb0lkOjpGaXJz
dExldHRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWQ6OkZpcnN0TGV0dGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6
OkZpcnN0TGV0dGVyOwogICAgIGNhc2UgUHNldWRvSWQ6Ok1hcmtlcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6Ok1hcmtlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpNYXJrZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6
QmVmb3JlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6QmVmb3JlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9y
ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkFmdGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OkFmdGVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNlbGVjdGlvbjoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlv
bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CiAg
ICAgY2FzZSBQc2V1ZG9JZDo6SGlnaGxpZ2h0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6SGlnaGxpZ2h0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hsaWdodDsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxi
YXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xs
YmFyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRodW1iOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjsKICAgICBjYXNlIFBz
ZXVkb0lkOjpTY3JvbGxiYXJUcmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOwogICAgIGNhc2UgUHNldWRvSWQ6OlNj
cm9sbGJhclRyYWNrUGllY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrUGllY2U7CiAgICAgY2FzZSBQc2V1ZG9J
ZDo6U2Nyb2xsYmFyQ29ybmVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjsKICAgICBjYXNlIFBzZXVkb0lkOjpSZXNp
emVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
UmVzaXplcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVy
OwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Njcs
MzYgKzQ2OCwzNyBAQCBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZQogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mIHBzZXVk
b0lkTWF0Y2hlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT4+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBz
ZXVkbywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBFbGVtZW50KiBvcmlnaW5hbEVsZW1lbnQgPSBlbGVtZW50OwogICAgIFBzZXVkb0lkIGVs
ZW1lbnRQc2V1ZG9JZCA9IGVsZW1lbnQtPnBzZXVkb0lkKCk7CiAgICAgaWYgKGVsZW1lbnRQc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkgewogICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8UHNl
dWRvRWxlbWVudD4oKmVsZW1lbnQpLmhvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVu
dCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRv
LWVsZW1lbnQgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRvLWVsZW1lbnQgbm9kZSBmb3IgZ2l2
ZW4gbm9kZUlkIl9zKTsKICAgICB9CiAKICAgICAvLyBNYXRjaGVkIHJ1bGVzLgogICAgIGF1dG8m
IHN0eWxlUmVzb2x2ZXIgPSBlbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7CiAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIGVsZW1lbnRQc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NSdWxlcyk7Ci0gICAg
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIGF1dG8g
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0Vs
ZW1lbnRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRl
ZFN0eWxlRW50cnk+PiBpbmhlcml0ZWQ7CiAKICAgICBpZiAoIW9yaWdpbmFsRWxlbWVudC0+aXNQ
c2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgLy8gUHNldWRvIGVsZW1lbnRzLgogICAgICAgICBp
ZiAoIWluY2x1ZGVQc2V1ZG8gfHwgKmluY2x1ZGVQc2V1ZG8pIHsKLSAgICAgICAgICAgIGF1dG8g
cHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gUHNldWRvSWQ6OkZpcnN0UHVi
bGljUHNldWRvSWQ7IHBzZXVkb0lkIDwgUHNldWRvSWQ6OkFmdGVyTGFzdEludGVybmFsUHNldWRv
SWQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwc2V1ZG9JZCkgKyAxKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHByb3RvY29sUHNl
dWRvSWQgPSBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQocHNldWRvSWQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hdGNoZXMgPSBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHByb3RvY29sUHNl
dWRvSWQudmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIHBzZXVkb0lkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwpAQCAtNTA0LDY2ICs1MDYsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0
Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHNldWRvSWRNYXRjaGVzID0gV1RGTW92ZShwc2V1ZG9FbGVtZW50cyk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBJbmhlcml0ZWQgc3R5bGVzLgogICAgICAgICBpZiAoIWluY2x1
ZGVJbmhlcml0ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgIGF1dG8gZW50
cmllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpbmhlcml0ZWQgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudD4oKmVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyZW50U3R5bGVSZXNvbHZlciA9IGFu
Y2VzdG9yLnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNo
ZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQoJmFuY2Vz
dG9yLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpJbmhl
cml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hl
ZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVz
LCBzdHlsZVJlc29sdmVyLCBhbmNlc3RvciwgUHNldWRvSWQ6Ok5vbmUpKQogICAgICAgICAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50
PihhbmNlc3RvcikgJiYgZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpLmNzc29tU3R5
bGUoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZVNoZWV0ID0g
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0
eWxlU2hlZXQuaWQoKSwgMCkpKSk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZW50cmllcy0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAgICAgaW5o
ZXJpdGVkLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW5oZXJpdGVkRW50cmllcyA9IFdURk1vdmUoZW50cmllcyk7CiAgICAgICAgIH0KICAg
ICB9CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUobWF0Y2hlZENTU1J1bGVzKSwgV1RGTW92ZShw
c2V1ZG9FbGVtZW50cyksIFdURk1vdmUoaW5oZXJpdGVkKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGF0dHJpYnV0ZXNTdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHlsZSAqLywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byYgc3R5bGVk
RWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KTsKICAgICBhdXRvJiBz
dHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHN0eWxlZEVsZW1lbnQpOwotICAgIGlu
bGluZVN0eWxlID0gc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50
LmNzc29tU3R5bGUoKSk7Ci0gICAgaWYgKGF1dG8gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQpKQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUg
PSBXVEZNb3ZlKGF0dHJpYnV0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlc1N0eWxl
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4geyB7IHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHls
ZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpLCBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShzdHlsZWRFbGVtZW50KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiYgc3R5bGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Pj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgYXV0byogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY29tcHV0ZWRTdHlsZUluZm8g
PSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgqZWxlbWVudCwgdHJ1ZSk7CiAg
ICAgYXV0byBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgV1RGTW92ZShjb21wdXRlZFN0eWxlSW5mbyksIG51bGxwdHIpOwotICAgIHN0eWxl
ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CisgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4+JiBzdHlsZUluZm9zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoKQogewotICAgIHN0eWxlSW5mb3MgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNy
ZWF0ZSgpOworICAgIGF1dG8gaGVhZGVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlU2hlZXQqPiBpbnNwZWN0b3JTdHlsZVNoZWV0czsKICAgICBjb2xsZWN0QWxsU3R5bGVTaGVl
dHMoaW5zcGVjdG9yU3R5bGVTaGVldHMpOwotICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKQotICAgICAgICBzdHlsZUluZm9zLT5hZGRJdGVt
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5bGVTaGVldHMp
IHsKKyAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAgICAgICAgaGVhZGVycy0+YWRkSXRlbSho
ZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoaGVh
ZGVycyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxTdHlsZVNoZWV0
cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+JiByZXN1bHQpCkBAIC01OTgsMTE2ICs2MDAs
MTI0IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBWZWN0b3I8Q1NTCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5
bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzdHlsZVNoZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAgYXV0byBzdHlsZVNoZWV0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFs
IGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gc3R5bGVTaGVldC5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBTdHJpbmcqIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHRleHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgaWYgKCF0ZXh0Lmhhc0V4Y2VwdGlvbigpKQot
ICAgICAgICAqcmVzdWx0ID0gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAodGV4
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHRleHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAg
ICByZXR1cm4gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxl
U2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3Rv
clN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHlsZVNo
ZWV0VGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgdGV4dCkpOwogICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNwZWN0
b3JDU1NJZCBjb21wb3VuZElkKHN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0Vt
cHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0
SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBk
b21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAg
ICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdl
bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVu
YWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdlbnQtPmhpc3Rvcnko
KS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlVGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVT
aGVldCwgY29tcG91bmRJZCwgdGV4dCkpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
cGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgZnVsbFJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihSZWY8SlNP
Tjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQocnVsZUlk
KTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0
eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJy
b3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9y
U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRS
dWxlU2VsZWN0b3JBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHNlbGVj
dG9yKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElk
KSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JS
dWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgaWYg
KCFydWxlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBt
aXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0eWxlU2hl
ZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1l
ID0gcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gY3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KCpkb2N1bWVudCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgc3R5
bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZv
ciBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKLSAgICAqc3R5bGVT
aGVldElkID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGVTaGVldC0+aWQoKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCkBAIC03NTEsNDEgKzc2MSw0MiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvYwogICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0c0ZvckRvY3VtZW50Lmxhc3QoKS5nZXQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6YWRkUnVsZShjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxl
U2hlZXRJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0
SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9t
QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAg
aWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3Qg
YmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zKTsKIAogICAgIGF1dG8gYWN0aW9uID0gbWFrZVVuaXF1ZTxBZGRSdWxlQWN0aW9uPihp
bnNwZWN0b3JTdHlsZVNoZWV0LCBzZWxlY3Rvcik7CiAgICAgYXV0byYgcmF3QWN0aW9uID0gKmFj
dGlvbjsKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJm
b3JtKFdURk1vdmUoYWN0aW9uKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJm
b3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgSW5zcGVjdG9yQ1NTSWQgcnVs
ZUlkID0gcmF3QWN0aW9uLm5ld1J1bGVJZCgpOwotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpOwotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKHJhd0FjdGlvbi5uZXdSdWxlSWQoKSkpOworICAgIGlmICghcnVsZSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBz
dHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlJbmZvPj4mIGNzc1Byb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+Pj4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoKQogewotICAgIGF1dG8gcHJv
cGVydGllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNzc1Byb3BlcnRpZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgpOworCiAgICAgZm9y
IChpbnQgaSA9IGZpcnN0Q1NTUHJvcGVydHk7IGkgPD0gbGFzdENTU1Byb3BlcnR5OyArK2kpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY29udmVydFRvQ1NTUHJvcGVydHlJ
RChpKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0YWtlIGFjY291bnQgZm9yIGZsYWdzIGlu
IHNldHRpbmdzKCkuCiAgICAgICAgIGlmIChpc0ludGVybmFsQ1NTUHJvcGVydHkocHJvcGVydHlJ
RCkgfHwgIWlzRW5hYmxlZENTU1Byb3BlcnR5KHByb3BlcnR5SUQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0gUHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgLnJlbGVh
c2UoKTsKIApAQCAtODIxLDYzICs4MzIsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnIKICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KHByb3BlcnR5SUQpKQog
ICAgICAgICAgICAgcHJvcGVydHktPnNldEluaGVyaXRlZCh0cnVlKTsKIAotICAgICAgICBwcm9w
ZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUocHJvcGVydHkpKTsKKyAgICAgICAgY3NzUHJvcGVydGll
cy0+YWRkSXRlbShXVEZNb3ZlKHByb3BlcnR5KSk7CiAgICAgfQotICAgIGNzc1Byb3BlcnRpZXMg
PSBXVEZNb3ZlKHByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIFdURk1vdmUoY3NzUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRG
YW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBm
b250RmFtaWx5TmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1p
bHlOYW1lcygpCiB7Ci0gICAgYXV0byBmYW1pbGllcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6
Y3JlYXRlKCk7CisgICAgYXV0byBmb250RmFtaWx5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCi0gICAgICAgIGZhbWls
aWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworICAgICAgICBmb250RmFtaWx5TmFtZXMtPmFkZEl0
ZW0oZmFtaWx5TmFtZSk7CiAKLSAgICBmb250RmFtaWx5TmFtZXMgPSBXVEZNb3ZlKGZhbWlsaWVz
KTsKKyAgICByZXR1cm4gV1RGTW92ZShmb250RmFtaWx5TmFtZXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9y
Y2VkUHNldWRvQ2xhc3NlcykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0
ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9N
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
bUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHRoZSBmb3JjZWQgcHNldWRvIHN0
YXRlIHdhcyBhbHJlYWR5IHNldCBjb3JyZWN0bHkuCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRv
U3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMpOwogICAg
IGlmIChmb3JjZWRQc2V1ZG9TdGF0ZSkgewogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmFkZChub2RlSWQsIDApLml0ZXJhdG9yOwogICAgICAgICBp
ZiAoZm9yY2VkUHNldWRvU3RhdGUgPT0gaXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaXRlcmF0b3ItPnZhbHVlID0g
Zm9yY2VkUHNldWRvU3RhdGU7CiAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0
YXRlcy5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaWYgKG1fbm9kZUlk
VG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RvY3VtZW50c1dp
dGhGb3JjZWRQc2V1ZG9TdGF0ZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSYg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5zdXJl
KCZlbGVtZW50LCBbdGhpcywgJmVsZW1lbnRdIHsKICAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hl
ZXRJZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKLSAgICAgICAgYXV0
byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSwgbmV3U3R5
bGVTaGVldElkLCBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OkF1dGhvciwgdGhpcyk7CisgICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgUHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlzKTsKICAgICAgICAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQobmV3U3R5bGVTaGVldElkLCBpbnNwZWN0b3JTdHls
ZVNoZWV0LmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7
CiAgICAgaWYgKCFkb21BZ2VudCkgewpAQCAtOTE0LDcgKzkyOCw3IEBAIEluc3BlY3RvclN0eWxl
U2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9y
SWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkK
K0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQpCiB7CiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYg
KGl0ID09IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKQEAgLTkyNCwyOSArOTM4
LDI5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3Bl
Y3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KQorUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHls
ZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKIHsKICAgICBpZiAobV9jcmVhdGluZ1Zp
YUluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKIAogICAgIGlmIChwYWdlU3R5
bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0
LT5ocmVmKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAKICAgICBpZiAocGFnZVN0eWxl
U2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKQot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
VXNlcjsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmZpbmQob3duZXJEb2N1bWVudCk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZG9jdW1lbnRU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpbnNwZWN0
b3JTdHlsZVNoZWV0IDogaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocGFnZVN0
eWxlU2hlZXQgPT0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cGFnZVN0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpJbnNwZWN0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvcjsKKyAg
ICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZTo6
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShj
b25zdCBTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk2OCw3ICs5ODIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAog
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGNzc29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVs
ZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
OTc4LDE2ICs5OTIsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVs
ZShydWxlKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYg
bWF0Y2hlZFJ1bGVzLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVs
ZW1lbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVs
ZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVz
LCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQsIFBzZXVk
b0lkIHBzZXVkb0lkKQogewotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAog
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNvbnRleHQucHNldWRvSWQgPSBwc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSA/IHBzZXVkb0lkIDogZWxlbWVudC5wc2V1ZG9JZCgpOwog
ICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsK
IAogICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBtYXRjaGVkUnVsZXMpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVsZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCk7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0g
YnVpbGRPYmplY3RGb3JSdWxlKG1hdGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVt
ZW50KTsKICAgICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEwMDEsOCArMTAxNSw4IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1CiAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFJ1bGUo
V1RGTW92ZShydWxlT2JqZWN0KSkKKyAgICAgICAgYXV0byBtYXRjaCA9IFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRSdWxlKHJ1bGVPYmplY3QucmVs
ZWFzZU5vbk51bGwoKSkKICAgICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVjdG9ycyhXVEZNb3Zl
KG1hdGNoaW5nU2VsZWN0b3JzKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbShXVEZNb3ZlKG1hdGNoKSk7CkBAIC0xMDExLDcgKzEwMjUsNyBAQCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6
IFVnbGluZXNzIGJlbG93LgogICAgIGF1dG8qIGF0dHJpYnV0ZVN0eWxlID0gY29uc3RfY2FzdDxT
dHlsZVByb3BlcnRpZXMqPihlbGVtZW50LnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwpA
QCAtMTAyMyw3ICsxMDM3LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHIKICAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBpbnQgbm9kZUlkKQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGZhMWQ2NzFkZDgzM2IwMDNhNjFkYzI3OTY1
OTY2OTIxNjFhYWRmN2YuLmQyZmNhNzk1ZGM2ODBmOThkZTg2Y2JjYzFkNmU5MGM4Y2E3YzcwYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGljIEluc3BlY3Rvcjo6Q1MKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NBZ2VudChX
ZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1NTQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKIAogICAgIGNsYXNzIElubGluZVN0eWxlT3ZlcnJpZGVT
Y29wZSB7CiAgICAgcHVibGljOgpAQCAtODMsMjkgKzgzLDI5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShDU1NSdWxlJik7CiAKICAgICAvLyBJbnNw
ZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENTU0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGlu
bGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGF0
dHJpYnV0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk+PiYgaW5oZXJpdGVkRW50cmllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxTdHls
ZVNoZWV0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+JiBzdHlsZVNoZWV0SW5mb3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdHlsZVNoZWV0VGV4dChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9yY2VQc2V1
ZG9TdGF0ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5JiBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk+Pj4gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBnZXRJbmxpbmVTdHlsZXNGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVJ
bmhlcml0ZWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pj4+IGdldEFsbFN0eWxlU2hlZXRzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+
IGdldFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0
U3R5bGVTaGVldFRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFN0
eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gc2V0U3R5bGVU
ZXh0KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBy
dWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IGNy
ZWF0ZVN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IGFkZFJ1bGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4+IGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvcmNlUHNl
dWRvU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFJlZjxKU09OOjpBcnJh
eT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKIAogICAgIC8vIEluc3BlY3RvclN0eWxlU2hlZXQ6
Okxpc3RlbmVyCi0gICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNo
ZWV0Kik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRvY3Vt
ZW50RGV0YWNoZWQoRG9jdW1lbnQmKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBmb3JjZVBzZXVkb1N0YXRlKGNvbnN0IEVsZW1lbnQmLCBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NUeXBlKTsKIAogICAgIC8vIEluc3BlY3RvckRPTUFnZW50IGhvb2tzCi0gICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICB2b2lk
IGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYpOwogCiAgICAgdm9pZCByZXNldCgpOwpAQCAtMTI2
LDI4ICsxMjYsMjggQEAgcHJpdmF0ZToKICAgICBjbGFzcyBTZXRSdWxlU2VsZWN0b3JBY3Rpb247
CiAgICAgY2xhc3MgQWRkUnVsZUFjdGlvbjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXQ+PiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+Pj4gRG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9y
IiBzdHlsZXNoZWV0cwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHVuc2lnbmVkPiBOb2RlSWRU
b0ZvcmNlZFBzZXVkb1N0YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7CiAK
ICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIGFzSW5zcGVjdG9yU3R5bGVT
aGVldChTdHlsZWRFbGVtZW50Jik7Ci0gICAgRWxlbWVudCogZWxlbWVudEZvcklkKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCk7CisgICAgRWxlbWVudCogZWxlbWVudEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OwogCiAgICAgdm9pZCBjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxl
U2hlZXQqPiYpOwogICAgIHZvaWQgY29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMoRG9jdW1l
bnQmLCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCosIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIHNl
dEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmLCBWZWN0b3I8Q1NTU3R5bGVT
aGVldCo+JiBhY3RpdmVTdHlsZVNoZWV0cyk7CiAKLSAgICBTdHJpbmcgdW5iaW5kU3R5bGVTaGVl
dChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQgdW5iaW5kU3R5bGVTaGVldChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogY3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50Jik7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihD
U1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSosIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVj
dEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVM
aXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2
ZXImLCBFbGVtZW50JiwgUHNldWRvSWQpOworICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlz
dChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVy
JiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVu
dCYpOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggZDA5MTY4Mjk0MDBmOTQ2ZjA4NjAwOTU4YWE0
NDNlNTcwNzNmZThhYS4uYTg1MDM4ZjVjMDY3N2U3ZDkyODE5NGRiN2QwNDA5YTk0OGJjOTZiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAKQEAgLTEwMiw4ICsxMDIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlcgogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTExMSwxMCArMTEwLDEw
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiAgICAgcmVzZXQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENhbnZhc0FnZW50
KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDYW52YXNBZ2VudCh0aGlzKTsKIApAQCAt
MTcwLDczICsxNjksODQgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJs
ZWRDYW52YXNBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CiAKICAgICBtX3JlY29yZGlu
Z0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2Fu
dmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcs
IGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
bm9kZSA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfcyk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRl
ZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBo
YXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJm5vZGUt
PmRvY3VtZW50KCkpOwotICAgIGlmICghZG9jdW1lbnROb2RlSWQpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRG9jdW1lbnQgbXVzdCBoYXZlIGJlZW4gcmVxdWVzdGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnROb2RlSWQpCisgICAgICAgIG1ha2VVbmV4
cGVjdGVkKCJEb2N1bWVudCBtdXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3MpOwogCi0gICAgKm5v
ZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CisgICAgcmV0
dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRl
bnQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAg
aWYgKCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpjb250ZW50ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChlcnJvclN0
cmluZyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNhbnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgY2xpZW50
Tm9kZUlkcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4+PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5v
ZGVzKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJy
b3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjbGllbnROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Ojpj
cmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGNsaWVudE5vZGUgOiBpbnNwZWN0b3JDYW52YXMtPmNs
aWVudE5vZGVzKCkpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQg
YXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFz
IGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAgICAgICAgaWYgKGF1dG8gZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNsaWVudE5vZGUtPmRvY3VtZW50KCkpKQogICAgICAg
ICAgICAgY2xpZW50Tm9kZUlkcy0+YWRkSXRlbShkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5k
KGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgY2xpZW50Tm9kZSkpOwogICAgIH0KKyAgICBy
ZXR1cm4gV1RGTW92ZShjbGllbnROb2RlSWRzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzSWQmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIHN0YXRlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0ZSgpOwogICAgIGF1dG8gaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihz
dGF0ZSk7CkBAIC0yNDYsMTIyICsyNTYsMTI5IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmplY3RHcm91
cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAgIHJlc3Vs
dCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFtZSk7Cisg
ICAgYXV0byByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RH
cm91cCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
SW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IENvbnRleHQiKTsKKworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
c2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNl
dFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQgY291bnQpCiB7CiAgICAgaWYgKGNv
dW50ID4gMCkKICAgICAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBjb3Vu
dDsKICAgICBlbHNlCiAgICAgICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50ID0g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxp
bWl0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnN0YXJ0UmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJ
ZCwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1vcnlMaW1p
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2Fu
dmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3Rvcjog
Q2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGNvbnRl
eHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRp
bmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoY29udGV4dC0+Y2Fs
bFRyYWNpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbHJlYWR5
IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdP
cHRpb25zOwogICAgIGlmIChmcmFtZUNvdW50KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLmZy
YW1lQ291bnQgPSAqZnJhbWVDb3VudDsKICAgICBpZiAobWVtb3J5TGltaXQpCiAgICAgICAgIHJl
Y29yZGluZ09wdGlvbnMubWVtb3J5TGltaXQgPSAqbWVtb3J5TGltaXQ7Ci0gICAgc3RhcnRSZWNv
cmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJ
bml0aWF0b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFy
dFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0
b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVj
dG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3Vw
cG9ydGVkIl9zKTsKKworICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3QgcmVjb3JkaW5nIGNhbnZhcyJfcyk7CiAK
ICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4dCwgdHJ1ZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNo
YWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShjb25z
dCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3Rv
clByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKLSAgICBhdXRvIHNoYWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlPihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNo
YWRlclR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNo
YWRlclR5cGU6ICJfcywgc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBzb3VyY2UgPSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNl
KHNoYWRlclR5cGUpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfcyk7CiAKLSAgICBhdXRvIHNvdXJjZSA9IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RT
aGFkZXJTb3VyY2Uoc2hhZGVyVHlwZS52YWx1ZSgpKTsKLSAgICBpZiAoIXNvdXJjZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZv
ciBnaXZlbiBwcm9ncmFtSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAqb3V0
U291cmNlID0gc291cmNlOworICAgIHJldHVybiBzb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFt
SWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9n
cmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgYXV0byBzaGFkZXJUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJU
eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJU
eXBlOiAiX3MsIHNoYWRlclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghaW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUsIHNvdXJjZSkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIg
b2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGlmICgh
aW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUudmFsdWUoKSwgc291cmNl
KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2
ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOworICAgIHJldHVybiB7IH07CiB9
CiAKICNpZiBFTkFCTEUoV0VCR0wpCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0
b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlk
KTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGluc3BlY3RvclByb2dy
YW0tPnNldERpc2FibGVkKGRpc2FibGVkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdo
dGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3Nl
cnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5z
cGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0
ZWQoaGlnaGxpZ2h0ZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpAQCAtNDEz
LDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYgKG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50KSB7CiAgICAgICAgIFJlY29yZGluZ09wdGlvbnMgcmVjb3Jk
aW5nT3B0aW9uczsKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gbV9yZWNv
cmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQudmFsdWUoKTsKLSAgICAgICAgc3RhcnRSZWNvcmRp
bmcoaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgICAgICBz
dGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogICAgIH0KIH0K
IApAQCAtNTczLDcgKzU5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVT
dGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjCiAgICAgICAgIGlm
IChKU0M6OkpTVmFsdWUgb3B0aW9uTmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpKSkKICAgICAgICAgICAgIHJlY29yZGluZ09w
dGlvbnMubmFtZSA9IG9wdGlvbk5hbWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgIH0KLSAgICBz
dGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7Cisg
ICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6
SW5pdGlhdG9yOjpDb25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTY5OCw3ICs3MTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCi12b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9y
LCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRp
b25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9y
Q2FudmFzLmNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC04NDAsNyAr
ODU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3Rv
ckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKK1JlZlB0cjxJbnNwZWN0b3JDYW52YXM+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JDYW52YXMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKIHsKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmdldChjYW52
YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpIHsKQEAgLTg4NSw3ICs5MDIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclBy
b2dyYW0mIGluc3BlY3RvclByb2dyYQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpCitSZWZQdHI8SW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvclByb2dyYW0o
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFt
SWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtLmdldChwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCmluZGV4IDBlZjFhZWZiNjQ3ZWFkOTliN2QwZWIyNDNmZDBiNDA4Y2U0NWI2MGYu
Ljg2YmRiNTEyNTY5YTMxMWY3YTI1MDg5NWU4ZmZiYzlkZDllYmNkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgK
QEAgLTU3LDQzICs1Nyw0MSBAQCBjbGFzcyBXZWJHUFVTd2FwQ2hhaW47CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXNBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNh
bnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIENhbnZhc09ic2VydmVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0
b3JDYW52YXNBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNjYXJkQWdlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKKyAgICB2b2lkIGRpc2NhcmRBZ2Vu
dCgpOwogCiAgICAgLy8gQ2FudmFzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVz
dENvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBTdHJpbmcqIGNv
bnRlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENsaWVudE5vZGVzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1v
cnlMaW1pdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RDb250ZW50
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUNvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDYW52YXNJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVG
cmFtZUNvdW50KGludCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1v
cnlMaW1pdCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
dG9wUmVjb3JkaW5nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQm
KTsKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi0gICAgdm9pZCByZXF1ZXN0
U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwotICAgIHZvaWQg
dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiByZXF1ZXN0U2hhZGVy
U291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVwZGF0ZVNoYWRlcihjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICB2b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBib29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgZGlzYWJsZWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hhZGVyUHJvZ3Jh
bUhpZ2hsaWdodGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiwgYm9vbCBoaWdobGlnaHRlZCk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVy
Ci0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgeyB9CisgICAgdm9pZCBjYW52YXNEZXN0cm95
ZWQoQ2FudmFzQmFzZSYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwpAQCAtMTM4LDcgKzEzNiw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzJiBiaW5kQ2FudmFzKFdlYkdQVURldmljZSYsIGJvb2wgY2Fw
dHVyZUJhY2t0cmFjZSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmlu
ZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBh
c3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lk
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7CkBAIC0xNDYsNyAr
MTQ0LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
ICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJH
TCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dy
YW0oV2ViR0xQcm9ncmFtJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCA4MzlhNThiNTQ4ODU0ZGU3NTc3MGQyNjMzZDhkNTlhZjU5ZjI0MTEyLi5kYmRiODUxOGM5YTFk
YmUxYWFmNzdiMDIyZjYwYTljMTZkNDQwMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTI5LDQwICsxMjks
MzkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7
IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmpl
Y3QqIGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBpbnQgciA9IDA7Ci0gICAgaW50
IGcgPSAwOwotICAgIGludCBiID0gMDsKLSAgICBpZiAoIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJyIiwgcikgfHwgIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJnIiwgZykgfHwgIWNvbG9yT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJiIiwgYikpCisgICAgYXV0byByID0gY29sb3JPYmplY3QtPmdldElu
dGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpyS2V5KTsKKyAgICBhdXRvIGcgPSBjb2xv
ck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmdLZXkpOworICAg
IGF1dG8gYiA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6YktleSk7CisgICAgaWYgKCFyIHx8ICFnIHx8ICFiKQogICAgICAgICByZXR1cm4gQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBkb3VibGUgYSA9IDEuMDsKLSAgICBpZiAoIWNvbG9y
T2JqZWN0LT5nZXREb3VibGUoImEiLCBhKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4ociwgZywgYik7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSk7CisgICAgYXV0byBh
ID0gY29sb3JPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmFLZXkp
OworICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4oKnIsICpnLCAqYik7CisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4o
KnIsICpnLCAqYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgqYSkpOwogfQogCi1zdGF0aWMgQ29s
b3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6
T2JqZWN0KiBjb25maWdPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3QpCiB7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gY29sb3JPYmplY3Q7Ci0gICAgY29uZmlnT2JqZWN0LT5nZXRP
YmplY3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7Ci0KLSAgICByZXR1cm4gcGFyc2VDb2xvcihj
b2xvck9iamVjdC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoY29uZmlnT2JqZWN0Lmdl
dE9iamVjdChmaWVsZE5hbWUpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNvbnN0IEpT
T046OkFycmF5JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKK3N0YXRpYyBib29sIHBhcnNl
UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAg
ICAgY29uc3Qgc2l6ZV90IGNvb3JkaW5hdGVzSW5RdWFkID0gODsKICAgICBkb3VibGUgY29vcmRp
bmF0ZXNbY29vcmRpbmF0ZXNJblF1YWRdOwotICAgIGlmIChxdWFkQXJyYXkubGVuZ3RoKCkgIT0g
Y29vcmRpbmF0ZXNJblF1YWQpCisgICAgaWYgKHF1YWRBcnJheS0+bGVuZ3RoKCkgIT0gY29vcmRp
bmF0ZXNJblF1YWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvb3JkaW5hdGVzSW5RdWFkOyArK2kpIHsKLSAgICAgICAgaWYgKCFxdWFkQXJyYXku
Z2V0KGkpLT5hc0RvdWJsZSgqKGNvb3JkaW5hdGVzICsgaSkpKQorICAgICAgICBhdXRvIGNvb3Jk
aW5hdGUgPSBxdWFkQXJyYXktPmdldChpKS0+YXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFjb29y
ZGluYXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb29yZGluYXRlc1tp
XSA9ICpjb29yZGluYXRlOwogICAgIH0KICAgICBxdWFkLT5zZXRQMShGbG9hdFBvaW50KGNvb3Jk
aW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkpOwogICAgIHF1YWQtPnNldFAyKEZsb2F0UG9pbnQo
Y29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzNdKSk7CkBAIC0yNDMsNyArMjQyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8qIG5vZGUgPSBkb3duY2Fz
dDxOb2RlPihldmVudC50YXJnZXQoKSk7Ci0gICAgICAgIGludCBub2RlSWQgPSBtX2RvbUFnZW50
LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CisgICAgICAgIGF1dG8gbm9kZUlkID0gbV9k
b21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwogICAgICAgICBpZiAoIW5vZGVJ
ZCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzIwLDkgKzMxOSw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvCiAgICAgbV9tb3VzZWRPdmVyTm9kZSA9IG51bGxwdHI7CiAgICAgbV9pbnNw
ZWN0ZWROb2RlID0gbnVsbHB0cjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShpZ25v
cmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwotICAgIGhpZGVIaWdobGlnaHQoaWdub3JlZCk7
CisgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRET01BZ2VudChudWxscHRyKTsKICAgICBtX2RvY3VtZW50UmVxdWVzdGVkID0gZmFs
c2U7CkBAIC0zNzQsOSArMzczLDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVsZWFzZURh
bmdsaW5nTm9kZXMoKQogICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuY2xlYXIoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
aWQpCiAgICAgICAgIHJldHVybiBpZDsKICAgICBpZCA9IG1fbGFzdE5vZGVJZCsrOwpAQCAtMzg4
LDcgKzM4Nyw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBub2RlLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQyMiw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAg
IH0KIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dE5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAg
IHJldHVybiBub2RlOwogfQogCi1Eb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERv
Y3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0RvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC00NDQsNyArNDQzLDcgQEAgRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAgICByZXR1cm4gZG93
bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5v
ZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKQEAgLTQ1Niw3ICs0NTUsNyBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWRpdGFibGVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
ICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUpCkBAIC00NzIsNyArNDcxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFz
c2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVk
aXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC00ODQsMjcgKzQ4MywyNyBAQCBFbGVtZW50KiBJbnNwZWN0
b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RG9jdW1lbnQoKQogewogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAg
aWYgKCFtX2RvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9y
OiBtaXNzaW5nIGRvY3VtZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJv
cjogbWlzc2luZyBkb2N1bWVudCJfcyk7CiAKICAgICAvLyBSZXNldCBiYWNrZW5kIHN0YXRlLgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogICAgIHJlc2V0KCk7
CiAgICAgbV9kb2N1bWVudCA9IGRvY3VtZW50OwogCi0gICAgcm9vdCA9IGJ1aWxkT2JqZWN0Rm9y
Tm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBh
dXRvIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1fZG9j
dW1lbnROb2RlVG9JZE1hcCk7CiAKICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9j
dXNOb2RlKCk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0
aCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBpbnQgZGVwdGgpCiB7CiAgICAgTm9kZSogbm9kZSA9
IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVO
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RSkpCkBAIC01MTksNyArNTE4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxk
Tm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0aCkKICAgICAgICAgZGVwdGgtLTsK
IAogICAgICAgICBmb3IgKG5vZGUgPSBpbm5lckZpcnN0Q2hpbGQobm9kZSk7IG5vZGU7IG5vZGUg
PSBpbm5lck5leHRTaWJsaW5nKG5vZGUpKSB7Ci0gICAgICAgICAgICBpbnQgY2hpbGROb2RlSWQg
PSBub2RlTWFwLT5nZXQobm9kZSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkTm9kZUlkID0gbm9k
ZU1hcC0+Z2V0KG5vZGUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZUlkKTsKICAgICAg
ICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChjaGlsZE5vZGVJZCwgZGVwdGgpOwogICAg
ICAgICB9CkBAIC01NDEsMTggKzU0MCwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKIH0KIAotaW50
IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkK
K1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgaWYgKCFub2RlVG9QdXNoKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBX
ZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBw
b2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJl
ZW4gaW5zdHJ1bWVudGVkCiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVRvRnJvbnRlbmQoaWdu
b3JlZCwgYm91bmROb2RlSWQoJm5vZGVUb1B1c2gtPmRvY3VtZW50KCkpLCBub2RlVG9QdXNoKTsK
IH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCitQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVu
ZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAg
ICBpZiAoIWRvY3VtZW50KQpAQCAtNTY1LDcgKzU2NCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3Vt
ZW50CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGVU
b1B1c2gpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IGlkKQogewogICAgIGlmICghbV9pZFRvTm9kZS5pc1ZhbGlkS2V5KGlkKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC01NzMsNyArNTcyLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6
Om5vZGVGb3JJZChpbnQgaWQpCiAgICAgcmV0dXJuIG1faWRUb05vZGUuZ2V0KGlkKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCkKIHsKICAgICBp
bnQgc2FuaXRpemVkRGVwdGg7CiAKQEAgLTU4Myw2NCArNTgyLDY0IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwKICAgICAgICAgc2FuaXRpemVkRGVwdGggPSBJTlRfTUFYOwogICAgIGVsc2UgaWYg
KCpkZXB0aCA+IDApCiAgICAgICAgIHNhbml0aXplZERlcHRoID0gKmRlcHRoOwotICAgIGVsc2Ug
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBn
aXZlbiBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2
ZW4gZGVwdGgiX3MpOwogCiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCwgc2Fu
aXRpemVkRGVwdGgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5
U2VsZWN0b3IoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKLSAgICAqZWxlbWVudElkID0gMDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KCpub2RlKSkgewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5n
LCBub2RlSWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgYSBjb250YWluZXIgbm9kZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKTsKLSAg
ICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIEVycm9yIHdoaWxlIHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250
YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5z
cGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKQotICAgICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgZWxlbWVudCk7CisgICAgYXV0byByZXN1bHROb2RlSWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgaWYgKCFyZXN1bHROb2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPGludD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2Vs
ZWN0b3JBbGwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBO
b2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkg
ewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYSBjb250YWluZXIgbm9k
ZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4o
Km5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKTsKLSAgICBpZiAocXVlcnlSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIEVycm9yIHdoaWxl
IHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSku
cXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBh
dXRvIG5vZGVzID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICByZXN1bHQt
PmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgICAg
ICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkp
KTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRzKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6
RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9k
ZSogbm9kZVRvUHVzaCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KGlnbm9yZWQsIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1
c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIEFTU0VSVChub2RlVG9QdXNoKTsgIC8vIEludmFsaWQgaW5wdXQKIApA
QCAtNjU2LDggKzY1NSw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kCiAgICAgfQogCiAgICAg
Ly8gUmV0dXJuIGlkIGluIGNhc2UgdGhlIG5vZGUgaXMga25vd24uCi0gICAgaW50IHJlc3VsdCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCk7Ci0gICAgaWYgKHJlc3VsdCkK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGVUb1B1
c2gpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVUb1B1
c2g7CkBAIC02NzEsNyArNjY5LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICAgICAg
ICAgIGF1dG8gbmV3TWFwID0gbWFrZVVuaXF1ZTxOb2RlVG9JZE1hcD4oKTsKICAgICAgICAgICAg
IGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVU
b0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1
aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwogICAgICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGTW92ZShjaGlsZHJlbikpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02ODYsMjIxICs2ODQsMjUyIEBAIGludCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywg
Tm9kZSogbm9kCiAKICAgICBOb2RlVG9JZE1hcCogbWFwID0gZGFuZ2xpbmdNYXAgPyBkYW5nbGlu
Z01hcCA6ICZtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CiAgICAgZm9yIChpbnQgaSA9IHBhdGguc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1hcC0+Z2V0KHBh
dGguYXQoaSkpOworICAgICAgICBhdXRvIG5vZGVJZCA9IG1hcC0+Z2V0KHBhdGguYXQoaSkpOwog
ICAgICAgICBBU1NFUlQobm9kZUlkKTsKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KG5vZGVJZCk7CiAgICAgfQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBO
b2RlKiBub2RlKQogewogICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJy
b3JTdHJpbmcsIGVsZW1lbnRJZCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgbV9kb21FZGl0
b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxl
bWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRy
aWJ1dGVzQXNUZXh0KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1l
bnQtPmRvY3VtZW50KCksIHNwYW5UYWcpOwogICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVu
dC5nZXQoKS5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7Ci0gICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJy
b3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkpKTsKIAogICAgIE5vZGUqIGNoaWxkID0gcGFyc2VkRWxlbWVudC0+Zmlyc3RD
aGlsZCgpOwotICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQg
bm90IHBhcnNlIGdpdmVuIHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFjaGlsZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcGFyc2Ug
Z2l2ZW4gdGV4dCJfcyk7CiAKICAgICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAm
JiBuYW1lKSB7Ci0gICAgICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQs
ICpuYW1lLCBlcnJvclN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNoaWxkRWxl
bWVudC0+aGFzQXR0cmlidXRlcygpICYmICEhbmFtZSkgeworICAgICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgYm9vbCBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGNoaWxkRWxlbWVudC0+YXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAg
ICAgIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IChu
YW1lICYmIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSAqbmFtZSk7CisgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSBuYW1lOwogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5z
ZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmli
dXRlLnZhbHVlKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfQogCi0gICAgaWYg
KCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUgJiYgIW5hbWUtPnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxl
bWVudCwgKm5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1
dGUgJiYgIW5hbWUuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVB
dHRyaWJ1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlQXR0cmlidXRlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVF
bGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1l
LCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNhbm5vdCByZW1vdmUgZGV0YWNoZWQgbm9kZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhcmVudE5vZGUpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zKTsKIAotICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUsIGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUs
IGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5v
ZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0YWdOYW1lLCBpbnQqIG5ld0lkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewotICAgICpuZXdJZCA9
IDA7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgUmVmUHRy
PE5vZGU+IG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+
KG9sZE5vZGUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBvbGROb2RlID0gYXNzZXJ0RWxl
bWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIGNyZWF0ZUVsZW1l
bnRSZXN1bHQgPSBvbGROb2RlLT5kb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyh0
YWdOYW1lKTsKICAgICBpZiAoY3JlYXRlRWxlbWVudFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKwogICAgIGF1dG8gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRSZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBh
dHRyaWJ1dGVzLgotICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KGRv
d25jYXN0PEVsZW1lbnQ+KCpvbGROb2RlKSk7CisgICAgbmV3RWxlbWVudC0+Y2xvbmVBdHRyaWJ1
dGVzRnJvbUVsZW1lbnQoKm9sZE5vZGUpOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5h
bCBub2RlJ3MgY2hpbGRyZW4uCiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkOwogICAgIHdoaWxlICgo
Y2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKSB7CiAgICAgICAgIGlmICghbV9kb21FZGl0
b3ItPmluc2VydEJlZm9yZShuZXdFbGVtZW50LCAqY2hpbGQsIDAsIGVycm9yU3RyaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAgICAgfQogCiAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIG5vZGUgd2l0aCB0aGUg
bmV3IG5vZGUKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqcGFyZW50LCBu
ZXdFbGVtZW50LmNvcHlSZWYoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZXJyb3JTdHJpbmcp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudCwgKm9sZE5v
ZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CisgICAgYXV0byByZXN1bHROb2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdFbGVtZW50LnB0cigp
KTsKICAgICBpZiAobV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpKQotICAgICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKKyAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKHJlc3VsdE5vZGVJZCk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqb3V0ZXJIVE1MID0gc2VyaWFs
aXplRnJhZ21lbnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUp
OworICAgIHJldHVybiBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwgU2VyaWFsaXplZE5vZGVzOjpT
dWJ0cmVlSW5jbHVkaW5nTm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91
dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgb3V0ZXJIVE1MKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICBET01QYXRjaFN1cHBvcnQgeyAqbV9k
b21FZGl0b3IsICptX2RvY3VtZW50IH0ucGF0Y2hEb2N1bWVudChvdXRlckhUTUwpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgTm9kZSogbm9kZSA9
IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4g
bm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEb2N1bWVudCBvZiBub2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IEhUTUwvWE1MIl9zKTsKIAogICAgIE5vZGUqIG5ld05vZGUgPSBu
dWxscHRyOwogICAgIGlmICghbV9kb21FZGl0b3ItPnNldE91dGVySFRNTCgqbm9kZSwgb3V0ZXJI
VE1MLCBuZXdOb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICghbmV3Tm9kZSkgewog
ICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQuCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpbnQgbmV3SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKKyAgICBhdXRvIG5l
d0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3Tm9kZSk7CiAKICAg
ICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhu
b2RlSWQpOwogICAgIGlmIChjaGlsZHJlblJlcXVlc3RlZCkKICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKG5ld0lkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRB
ZGphY2VudEhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBw
b3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfcyk7CiAKLSAgICBtX2RvbUVk
aXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSwgcG9zaXRp
b24sIGh0bWwsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRBZGph
Y2VudEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JT
dHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRO
b2RlVmFsdWUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgdGV4dCJfcyk7
CiAKLSAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9k
ZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZVdo
b2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9kZSksIHZhbHVlLCBlcnJvclN0cmluZykpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKQogewotICAgIGV2ZW50TmFtZXMg
PSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZXZlbnROYW1lcyA9
IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05B
TUVTX0FERChuYW1lKSBldmVudE5hbWVzLT5hZGRJdGVtKCNuYW1lKTsKICAgICBET01fRVZFTlRf
TkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0FERCkKICN1bmRlZiBET01fRVZFTlRfTkFN
RVNfQURECisKKyAgICByZXR1cm4gV1RGTW92ZShldmVudE5hbWVzKTsKIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAv
KiBub2RlSWQgKi8sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RGF0YUJpbmRpbmc+PiYgLyogZGF0YUJpbmRpbmdzICovKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRpbmc+Pj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IC8qIG5vZGVJZCAqLywgT3B0aW9uYWw8U3RyaW5nPiYgLyogYXNzb2NpYXRlZERhdGEg
Ki8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkKQogewotICAgIGVy
cm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKLSAgICBsaXN0ZW5lcnNBcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3JlYXRlKCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCiAgICAgYXV0byogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gYW5jZXN0b3JzOwogICAgIGFuY2VzdG9ycy5hcHBlbmQobm9k
ZSk7CkBAIC05MjksOCArOTU4LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBhdXRvIGxpc3RlbmVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSgpOworCiAgICAgYXV0byBhZGRMaXN0ZW5lciA9
IFsmXSAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBFdmVudExpc3Rl
bmVySW5mbyYgaW5mbykgewotICAgICAgICBpbnQgaWRlbnRpZmllciA9IDA7CisgICAgICAgIFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyID0gMDsKICAgICAgICAgYm9v
bCBkaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVh
a3BvaW50OwogCkBAIC05NTMsNyArOTg0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAg
ICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuYWRkKGlkZW50aWZpZXIsIGluc3BlY3Rv
ckV2ZW50TGlzdGVuZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAq
aW5mby5ldmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7
CisgICAgICAgIGxpc3RlbmVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIo
bGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBpbmZvLmV2ZW50VHlwZSwg
ZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKICAgICB9OwogCiAgICAgLy8gR2V0IENhcHR1cmluZyBM
aXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCkBAIC05NzYsODAgKzEwMDcsODEgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG4KIAogICAgIGlmIChtX2luc3BlY3RlZE5vZGUgPT0gbm9kZSkKICAgICAg
ICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3RlbmVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEV2ZW50TGlzdGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVu
dExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKFByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAg
ICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQp
OwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCiAg
ICAgaXQtPnZhbHVlLmRpc2FibGVkID0gZGlzYWJsZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoUHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5l
cklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVu
dExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsK
IAotICAgIGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0LT52YWx1ZS5icmVha3BvaW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50
TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKLSAgICBpdC0+dmFsdWUuYnJlYWtwb2lu
dCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtw
b2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlz
dGVuZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgZXZlbnRMaXN0ZW5lcklkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVu
ZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExp
c3RlbmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2
ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3Ig
Z2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9p
bnQpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCBtaXNzaW5nIl9zOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCBtaXNzaW5nIl9zKTsKIAogICAgIGl0LT52
YWx1ZS5icmVha3BvaW50ID0gbnVsbHB0cjsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9k
ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXhQcm9wZXJ0aWVzID0g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKKyAgICByZXR1cm4g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcygqbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nIC8qIHNlYXJjaElkICov
LCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdy
YW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0
ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIocXVlcnksIGNhc2VTZW5zaXRpdmUg
JiYgKmNhc2VTZW5zaXRpdmUpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKICAgICAgICAgZm9yIChh
dXRvJiBub2RlVmFsdWUgOiAqbm9kZUlkcykgewotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgICAgIGlmICgh
bm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICAgICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gYXNzZXJ0Tm9kZSBzaG91bGQgaGF2ZSBmaWxs
ZWQgdGhlIGVycm9yU3RyaW5nIGZvciB1cy4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3JT
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gbm9kZUlkID0gbm9kZVZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3MpOworCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKwogICAgICAgICAgICAgZmluZGVyLnBlcmZvcm1TZWFyY2go
bm9kZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA1OCwzNyArMTA5MCwzNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBxdQogICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChtX2Rv
Y3VtZW50LmdldCgpKTsKICAgICB9CiAKLSAgICAqc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rv
cnk6OmNyZWF0ZUlkZW50aWZpZXIoKTsKKyAgICBhdXRvIHNlYXJjaElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CiAKLSAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0g
bV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+KCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0gbV9zZWFyY2hSZXN1bHRz
LmFkZChzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGZvciAoYXV0byYgcmVzdWx0IDogZmluZGVyLnJlc3VsdHMoKSkKICAgICAgICAgcmVzdWx0
c1ZlY3Rvci5hcHBlbmQocmVzdWx0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNWZWN0
b3Iuc2l6ZSgpOworICAgIHJldHVybiB7IHsgc2VhcmNoSWQsIHJlc3VsdHNWZWN0b3Iuc2l6ZSgp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5k
ZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgbm9kZUlkcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcm
IHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCkKIHsKICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJjaElkKTsKLSAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdpdmVu
IHNlYXJjaElkIl9zKTsKIAogICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKLSAgICBp
ZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRl
eCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2Ug
Zm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXgg
Pj0gdG9JbmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHNlYXJj
aCByZXN1bHQgcmFuZ2UgZm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfcyk7CiAKLSAg
ICBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAg
IGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCiAgICAgICAgIG5vZGVJ
ZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkp
OworICAgIHJldHVybiBXVEZNb3ZlKG5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vh
cmNoSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
ZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKIHsKICAgICBtX3Nl
YXJjaFJlc3VsdHMucmVtb3ZlKHNlYXJjaElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJv
b2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQpAQCAtMTExNyw3ICsxMTQ4
LDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlVG91Y2hFdmVudChOb2RlJiBub2Rl
KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUp
CiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGluc3BlY3RlZE5vZGU7CiAgICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShpZ25vcmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwogCkBAIC0x
MTczLDcgKzEyMDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRP
dmVyTm9kZSgpCiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNw
ZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBib29sIHNob3dS
dWxlcnMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKIHsK
ICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTExODMsMTIgKzEyMTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNo
aW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmwKICAgICBtX292
ZXJsYXktPnNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKG1fc2VhcmNoaW5nRm9y
Tm9kZSAmJiBzaG93UnVsZXJzKTsKIAogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUpIHsKLSAg
ICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Cisg
ICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9t
SW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCkpOwogICAgICAgICBpZiAoIW1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGhpZGVIaWdobGlnaHQoZXJyb3JTdHJpbmcpOworICAgICAgICBoaWRl
SGlnaGxpZ2h0KCk7CiAKICAgICBtX292ZXJsYXktPmRpZFNldFNlYXJjaGluZ0Zvck5vZGUobV9z
ZWFyY2hpbmdGb3JOb2RlKTsKIApAQCAtMTE5Niw3ICsxMjI3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmwKICAgICAgICAgY2xpZW50LT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChtX3NlYXJj
aGluZ0Zvck5vZGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KQorc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpCiB7CiAgICAgaWYgKCFoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hsaWdodCBjb25maWd1cmF0aW9u
IHBhcmFtZXRlciBpcyBtaXNzaW5nIl9zOwpAQCAtMTIwNCw4MSArMTIzNSw5MyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29u
ZmlnRnJvbUluc3BlY3RvcgogICAgIH0KIAogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFr
ZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAv
LyBEZWZhdWx0OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KLSAgICBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8pOwotICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJw
YWRkaW5nQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENv
bmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25m
aWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpzaG93SW5mb0tleSkudmFsdWVP
cihmYWxzZSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xv
cihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmNvbnRlbnRDb2xvcktleSwgKmhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFy
c2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OnBhZGRpbmdDb2xv
cktleSwgKmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5i
b3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6
Ym9yZGVyQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdo
dENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGln
aHRDb25maWc6Om1hcmdpbkNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKICAg
ICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGln
aHRDb25maWcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0
cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0
ciwgZmFsc2UpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGlnaGxp
Z2h0Q29uZmlnKSwgZmFsc2UpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
I2Vsc2UKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJv
b2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlv
bmFsPGJvb2w+JiYgc2hvd1J1bGVycykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBl
bmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIHNob3dSdWxlcnMgJiYgKnNob3dSdWxl
cnMpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xv
ciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFk
ID0gbWFrZVVuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29s
b3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUo
cXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xvciksIFdURk1vdmUodXNl
UGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
SlNPTjo6QXJyYXkmIHF1YWRBcnJheSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkT2JqZWN0LCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9u
YWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gbWFrZVVu
aXF1ZTxGbG9hdFF1YWQ+KCk7Ci0gICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdl
dCgpKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFy
cmF5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEZNb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwor
ICAgIGlmICghcGFyc2VRdWFkKFdURk1vdmUocXVhZE9iamVjdCksIHF1YWQuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkIl9zKTsK
KworICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwg
V1RGTW92ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGln
aHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFs
PGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmln
ID0gbWFrZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICBoaWdobGlnaHRDb25m
aWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwog
ICAgIGhpZ2hsaWdodENvbmZpZy0+dXNlUGFnZUNvb3JkaW5hdGVzID0gdXNlUGFnZUNvb3JkaW5h
dGVzID8gKnVzZVBhZ2VDb29yZGluYXRlcyA6IGZhbHNlOwogICAgIG1fb3ZlcmxheS0+aGlnaGxp
Z2h0UXVhZChXVEZNb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVjdG9yKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKLSAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gaGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENv
bmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudDsKIAotICAgIGlmIChm
cmFtZUlkKSB7CisgICAgaWYgKCEhZnJhbWVJZCkgewogICAgICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgICAgICBpZiAo
IXBhZ2VBZ2VudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghcGFnZUFnZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCi0gICAgICAgIGF1dG8qIGZyYW1lID0gcGFn
ZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpOworICAgICAgICBhdXRv
KiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwog
ICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgICAgICBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIH0gZWxzZQogICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1l
bnQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAog
ICAgIENTU1BhcnNlciBwYXJzZXIoKmRvY3VtZW50KTsKICAgICBDU1NTZWxlY3Rvckxpc3Qgc2Vs
ZWN0b3JMaXN0OwpAQCAtMTMzOSwxNTggKzEzODIsMTczIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6CiAgICAgfQogCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2Rl
TGlzdDo6Y3JlYXRlKFdURk1vdmUobm9kZUxpc3QpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodE5vZGUoUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIE9w
dGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBub2RlSWQsIGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYg
KG5vZGVJZCkKICAgICAgICAgbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQp
OwotICAgIGVsc2UgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0
SWQoKm9iamVjdElkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKKyAgICBlbHNlIGlmICgh
IW9iamVjdElkKSB7CisgICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwor
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
OwogICAgIH0gZWxzZQogICAgICAgICBlcnJvclN0cmluZyA9ICJFaXRoZXIgbm9kZUlkIG9yIG9i
amVjdElkIG11c3QgYmUgc3BlY2lmaWVkIl9zOwogCiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdo
bGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxp
Z2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhp
Z2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IEpTT046OkFycmF5JiBub2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCiB7Ci0gICAgVmVjdG9yPFJl
ZjxOb2RlPj4gbm9kZXM7Ci0gICAgZm9yIChhdXRvJiBub2RlVmFsdWUgOiBub2RlSWRzKSB7Ci0g
ICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFz
SW50ZWdlcihub2RlSWQpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOworICAgIGZvciAoYXV0
byYgbm9kZUlkVmFsdWUgOiBub2RlSWRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gbm9kZUlkID0g
bm9kZUlkVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGlu
IGdpdmVuIG5vZGVJZHMiX3MpOwogCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgYSBub2Rl
IGlzIHJlbW92ZWQgaW4gdGhlIHRpbWUgYmV0d2VlbiB3aGVuIGhpZ2hsaWdodE5vZGVMaXN0IGlz
IGludm9rZWQKICAgICAgICAgLy8gYnkgdGhlIGZyb250ZW5kIGFuZCBpdCBpcyBleGVjdXRlZCBi
eSB0aGUgYmFja2VuZCwgd2Ugc2hvdWxkIHN0aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0CiAgICAg
ICAgIC8vIGFzIG1hbnkgbm9kZXMgYXMgcG9zc2libGUuIEFzIHN1Y2gsIHdlIHNob3VsZCBpZ25v
cmUgYW55IGVycm9ycyBnZW5lcmF0ZWQgd2hlbiBhdHRlbXB0aW5nCiAgICAgICAgIC8vIHRvIGdl
dCBhIE5vZGUgZnJvbSBhIGdpdmVuIG5vZGVJZC4gCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9yZWQsIG5vZGVJZCk7Cisg
ICAgICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOworICAgICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShpZ25vcmVkLCAqbm9kZUlkKTsKICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbm9kZXMuYXBwZW5kKCpub2RlKTsKICAgICB9
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcg
PSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmln
PiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICgh
aGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0
KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92ZShub2RlcykpLCAqaGlnaGxpZ2h0Q29uZmln
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVD
b2xvcikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRs
aW5lQ29sb3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdl
bnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBhdXRvIGhpZ2hsaWdo
dENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgICAgICBoaWdobGln
aHRDb25maWctPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZy
YW1lcy4KLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xv
cik7Ci0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KG91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29sb3IoV1RGTW92ZShjb2xvcikpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRP
dXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwogICAgICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJhbWUtPm93bmVyRWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29u
ZmlnKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICAgICBtX292ZXJs
YXktPmhpZGVIaWdobGlnaHQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05v
ZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXRF
bGVtZW50SWQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldE5vZGVJZCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBOb2RlKiBhbmNob3JOb2RlID0gMDsKLSAgICBpZiAoYW5jaG9yTm9kZUlk
ICYmICphbmNob3JOb2RlSWQpIHsKLSAgICAgICAgYW5jaG9yTm9kZSA9IGFzc2VydEVkaXRhYmxl
Tm9kZShlcnJvclN0cmluZywgKmFuY2hvck5vZGVJZCk7CisgICAgTm9kZSogYW5jaG9yTm9kZSA9
IG51bGxwdHI7CisgICAgaWYgKGluc2VydEJlZm9yZU5vZGVJZCAmJiAqaW5zZXJ0QmVmb3JlTm9k
ZUlkKSB7CisgICAgICAgIGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsICppbnNlcnRCZWZvcmVOb2RlSWQpOwogICAgICAgICBpZiAoIWFuY2hvck5vZGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkgIT0g
dGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiR2l2ZW4gYW5jaG9y
Tm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXRFbGVtZW50SWQiX3M7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkg
IT0gdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiR2l2
ZW4gaW5zZXJ0QmVmb3JlTm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXROb2Rl
SWQiX3MpOwogICAgIH0KIAogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqdGFy
Z2V0RWxlbWVudCwgKm5vZGUsIGFuY2hvck5vZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
Km5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwor
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6dW5kbygp
CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnVuZG8oKTsKICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJ
bnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpyZWRvKCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1faGlzdG9y
eS0+cmVkbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9y
U3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nJikKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2Fi
bGVTdGF0ZSgpCiB7CiAgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQp
CiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJs
ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgZm9jdXNhYmxlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghZWxlbWVudC0+aXNGb2N1
c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFbGVtZW50IGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfcyk7CisKICAgICBlbGVtZW50LT5mb2N1cygpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5n
LCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG5vZGUtPmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIGluIGEg
c2hhZG93IHRyZWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG5vZGUtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93
VHJlZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9k
ZUlkIGlzIGluIGEgc2hhZG93IHRyZWUiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWROb2RlID0gbm9k
ZTsKIApAQCAtMTQ5OCwzOCArMTU1Niw0OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICAg
ICAgY29tbWFuZExpbmVBUElIb3N0LT5hZGRJbnNwZWN0ZWRPYmplY3QobWFrZVVuaXF1ZTxJbnNw
ZWN0YWJsZU5vZGU+KG5vZGUpKTsKIAogICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hhbmdl
ZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckRPTUFnZW50Ojpy
ZXNvbHZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQogewotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0ID0gcmVzb2x2
ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdCA9IG9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3QgPSByZXNvbHZlTm9kZShub2RlLCBv
YmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CisKKyAg
ICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBdHRyaWJ1dGVzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFz
c2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKLSAgICByZXN1bHQgPSBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7
CisgICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cXVlc3ROb2RlKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9k
ZSogbm9kZSA9IG5vZGVGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKG5vZGUpCi0gICAg
ICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsK
LSAgICBlbHNlCi0gICAgICAgICpub2RlSWQgPSAwOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
KTsKKworICAgIGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmlu
Zywgbm9kZSk7CisgICAgaWYgKCFub2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gbm9kZUlkOwogfQogCiBTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTE1
NDQsNDQgKzE2MTMsNDQgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJhc2VVUkxTdHJpbmcoRG9j
dW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwoZW1wdHlT
dHJpbmcoKSkuc3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBib29sIHBzZXVkb0VsZW1lbnRUeXBlKFBz
ZXVkb0lkIHBzZXVkb0lkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5
cGUpCitzdGF0aWMgYm9vbCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUHJv
dG9jb2w6OkRPTTo6UHNldWRvVHlwZSogdHlwZSkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6QmVmb3JlOgotICAgICAgICAqdHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QmVmb3JlOworICAgICAgICAqdHlwZSA9IFByb3Rv
Y29sOjpET006OlBzZXVkb1R5cGU6OkJlZm9yZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6Ci0gICAgICAgICp0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpQc2V1ZG9UeXBlOjpBZnRlcjsKKyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9N
OjpQc2V1ZG9UeXBlOjpBZnRlcjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUg
bW9kZSkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZSBzaGFkb3dSb290VHlw
ZShTaGFkb3dSb290TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2Ug
U2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiAgICAgY2FzZSBTaGFkb3dS
b290TW9kZTo6Q2xvc2VkOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpTaGFkb3dSb290VHlwZTo6Q2xvc2VkOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpPcGVuOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
T3BlbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpPcGVu
OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CisgICAgcmV0dXJu
IFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiB9CiAKLXN0YXRpYyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZSBjdXN0b21FbGVtZW50
U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpDdXN0
b21FbGVtZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGVsZW1lbnQuaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkN1c3Rv
bTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6Q3Vz
dG9tOwogICAgIGlmIChlbGVtZW50LmlzRmFpbGVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkZhaWxl
ZDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6RmFp
bGVkOwogICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkQ3VzdG9tRWxlbWVudCgpIHx8IGVsZW1l
bnQuaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKQotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OldhaXRpbmc7Ci0gICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWls
dGluOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpX
YWl0aW5nOworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1
aWx0aW47CiB9CiAKIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNI
QTI1Nkhhc2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE1OTcsOSArMTY2Niw5IEBAIHN0
YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2goY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKICAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2
NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
ck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8
UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAgICBp
bnQgaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFwKTsKKyAgICBhdXRvIGlkID0gYmluZChub2RlLCBu
b2Rlc01hcCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lOwogICAgIFN0cmluZyBsb2NhbE5hbWU7CiAg
ICAgU3RyaW5nIG5vZGVWYWx1ZTsKQEAgLTE2MzAsNyArMTY5OSw3IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUoTm9kZSoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJv
dG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5vZGVJZChpZCkKICAgICAg
ICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4obm9kZS0+bm9kZVR5cGUoKSkpCiAgICAg
ICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKQEAgLTE2NDEsNyArMTcxMCw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvck5vZGUoTm9kZSoKICAgICBpZiAobm9kZS0+aXNDb250YWluZXJOb2RlKCkpIHsKICAgICAg
ICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291bnQobm9kZSk7CiAgICAgICAgIHZh
bHVlLT5zZXRDaGlsZE5vZGVDb3VudChub2RlQ291bnQpOwotICAgICAgICBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJy
YXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOworICAgICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFy
cmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKICAgICAgICAg
aWYgKGNoaWxkcmVuLT5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGRy
ZW4oV1RGTW92ZShjaGlsZHJlbikpOwogICAgIH0KQEAgLTE2NjEsNyArMTczMCw3IEBAIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9i
amVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2hhZG93Um9v
dHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2hhZG93Um9vdHMtPmFkZEl0
ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAgICAgICB2
YWx1ZS0+c2V0U2hhZG93Um9vdHMoV1RGTW92ZShzaGFkb3dSb290cykpOwogICAgICAgICB9CkBA
IC0xNjczLDE2ICsxNzQyLDE2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgICAg
IHZhbHVlLT5zZXRDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoKGNvbXB1dGVDb250ZW50U2VjdXJp
dHlQb2xpY3lTSEEyNTZIYXNoKGVsZW1lbnQpKTsKIAogICAgICAgICBhdXRvIHN0YXRlID0gY3Vz
dG9tRWxlbWVudFN0YXRlKGVsZW1lbnQpOwotICAgICAgICBpZiAoc3RhdGUgIT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCisgICAgICAgIGlm
IChzdGF0ZSAhPSBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCiAg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q3VzdG9tRWxlbWVudFN0YXRlKHN0YXRlKTsKIAogICAgICAg
ICBpZiAoZWxlbWVudC5wc2V1ZG9JZCgpICE9IFBzZXVkb0lkOjpOb25lKSB7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKKyAgICAg
ICAgICAgIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKICAgICAgICAgICAg
IGlmIChwc2V1ZG9FbGVtZW50VHlwZShlbGVtZW50LnBzZXVkb0lkKCksICZwc2V1ZG9UeXBlKSkK
ICAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRvVHlwZShwc2V1ZG9UeXBlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChhdXRvIHBzZXVkb0VsZW1lbnRzID0gYnVpbGRB
cnJheUZvclBzZXVkb0VsZW1lbnRzKGVsZW1lbnQsIG5vZGVzTWFwKSkKLSAgICAgICAgICAgICAg
ICB2YWx1ZS0+c2V0UHNldWRvRWxlbWVudHMoV1RGTW92ZShwc2V1ZG9FbGVtZW50cykpOworICAg
ICAgICAgICAgICAgIHZhbHVlLT5zZXRQc2V1ZG9FbGVtZW50cyhwc2V1ZG9FbGVtZW50cy5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpu
b2RlKSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
Km5vZGUpOwpAQCAtMTcyMSw5ICsxNzkwLDkgQEAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGUKICAg
ICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlOwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZv
ckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGF1dG8gY2hp
bGRyZW4gPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAvLyBTcGVj
aWFsLWNhc2UgdGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhhdCBjb250YWluZXIncyBj
aGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0g
Y29udGFpbmVyLT5maXJzdENoaWxkKCk7CkBAIC0xNzQ1LDE0ICsxODE0LDE0IEBAIFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZEFycmF5CiAgICAgcmV0dXJuIGNoaWxkcmVuOwogfQogCi1SZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBQc2V1
ZG9FbGVtZW50KiBiZWZvcmVFbGVtZW50ID0gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7
CiAgICAgUHNldWRvRWxlbWVudCogYWZ0ZXJFbGVtZW50ID0gZWxlbWVudC5hZnRlclBzZXVkb0Vs
ZW1lbnQoKTsKICAgICBpZiAoIWJlZm9yZUVsZW1lbnQgJiYgIWFmdGVyRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGJlZm9yZUVsZW1lbnQpCiAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5h
ZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShiZWZvcmVFbGVtZW50LCAwLCBub2Rlc01hcCkpOwog
ICAgIGlmIChhZnRlckVsZW1lbnQpCkBAIC0xNzYwLDcgKzE4MjksNyBAQCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcgogICAgIHJldHVybiBwc2V1ZG9FbGVtZW50czsKIH0KIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYgZXZlbnRU
YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3Qg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCitSZWY8UHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIsIFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyLCBFdmVudFRhcmdl
dCYgZXZlbnRUYXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxl
ZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCiB7CiAgICAgUmVm
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
YWxsYmFjaygpOwogCkBAIC0xODIyLDcgKzE4OTEsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dgogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldEV2ZW50TGlzdGVu
ZXJJZChpZGVudGlmaWVyKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5z
ZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUoKSkKQEAgLTE4
MzMsNyArMTkwMiw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgZWxzZSBpZiAoaXM8
RE9NV2luZG93PihldmVudFRhcmdldCkpCiAgICAgICAgIHZhbHVlLT5zZXRPbldpbmRvdyh0cnVl
KTsKICAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1dG8gbG9jYXRpb24g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCisgICAg
ICAgIGF1dG8gbG9jYXRpb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUo
KQogICAgICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElEKQogICAgICAgICAgICAgLnNldExp
bmVOdW1iZXIobGluZU51bWJlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xODUzLDcg
KzE5MjIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihB
WENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU09OOjpBcnJheU9mPGludD4mIGNoaWxkTm9kZUlkcykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhD
b3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
JiBjaGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBheE9iamVjdC5j
aGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTg2Nyw0MyArMTkzNiwz
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTTwogICAgIH0KIH0KICAgICAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKiBub2Rl
KQorUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlJiBub2Rl
KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCiAgICAgaWYgKCFXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKQogICAgICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3Np
YmlsaXR5KCk7CiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAg
ICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgYXV0byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4gY2hpbGROb2RlSWRzOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheU9mPGludD4+IGNvbnRyb2xsZWROb2RlSWRzOwotICAgIGF1dG8gY3VycmVudFN0YXRl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3Vy
cmVudDo6RmFsc2U7CisgICAgYXV0byBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpET006Ok5vZGVJZD4+IGNoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjb250cm9sbGVkTm9kZUlkczsKKyAgICBh
dXRvIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpGYWxzZTsKICAgICBib29sIGV4aXN0cyA9IGZhbHNlOwogICAgIGJvb2wgZXhw
YW5kZWQgPSBmYWxzZTsKICAgICBib29sIGRpc2FibGVkID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8aW50Pj4gZmxvd2VkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBmbG93ZWROb2RlSWRzOwogICAgIGJvb2wgZm9jdXNl
ZCA9IGZhbHNlOwogICAgIGJvb2wgaWdub3JlZCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVkQnlE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgYXV0byBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CisgICAgYXV0byBp
bnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6
OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFsc2U7CiAgICAgU3RyaW5nIGxhYmVsOwogICAg
IGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IGxpdmVSZWdpb25SZWxldmFudDsKLSAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZl
UmVnaW9uU3RhdHVzOjpPZmY7CisgICAgYXV0byBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAg
ICBOb2RlKiBtb3VzZUV2ZW50Tm9kZSA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8aW50Pj4gb3duZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGVJZD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVs
bHB0cjsKICAgICBib29sIHByZXNzZWQgPSBmYWxzZTsKICAgICBib29sIHJlYWRvbmx5ID0gZmFs
c2U7CiAgICAgYm9vbCByZXF1aXJlZCA9IGZhbHNlOwogICAgIFN0cmluZyByb2xlOwogICAgIGJv
b2wgc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBzZWxl
Y3RlZENoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+PiBzZWxlY3RlZENoaWxkTm9kZUlkczsKICAgICBib29sIHN1cHBvcnRzQ2hlY2tl
ZCA9IGZhbHNlOwogICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCA9IGZhbHNlOwogICAgIGJvb2wg
c3VwcG9ydHNMaXZlUmVnaW9uID0gZmFsc2U7CkBAIC0xOTE1LDggKzE5ODAsOCBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsID0gMDsKICAg
ICB1bnNpZ25lZCBsZXZlbCA9IDA7CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RD
YWNoZSA9IG5vZGUtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChB
WENvcmVPYmplY3QqIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobm9kZSkp
IHsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSA9IG5vZGUuZG9jdW1lbnQo
KS5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgaWYgKEFYQ29yZU9iamVjdCogYXhPYmplY3Qg
PSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZSgmbm9kZSkpIHsKIAogICAgICAgICAgICAgaWYg
KEFYQ29yZU9iamVjdCogYWN0aXZlRGVzY2VuZGFudCA9IGF4T2JqZWN0LT5hY3RpdmVEZXNjZW5k
YW50KCkpCiAgICAgICAgICAgICAgICAgYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBhY3RpdmVEZXNj
ZW5kYW50LT5ub2RlKCk7CkBAIC0xOTMyLDQ3ICsxOTk3LDQ5IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNDaGVja2VkKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNoZWNrVmFsdWUgPSBheE9iamVjdC0+Y2hlY2ti
b3hPclJhZGlvVmFsdWUoKTsgLy8gRWxlbWVudCB1c2luZyBhcmlhLWNoZWNrZWQuCiAgICAgICAg
ICAgICAgICAgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpPbikK
LSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6VHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja1ZhbHVlID09IEFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZTo6TWl4ZWQpCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpNaXhlZDsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpNaXhlZDsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChheE9iamVjdC0+aXNDaGVja2VkKCkpIC8vIE5hdGl2ZSBjaGVja2JveC4KLSAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tl
ZDo6VHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFh
eE9iamVjdC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBjaGlsZE5v
ZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGNo
aWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbigqYXhPYmpl
Y3QsICpjaGlsZE5vZGVJZHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4
T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUoY29udHJvbGxlZEVsZW1lbnRzLCBhcmlhX2Nv
bnRyb2xzQXR0cik7CiAgICAgICAgICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnRzLnNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVt
ZW50IDogY29udHJvbGxlZEVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVk
Tm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50
KSk7CisgICAgICAgICAgICAgICAgY29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGZvciAoRWxl
bWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9sbGVkRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY29udHJvbGxlZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0oY29udHJvbGxlZEVsZW1lbnRJZCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2gg
KGF4T2JqZWN0LT5jdXJyZW50U3RhdGUoKSkgewogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Q3VycmVudFN0YXRlOjpGYWxzZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50
OjpGYWxzZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlBhZ2U6
Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6UGFnZTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Q3VycmVudDo6UGFnZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6U3RlcDoKLSAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpTdGVwOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpTdGVwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
OjpMb2NhdGlvbjoKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpMb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6Q3VycmVudDo6TG9jYXRpb247CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkRhdGU6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RGF0ZTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVu
dDo6RGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNjZXNz
aWJpbGl0eUN1cnJlbnRTdGF0ZTo6VGltZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJy
ZW50OjpUaW1lOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUaW1lOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpUcnVl
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRydWU7CisgICAgICAgICAgICAg
ICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkN1cnJlbnQ6OlRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
QEAgLTE5ODYsMTIgKzIwNTMsMTQgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAg
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZmxvd2VkRWxlbWVudHM7CiAgICAgICAgICAgICBheE9iamVj
dC0+ZWxlbWVudHNGcm9tQXR0cmlidXRlKGZsb3dlZEVsZW1lbnRzLCBhcmlhX2Zsb3d0b0F0dHIp
OwogICAgICAgICAgICAgaWYgKGZsb3dlZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGZsb3dlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKQot
ICAgICAgICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGZsb3dlZEVsZW1lbnRJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBm
bG93ZWROb2RlSWRzLT5hZGRJdGVtKGZsb3dlZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAg
ICAgICAgICAgICBzdXBwb3J0c0ZvY3VzZWQgPSBheE9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1
dGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNGb2N1c2VkKQogICAgICAgICAgICAg
ICAgICAgICBmb2N1c2VkID0gYXhPYmplY3QtPmlzRm9jdXNlZCgpOwpAQCAtMjAwMiwxMyArMjA3
MSwxMyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJpbmcgaW52YWxpZFZhbHVlID0gYXhPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKICAgICAg
ICAgICAgIGlmIChpbnZhbGlkVmFsdWUgPT0gImZhbHNlIikKLSAgICAgICAgICAgICAgICBpbnZh
bGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
SW52YWxpZDo6RmFsc2U7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICAgICAgICAgIGVs
c2UgaWYgKGludmFsaWRWYWx1ZSA9PSAiZ3JhbW1hciIpCi0gICAgICAgICAgICAgICAgaW52YWxp
ZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Oklu
dmFsaWQ6OkdyYW1tYXI7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaW52YWxpZFZhbHVlID09ICJzcGVsbGluZyIpCi0gICAgICAgICAgICAgICAgaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OlNwZWxsaW5nOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3BlbGxpbmc7CiAgICAgICAg
ICAgICBlbHNlIC8vIEZ1dHVyZSB2ZXJzaW9ucyBvZiBBUklBIG1heSBhbGxvdyBhZGRpdGlvbmFs
IHRydXRoeSB2YWx1ZXMuIEV4LiBmb3JtYXQsIG9yZGVyLCBvciBzaXplLgotICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGF4T2JqZWN0LT5pc0FYSGlkZGVuKCkgfHwgYXhPYmplY3Qt
PmlzRE9NSGlkZGVuKCkpCiAgICAgICAgICAgICAgICAgaGlkZGVuID0gdHJ1ZTsKQEAgLTIwMjIs
OSArMjA5MSw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudEF0dHJWYWx1ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWFyaWFSZWxldmFudEF0dHJWYWx1ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgZW51bSB2YWx1ZXMgcmF0aGVy
IHRoYW4gc3RyaW5ncyBvbmNlIHVuYmxvY2tlZC4gaHR0cDovL3dlYmtpdC5vcmcvYi8xMzM3MTEK
LSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpBZGRpdGlvbnMpOwot
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50UmVtb3ZhbHMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6UmVtb3ZhbHMpOwotICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50VGV4dCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IFByb3RvY29sOjpIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFk
ZGl0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFs
cyA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlJlbW92YWxzKTsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudFRleHQgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKICAgICAgICAg
ICAgICAgICAgICAgbGl2ZVJlZ2lvblJlbGV2YW50ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgdmFs
dWVzID0gU3BhY2VTcGxpdFN0cmluZyhhcmlhUmVsZXZhbnRBdHRyVmFsdWUsIHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICAvLyBAYXJpYS1yZWxldmFudD0iYWxsIiBpcyBleHBvc2VkIGFzIFsi
YWRkaXRpb25zIiwicmVtb3ZhbHMiLCJ0ZXh0Il0sIGluIG9yZGVyLgpAQCAtMjA0NSw5ICsyMTE0
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKIAogICAgICAgICAgICAgICAgIFN0cmluZyBh
cmlhTGl2ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGFyaWFMaXZlID09ICJhc3NlcnRpdmUiKQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVn
aW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6TGl2ZVJlZ2lvblN0YXR1czo6QXNzZXJ0aXZlOworICAgICAgICAgICAgICAgICAgICBs
aXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkxpdmVSZWdpb25TdGF0dXM6OkFzc2VydGl2ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
cmlhTGl2ZSA9PSAicG9saXRlIikKLSAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Okxp
dmVSZWdpb25TdGF0dXM6OlBvbGl0ZTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0
YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9u
U3RhdHVzOjpQb2xpdGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdD4oKmF4T2JqZWN0KSkKQEAgLTIwNTcsOSArMjEyNiwxMSBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4g
b3duZWRFbGVtZW50czsKICAgICAgICAgICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0
cmlidXRlKG93bmVkRWxlbWVudHMsIGFyaWFfb3duc0F0dHIpOwogICAgICAgICAgICAgICAgIGlm
IChvd25lZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBvd25lZE5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKEVsZW1lbnQqIG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvd25lZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChv
d25lZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBvd25lZEVsZW1lbnRzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvd25lZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQob3duZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
d25lZE5vZGVJZHMtPmFkZEl0ZW0ob3duZWRFbGVtZW50SWQpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yMDgzLDEwICsyMTU0
LDEyIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICBBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwogICAgICAgICAg
ICAgYXhPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzZWxl
Y3RlZENoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0
ZWRDaGlsZE9iamVjdCA6IHNlbGVjdGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKE5vZGUqIHNlbGVjdGVkQ2hpbGROb2RlID0gc2VsZWN0ZWRDaGlsZE9iamVjdC0+bm9kZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChzZWxlY3RlZENoaWxkTm9kZSkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogc2VsZWN0ZWRDaGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0
LT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkQ2hp
bGROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShz
ZWxlY3RlZENoaWxkTm9kZUlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjA5OCw1NCArMjE3MSw2MCBA
QCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2YWx1
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNy
ZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2
YWx1ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RXhpc3RzKGV4aXN0cykKICAgICAgICAgLnNldExhYmVsKGxhYmVsKQogICAg
ICAgICAuc2V0Um9sZShyb2xlKQotICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQobm9kZSkpCisgICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgm
bm9kZSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoZXhpc3RzKSB7Ci0gICAgICAg
IGlmIChhY3RpdmVEZXNjZW5kYW50Tm9kZSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRBY3RpdmVE
ZXNjZW5kYW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5v
ZGUpKTsKKyAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBhY3RpdmVEZXNjZW5kYW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChh
Y3RpdmVEZXNjZW5kYW50Tm9kZSkpCisgICAgICAgICAgICAgICAgdmFsdWUtPnNldEFjdGl2ZURl
c2NlbmRhbnROb2RlSWQoYWN0aXZlRGVzY2VuZGFudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAg
ICAgaWYgKGJ1c3kpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0QnVzeShidXN5KTsKICAgICAgICAg
aWYgKHN1cHBvcnRzQ2hlY2tlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGVja2VkKGNoZWNr
ZWQpOwogICAgICAgICBpZiAoY2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldENo
aWxkTm9kZUlkcyhjaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkTm9k
ZUlkcyhjaGlsZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChjb250cm9s
bGVkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRDb250cm9sbGVkTm9kZUlkcyhjb250
cm9sbGVkTm9kZUlkcyk7Ci0gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCisg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q29udHJvbGxlZE5vZGVJZHMoY29udHJvbGxlZE5vZGVJZHMu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlKQogICAgICAgICAg
ICAgdmFsdWUtPnNldEN1cnJlbnQoY3VycmVudFN0YXRlKTsKICAgICAgICAgaWYgKGRpc2FibGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldERpc2FibGVkKGRpc2FibGVkKTsKICAgICAgICAgaWYg
KHN1cHBvcnRzRXhwYW5kZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0RXhwYW5kZWQoZXhwYW5k
ZWQpOwogICAgICAgICBpZiAoZmxvd2VkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRG
bG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldEZsb3dl
ZE5vZGVJZHMoZmxvd2VkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKHN1
cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRGb2N1c2VkKGZvY3VzZWQpOwog
ICAgICAgICBpZiAoaWdub3JlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRJZ25vcmVkKGlnbm9y
ZWQpOwogICAgICAgICBpZiAoaWdub3JlZEJ5RGVmYXVsdCkKICAgICAgICAgICAgIHZhbHVlLT5z
ZXRJZ25vcmVkQnlEZWZhdWx0KGlnbm9yZWRCeURlZmF1bHQpOwotICAgICAgICBpZiAoaW52YWxp
ZCAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJ
bnZhbGlkOjpGYWxzZSkKKyAgICAgICAgaWYgKGludmFsaWQgIT0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlKQogICAgICAgICAgICAgdmFsdWUt
PnNldEludmFsaWQoaW52YWxpZCk7CiAgICAgICAgIGlmIChoaWRkZW4pCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0SGlkZGVuKGhpZGRlbik7CiAgICAgICAgIGlmIChzdXBwb3J0c0xpdmVSZWdpb24p
IHsKICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uQXRvbWljKGxpdmVSZWdpb25BdG9t
aWMpOwogICAgICAgICAgICAgaWYgKGxpdmVSZWdpb25SZWxldmFudC0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChsaXZlUmVnaW9uUmVsZXZh
bnQpOworICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uUmVsZXZhbnQobGl2ZVJl
Z2lvblJlbGV2YW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldExp
dmVSZWdpb25TdGF0dXMobGl2ZVJlZ2lvblN0YXR1cyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1vdXNlRXZlbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQo
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2ZW50Tm9kZSkpOworICAgICAgICBpZiAobW91
c2VFdmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vdXNlRXZlbnROb2RlSWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1vdXNlRXZlbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+c2V0TW91c2VFdmVudE5vZGVJZChtb3VzZUV2ZW50Tm9kZUlkKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAob3duZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldE93bmVkTm9k
ZUlkcyhvd25lZE5vZGVJZHMpOwotICAgICAgICBpZiAocGFyZW50Tm9kZSkKLSAgICAgICAgICAg
IHZhbHVlLT5zZXRQYXJlbnROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnROb2Rl
KSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0T3duZWROb2RlSWRzKG93bmVkTm9kZUlkcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIHBhcmVudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQocGFyZW50Tm9kZSkp
CisgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBhcmVudE5vZGVJZChwYXJlbnROb2RlSWQpOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c1ByZXNzZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0UHJlc3NlZChwcmVzc2VkKTsKICAgICAgICAgaWYgKHJlYWRvbmx5KQpAQCAtMjE1NSw3
ICsyMjM0LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgaWYgKHNlbGVjdGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKICAgICAgICAgaWYg
KHNlbGVjdGVkQ2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hp
bGROb2RlSWRzKHNlbGVjdGVkQ2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRT
ZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEgxIC0tIEg2IGFsd2F5cyBoYXZlIGEgaGVhZGluZ0xl
dmVsIHByb3BlcnR5IHRoYXQgY2FuIGJlIGNvbXBsaW1lbnRlZCBieSBhIGhpZXJhcmNoaWNhbExl
dmVsCiAgICAgICAgIC8vIHByb3BlcnR5IHdoZW4gYXJpYS1sZXZlbCBpcyBzZXQgb24gdGhlIGVs
ZW1lbnQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byByZW1haW4gY2FsbGluZwpAQCAtMjIzNSwy
MiArMjMxNCwyMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50KiBkb2N1bWVudCkKICAgICBpZiAoIWZyYW1lT3duZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBmcmFtZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGZyYW1lT3du
ZXIpOworICAgIGF1dG8gZnJhbWVPd25lcklkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChm
cmFtZU93bmVyKTsKICAgICBpZiAoIWZyYW1lT3duZXJJZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gUmUtYWRkIGZyYW1lIG93bmVyIGVsZW1lbnQgdG9nZXRoZXIgd2l0aCBpdHMgbmV3IGNo
aWxkcmVuLgotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5u
ZXJQYXJlbnROb2RlKGZyYW1lT3duZXIuZ2V0KCkpKTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUoZnJhbWVPd25lci5nZXQoKSkp
OwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBm
cmFtZU93bmVySWQpOwogICAgIHVuYmluZChmcmFtZU93bmVyLmdldCgpLCAmbV9kb2N1bWVudE5v
ZGVUb0lkTWFwKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZh
bHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKGZyYW1lT3duZXIuZ2V0KCksIDAsICZtX2RvY3VtZW50
Tm9kZVRvSWRNYXApOworICAgIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxk
T2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KTsKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFt
ZU93bmVyLmdldCgpKTsKLSAgICBpbnQgcHJldklkID0gcHJldmlvdXNTaWJsaW5nID8gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKKyAgICBhdXRvIHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVk
KHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW50IEluc3BlY3RvckRP
TUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQorUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIEluc3BlY3RvckRPTUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQogewog
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKTsKIH0KQEAgLTIzMDcsNyAr
MjM4Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50
SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlm
IHBhcmVudCBpcyBub3QgbWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMzE4LDggKzIzOTcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJ
bnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2hpbGRy
ZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAg
ICAgICAgIE5vZGUqIHByZXZTaWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwot
ICAgICAgICBpbnQgcHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KHByZXZTaWJsaW5nKSA6IDA7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVu
dE5vZGVUb0lkTWFwKTsKKyAgICAgICAgYXV0byBwcmV2SWQgPSBwcmV2U2libGluZyA/IG1fZG9j
dW1lbnROb2RlVG9JZE1hcC5nZXQocHJldlNpYmxpbmcpIDogMDsKKyAgICAgICAgUmVmPFByb3Rv
Y29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9k
b2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxk
Tm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKICAgICB9CiB9
CkBAIC0yMzM1LDcgKzI0MTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVE
T01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFtX2RvY3VtZW50Tm9kZVRvSWRNYXAuY29udGFp
bnMocGFyZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMocGFyZW50SWQpKSB7CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBw
ZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9uIGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCkBAIC0yMzU4
LDcgKzI0MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogICAgIGlmIChzaG91bGRTdXBw
cmVzc0V2ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgaWQgPSBib3VuZE5vZGVJZCgm
ZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzNzAsNyArMjQ0OSw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRv
bVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsKLSAgICBpbnQgaWQg
PSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVt
ZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODIsOSArMjQ2MSw5
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0
eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMp
CiB7Ci0gICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIG5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNy
ZWF0ZSgpOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7Ci0gICAgICAgIGlu
dCBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOworICAgICAgICBhdXRvIGlkID0gYm91bmROb2Rl
SWQoZWxlbWVudCk7CiAgICAgICAgIGlmICghaWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApA
QCAtMjM5OCw3ICsyNDc3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1
dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW4KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJh
Y3RlckRhdGEpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmY2hh
cmFjdGVyRGF0YSk7CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmNo
YXJhY3RlckRhdGEpOwogICAgIGlmICghaWQpIHsKICAgICAgICAgLy8gUHVzaCB0ZXh0IG5vZGUg
aWYgaXQgaXMgYmVpbmcgY3JlYXRlZC4KICAgICAgICAgZGlkSW5zZXJ0RE9NTm9kZShjaGFyYWN0
ZXJEYXRhKTsKQEAgLTI0MDksNyArMjQ4OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNo
YXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7
CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOwogICAg
IGlmICghaWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQyMCwyMiArMjQ5OSwyMiBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFB1c2hTaGFkb3dSb290KEVsZW1lbnQm
IGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmhvc3QpOworICAgIGF1dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaWYgKGhvc3RJZCkKICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnNoYWRvd1Jvb3RQdXNoZWQoaG9zdElkLCBidWlsZE9iamVjdEZvck5vZGUoJnJv
b3QsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkK
IHsKLSAgICBpbnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7Ci0g
ICAgaW50IHJvb3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnJvb3QpOworICAgIGF1
dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CisgICAgYXV0byBy
b290SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZyb290KTsKICAgICBpZiAoaG9zdElk
ICYmIHJvb3RJZCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQb3Bw
ZWQoaG9zdElkLCByb290SWQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDaGFu
Z2VDdXN0b21FbGVtZW50U3RhdGUoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpbnQgZWxlbWVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CisgICAgYXV0byBlbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWVs
ZW1lbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDYyLDcgKzI1NDEsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpwc2V1ZG9FbGVtZW50Q3JlYXRlZChQc2V1ZG9FbGVtZW50JiBwc2V1
ZG9FbGVtZW50KQogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
cGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CisgICAgYXV0byBw
YXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICBpZiAoIXBh
cmVudElkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0NzIsMTQgKzI1NTEsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudENyZWF0ZWQoUHNldWRvRWxlbWVudCYgcHNl
dWRvRWxlbWVudCkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudERlc3Ry
b3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogewotICAgIGludCBwc2V1ZG9FbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKKyAgICBh
dXRvIHBzZXVkb0VsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnBzZXVkb0Vs
ZW1lbnQpOwogICAgIGlmICghcHNldWRvRWxlbWVudElkKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJZiBhIFBzZXVkb0VsZW1lbnQgaXMgYm91bmQsIGl0cyBwYXJlbnQgZWxlbWVudCBtdXN0
IGhhdmUgYmVlbiBib3VuZC4KICAgICBFbGVtZW50KiBwYXJlbnQgPSBwc2V1ZG9FbGVtZW50Lmhv
c3RFbGVtZW50KCk7CiAgICAgQVNTRVJUKHBhcmVudCk7Ci0gICAgaW50IHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2Rv
Y3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgQVNTRVJUKHBhcmVudElkKTsKIAog
ICAgIHVuYmluZCgmcHNldWRvRWxlbWVudCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CkBAIC0y
NDk1LDcgKzI1NzQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRBZGRFdmVudExpc3Rl
bmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFub2RlLmNvbnRhaW5zKG1faW5zcGVj
dGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBub2RlSWQgPSBib3Vu
ZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CiAg
ICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxNiw3ICsyNTk1LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJn
ZXQmIHRhcmdldCwgY29uc3QgQXRvbVMKICAgICBpZiAoIW5vZGUuY29udGFpbnMobV9pbnNwZWN0
ZWROb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IG5vZGVJZCA9IGJvdW5k
Tm9kZUlkKCZub2RlKTsKKyAgICBhdXRvIG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKICAg
ICBpZiAoIW5vZGVJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTY2LDcgKzI2NDUsNyBAQCBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JET01BZ2VudDo6YnJlYWtwb2ludEZvckV2
ZW50TGlzdGVuZXIoRXZlbnRUYXJnZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbnQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29s
IGNhcHR1cmUpCitQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCiB7
CiAgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JFdmVudExpc3RlbmVyIDogbV9ldmVudExpc3RlbmVy
RW50cmllcy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoaW5zcGVjdG9yRXZlbnRMaXN0ZW5lci5t
YXRjaGVzKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgY2FwdHVyZSkpCkBAIC0yNjA0LDgg
KzI2ODMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjptZWRpYU1ldHJpY3NUaW1lckZpcmVk
KCkKICAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50ICE9IGlzUG93
ZXJFZmZpY2llbnQpIHsKICAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNp
ZW50ID0gaXNQb3dlckVmZmljaWVudDsKIAotICAgICAgICAgICAgaW50IG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQobWVkaWFFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChub2RlSWQp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bWVkaWFFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8gdGltZXN0YW1wID0gbV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKICAg
ICAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cG93ZXJFZmZpY2llbnRQbGF5YmFj
a1N0YXRlQ2hhbmdlZChub2RlSWQsIHRpbWVzdGFtcCwgaXRlcmF0b3ItPnZhbHVlLmlzUG93ZXJF
ZmZpY2llbnQpOwogICAgICAgICAgICAgfQpAQCAtMjY1OSw3ICsyNzM3LDcgQEAgTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChj
b25zdCBTdHJpbmcmIG9iamVjdElkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JP
YmplY3RJZChjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElk
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKQEAgLTI2NjgsMTUgKzI3NDYsMjAgQEAgTm9kZSog
SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElk
KQogICAgIHJldHVybiBzY3JpcHRWYWx1ZUFzTm9kZShpbmplY3RlZFNjcmlwdC5maW5kT2JqZWN0
QnlJZChvYmplY3RJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKLSAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgp
KQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywg
bm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9y
IGdpdmVuIHBhdGgiX3M7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CisgICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkgeworICAgICAgICBpZiAo
YXV0byBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKSkK
KyAgICAgICAgICAgIHJldHVybiBub2RlSWQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIG5vZGUgZm9yIGdpdmVuIHBhdGgiX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5v
ZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1JlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUo
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSAmbm9kZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoYXV0byogdGVtcGxhdGVIb3N0
ID0gZG9jdW1lbnQtPnRlbXBsYXRlRG9jdW1lbnRIb3N0KCkpCkBAIC0yNzA2LDkgKzI3ODksMTEg
QEAgSlNDOjpKU1ZhbHVlIEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgTm8KICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoJnN0YXRlKSwgQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgbm9kZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0cmluZyYs
IGJvb2wgYWxsb3cpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoYm9vbCBhbGxvdykKIHsK
ICAgICBtX2FsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzID0gYWxsb3c7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggM2UzNzcw
N2FmZWNmNzhmNDIxOGFhODMwMWUxZWEyZDQxYzcyNTE3Mi4uN2YyODcyZGY0OWUwZDQwYWIwMjBj
ZDk4ODRkZWQwMDMwOGYxYTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNzYsMTQgKzc2LDEyIEBAIGNsYXNzIFNo
YWRvd1Jvb3Q7CiAKIHN0cnVjdCBIaWdobGlnaHRDb25maWc7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3RvckRP
TUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckRPTUFnZW50KCk7CiAKICAgICBzdGF0
aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoRXhjZXB0aW9uQ29kZSk7CiAgICAgc3RhdGljIFN0cmlu
ZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbiYmKTsKQEAgLTEwMiw2MiArMTAwLDYyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBOb2RlKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZy
b250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQg
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KTsKIAogICAgIC8vIERPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgcXVlcnlT
ZWxlY3RvcihFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Jz
LCBpbnQqIGVsZW1lbnRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxK
U09OOjpBcnJheU9mPGludD4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RG9jdW1l
bnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYg
cm9vdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGNvbnN0IGludCogZGVwdGgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0cmlidXRl
c0FzVGV4dChFcnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nKiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShF
cnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXROb2RlTmFtZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgaW50KiBuZXdJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRPdXRlckhUTUwo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldE91dGVySFRNTChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgb3V0ZXJIVE1MKSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2VydEFkamFjZW50SFRN
TChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgaHRtbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgZXZlbnROYW1lcykgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gcXVlcnlT
ZWxlY3RvcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBxdWVyeVNlbGVj
dG9yQWxsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBnZXREb2N1bWVudCgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVxdWVzdENoaWxkTm9kZXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVWYWx1
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEF0dHJpYnV0ZXNBc1RleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUF0dHJpYnV0ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZU5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHNldE5vZGVOYW1l
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0T3V0ZXJIVE1MKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXROb2RlVmFs
dWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4+IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICB2b2lkIGdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIGRhdGFBcnJheSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBPcHRp
b25hbDxTdHJpbmc+JiBhc3NvY2lhdGVkRGF0YSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkRhdGFCaW5kaW5nPj4+IGdldERhdGFCaW5kaW5nc0Zvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8U3RyaW5nPiBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQpOwogI2VuZGlmCi0gICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKEVycm9yU3RyaW5nJiwg
aW50IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCByZW1v
dmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IEpTT046OkFycmF5KiBub2RlSWRzLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBT
dHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0
cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIGJvb2wpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVu
ZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4+IGdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZyAvKiBzZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENv
dW50ICovPj4gcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXk+JiYgbm9kZUlkcywgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IGdldFNlYXJjaFJlc3VsdHMoY29uc3QgU3Ry
aW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29u
c3QgU3RyaW5nJiBzZWFyY2hJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gcmVz
b2x2ZU5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldEF0dHJpYnV0ZXMoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEluc3BlY3RNb2RlRW5hYmxlZChib29sLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CiAjZWxzZQotICAgIHZvaWQgc2V0
SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09O
OjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNw
ZWN0TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25m
aWcsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd1J1bGVycyk7CiAjZW5kaWYKLSAgICB2b2lkIHJlcXVl
c3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgaGln
aGxpZ2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkLCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdo
dFNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRDb25m
aWcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0cmluZyogZnJhbWVJZCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJp
bmcqIG9iamVjdElkKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodE5vZGVMaXN0KEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIG5vZGVJZHMsIGNvbnN0IEpTT046Ok9iamVjdCYg
aGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9y
LCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3ZlVG8oRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0Tm9kZUlkLCBjb25zdCBp
bnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5k
byhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVkbyhFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgbWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZvY3VzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0
cmluZyYsIGJvb2wgYWxsb3cpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3ROb2RlKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZD4gcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWRlSGlnaGxp
Z2h0KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
T3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+
JiYgcXVhZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFNl
bGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodE5vZGVMaXN0KFJlZjxKU09OOjpBcnJheT4m
JiBub2RlSWRzLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHRGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQ+IG1vdmVUbyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBub2Rl
SWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJZCwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlk
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVuZG8oKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlZG8oKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG1hcmtVbmRvYWJsZVN0
YXRlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBmb2N1
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNwZWN0ZWROb2RlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEFsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKGJvb2wpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgaW50IGlkZW50aWZpZXJGb3JOb2Rl
KE5vZGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBpZGVudGlmaWVy
Rm9yTm9kZShOb2RlJik7CiAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyc1RvTm9kZShOb2RlJik7
CiAgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUmKTsKICAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYpOwpAQCAtMTg1LDEyICsxODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
dHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KTsKIAotICAgIGludCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOwotICAgIGludCBwdXNoTm9k
ZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqKTsKLSAg
ICBpbnQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcsIE5vZGUqKTsKLSAgICBOb2RlKiBub2RlRm9ySWQoaW50
IG5vZGVJZCk7Ci0gICAgaW50IGJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm